Importar filas desde otra hoja

Espero que me puedan ayudar con esto:
Estoy intentando crear una macro para que desde una hoja creada como plantilla por mí llamada PLANTILLA.XLSX me importe desde un archivo llamado "CONTROL CARGOS.XLSX" solamente las filas enteras en las que haya algo rellenado en la columna C.

Necesitaría que las insertase inicialmente a partir de la fila nro. 10 en la hoja PLANTILLA y que además en sucesivas importaciones del mismo archivo me las vaya agregando al final de la última fila rellenada que exista. La idea es repetir esta importación a menudo siempre agregando filas.

Muchas Gracias por su colaboración.

1 respuesta

Respuesta
1

Te mando mi solución. En tu consulta no dices en qué hoja están los datos por lo que he supuesto que están en la hoja1 de cada libro.

Primer paso:

Tenemos que tener el libro CONTROL CARGOS.XLSX grabado con la información

Segundo paso:

Abrimos un archivo nuevo, y en su hoja1 ponemos los encabezados que deseemos... y lo guardamos con el nombre PLANTILLA.XLSX (sin salirnos).

Ahora copia esta macro en un módulo del archivo PLANTILLA.XLSX y después la ejecutas.

Primera te aparecerá un browse para que elijas en qué carpeta está el archivo CONTROL CARGOS y seguidamente culmina el proceso.

Sub acumular()
milibro = ActiveWorkbook.Name
Set navegador = CreateObject("shell.application")
carpeta = navegador.browseforfolder(0, "SELECCIONE LA CARPETA DONDE ESTÁ EL ARCHIVO", 0, "C:\").items.Item.Path
ChDir carpeta & "\"
Workbooks.Open "control cargos.xlsx"
otro = ActiveWorkbook.Name
Sheets(1).Select
Range("b2").Select
Range("b65000").End(xlUp).Offset(1, 0).Value = "final"
Do While ActiveCell.Value <> "final"
If ActiveCell.Value <> "" Then
ActiveCell.EntireRow.Copy Destination:=Workbooks(milibro).Sheets(1).Range("a65000").End(xlUp).Offset(1, 0)
End If
ActiveCell.Offset(1, 0).Select
Loop
End Sub

recuerda finalizar y puntuar

Hola Luis, muchas gracias por tu respuesta.:

Me encuentro solamente una cosa que no encaja bien.y es que no me importa las primeras filas por tener la columna A vacía, he probado a rellenarla y sí que las coge.

Necesitaría que no mire la columna A sólo la C. Por más que reviso tu macro no encuentro la forma de variar esto.

Según mi macro, cuando abrimos el archivo deseado, es decir, control cargos.xlsx se centra en revisar la columna B de la hoja1 ¿no es correcto?

Bueno yo he cambiado la columna B por la C que es la que te comentaba que se debía comparar.

Pero a pesar de comparar la C o la B en tu ejemplo ocurre que si la columna A está vacía no copia esa fila.

Un saludo,

Entonces la macro correcta sería así:

Sub acumular()
milibro = ActiveWorkbook.Name
Set navegador = CreateObject("shell.application")
carpeta = navegador.browseforfolder(0, "SELECCIONE LA CARPETA DONDE ESTÁ EL ARCHIVO", 0, "C:\").items.Item.Path
ChDir carpeta & "\"
Workbooks.Open "control cargos.xlsx"
otro = ActiveWorkbook.Name
Sheets(1).Select
Range("c2").Select
Range("c65000").End(xlUp).Offset(1, 0).Value = "final"
Do While ActiveCell.Value <> "final"
If ActiveCell.Value <> "" Then
ActiveCell.EntireRow.Copy Destination:=Workbooks(milibro).Sheets(1).Range("a65000").End(xlUp).Offset(1, 0)
End If
ActiveCell.Offset(1, 0).Select
Loop
End Sub

Perdona Luis pero el problema persiste.

Me refiero a que a pesar de que la columna que mira es la C si no tenemos nada en la columna A no coge la fila y por más que miro no alcanzo a comprender porqué. No sé si tú podrás ver el motivo.

Al margen de esto tú sabrías cómo podríamos después en la columna C de de la hoja PLANTILLA.XLSX una vez copiadas las filas desde la otra hoja le podríamos eliminar el sexto carácter?

Verás el número que aparece sería como éste: 01400/2179791 y quisiera eliminar el slash "/" . Creo que sabría hacerlo con funciones de excel pero en visual no tengo mucha idea

Te vuelvo a escribir la macro con una ligera modificación y describo lo que hace.

En primer lugar se abre un browse para elegir la carpeta y después se abre automáticamente el archivo "control cargos.xlsx"

Una vez abierto nos situamos en la celda c2 para ir hacia abajo y siempre que la celda tengo algún contenido copiará la fila entera a nuestro libro principal en la hoja que esté en primer lugar y a partir de la fila 10

En cuanto a la obra duda, te pongo un ejemplo:

Si tenemos en una celda el valor: 01400/2179791 nos posicionamos en ella y ejecutamos esta macro, verás como limpia la barra.

Sub prueba()
ActiveCell.Value = Replace(ActiveCell.Value, "/", "")
End Sub

Sub acumular()
f=10
milibro = ActiveWorkbook.Name
Set navegador = CreateObject("shell.application")
carpeta = navegador.browseforfolder(0, "SELECCIONE LA CARPETA DONDE ESTÁ EL ARCHIVO", 0, "C:\").items.Item.Path
ChDir carpeta & "\"
Workbooks.Open "control cargos.xlsx"
otro = ActiveWorkbook.Name
Sheets(1).Select
Range("c2").Select
Range("c65000").End(xlUp).Offset(1, 0).Value = "final"
Do While ActiveCell.Value <> "final"
If ActiveCell.Value <> "" Then
ActiveCell.EntireRow.Copy Destination:=Workbooks(milibro).Sheets(1).cells(f,1)
f=f+1
End If
ActiveCell.Offset(1, 0).Select
Loop
End Sub

La macro está probada y funciona correctamente.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas