Copiar celdas de una hoja a otra de manera consecutiva

Expertos:

Tengo una hoja excel en donde hay dos recuadros con determinados campos. Uno empieza de A8:H24 y el otro de A29:H44 (ambos casos tienen 14 filas)

El primer recuadro alberga datos principales y el segundo datos adicionales.

La rutina que les adjunto me traslada los datos al primer recuadro (datos principales) pero de allí no hayo la forma de poder decir si hay datos adicionales, los pegue a partir de A29 Adicionalmente para ambos casos quiero que solamente me permita ingresar catorce datos y que de allí me salga un msg que diga los campos están llenos o algo así.

Gracias!

Private Sub CommandButton1_Click()
Application.ScreenUpdating = False
Dim filaUlt As Long
Sheets("Anexo1").Select
'esta será la primer fila libre para acumular los datos
filaUlt = Sheets("Anexo1").Range("A65536").End(xlUp).Row + 1
'luego pasará cada celda de la hoja Motivos a las distintas col de la fila libre de la hoja Base de Datos
Range("A" & [A:A].Rows.Count).End(xlUp).Offset(1, 0).Select
.

.

1 respuesta

Respuesta
1

Quisiera ayudarte pero no me quedó claro...

La rutina obtiene la 1er fila libre en hoja Anexo1, supongamos que resulte fila 30

Luego se pasa allí un rango de hoja Base de datos... ¿ésta es la hoja con los 2 recuadros?

Si es asi no queda claro porqué si hay datos adicionales, los pegue a partir de A29

Quizás si me comentas un ejemplo concreto pueda ayudarte, quizás con un bucle del tipo For i = 1 to 14.

Quedo a la espera de tus aclaraciones

Sdos

Elsa

Gracias Elsa:

Ok empiezo de cero.

El tema esta en que yo activo lineas con o sin paquetes de internet. Si solo activo lineas llevo datos al primer cuadro. Pero si adicionalmente les activo plan de internet también tengo que llenar el segundo cuadro es asi que tengo tres hojas, Hoja1, Hoja2, Anexo y un command buttom.

En hoja uno, pego datos generales que ocupan varias celdas.

Al presionar el command realiza lo siguiente:

Extrae de hoja uno ciertos datos que me interesan y se ubican en en la primera fila A1,B1,C1.... M1 de la hoja dos. (hasta aca todo bien).

Luego estos datos los tengo que pasar a la hoja Anexo vale decir los datos de A1 hasta F1 se tiene que copiar a partir de A8 de la hoja anexo. Y los datos de G1 hasta la M1 a partir de la A24 de la hoja anexo. Cada recuadro tiene 14 filas y es aca que cuando llegue a la fila numero 14 ya no permita ingresar mas datos y salte un msg.

Me he tomado la libertad de enviarte un correo con el formato.

Gracias por tu ayuda de antemano.

Alberto

La macro responde a tu modelo, no a tus comentarios en cuanto a rangos o límite de filas por tabla.

Sub copiaAnexo()
'x Elsamatilde
'me aseguro de estar en Hoja2
Sheets("Hoja2").Select
'si la celda A1 no está vacía copio rango A:I a hoja Anexo primer recuadro, col B
If Range("A1") <> "" Then
'busco la primer fila libre de este recuadro
finx = Sheets("Anexo1").Range("A25").End(xlUp).Row + 1
If finx > 24 Then
MsgBox "Has llegado el límite de la tabla 1, este registro no se pasará", , "ATENCIÓN"
Exit Sub
End If
Sheets("Anexo1").Range("B" & finx) = Range("A1")
Sheets("Anexo1").Range("C" & finx) = Range("B1")
Sheets("Anexo1").Range("D" & finx) = Range("C1")
Sheets("Anexo1").Range("E" & finx) = Range("D1")
Sheets("Anexo1").Range("F" & finx) = Range("E1")
Sheets("Anexo1").Range("G" & finx) = Range("F1")
Sheets("Anexo1").Range("H" & finx) = Range("G1")
Sheets("Anexo1").Range("I" & finx) = Range("H1")
Sheets("Anexo1").Range("J" & finx) = Range("I1")
'incremento la col A
Sheets("Anexo1").Range("A" & finx) = Sheets("Anexo1").Range("A" & finx - 1) + 1
End If
'si la celda J1 no está vacía copio rango J1:N1 a col B del 2do recuadro
If Range("J1") <> "" Then
'busco la primer fila libre de este recuadro
finx = Sheets("Anexo1").Range("A45").End(xlUp).Row + 1
Sheets("Anexo1").Range("B" & finx) = Range("J1")
Sheets("Anexo1").Range("C" & finx) = Range("K1")
Sheets("Anexo1").Range("E" & finx) = Range("L1")
Sheets("Anexo1").Range("G" & finx) = Range("M1")
Sheets("Anexo1").Range("H" & finx) = Range("N1")
'incremento la col A
Sheets("Anexo1").Range("A" & finx) = Sheets("Anexo1").Range("A" & finx - 1) + 1
End If
End Sub

Notas:

1- No copio el rgo completo sino celda x celda xq tienen formato distinto.

2- Si no se puede copiar datos de la 1er tabla x haber llegado al límite tampoco se copia el 2do grupo de celdas (2da tabla)

Sdos

Elsa

Gracias Elsa:

Solo un pequeño detalle para ambos recuadros si en el campo item no pongo 1, no corre la rutina.

Y la primera fila la deja en blanco y empieza a enumerar y pegar a partir de la fila 2 par ambos casos.

Saludos,

Si, es cierto, lo probé en las tablas ya cargadas...;)

Ajustá estas líneas a partir del mensaje en negrita

'incremento la col A- verifico si es la 1ra
If finx = 8 Then
Sheets("Anexo1").Range("A" & finx) = 1
Else
Sheets("Anexo1").Range("A" & finx) = Sheets("Anexo1").Range("A" & finx - 1) + 1
End If

End If

Para el 2do cuadro:

'incremento la col A- verifico si es la 1er fila del rango
If finx = 29 Then
Sheets("Anexo1").Range("A" & finx) = 1
Else
Sheets("Anexo1").Range("A" & finx) = Sheets("Anexo1").Range("A" & finx - 1) + 1
End If

End If

Bien!!! Gracias quedo Ok pero para cerrar una ultima consulta que es finx?

Es la variable que guarda la fila libre:

'busco la primer fila libre de este recuadro
finx = Sheets("Anexo1").Range("A25").End(xlUp).Row + 1

Si necesitas definirla será Integer o Long según cantidad de filas a utilizar, x ej:

Dim finx as Integer

Sdos

Elsa

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas