Macro en excel para buscar un dato y copiar a partir de la siguiente fila y varias columnas

Llego a ustedes para que me apoyen con una macro en excel, resulta que todos los días me envían a mi un archivo de excel con varias tablas en una misma hoja, las cuales tengo que copiar y pegar en otro archivo de excel pero en difertetes hojas ya que los datos que traen generan gráficas diariamente con la nueva información, necesito una macro que busque en una columna una palabra, en este caso sería RESUMEN y copie todos los datos de esa tabla, en este caso la palabra RESUMEN esta en la celda B4 y termina en la celda B85 aunque no todos los días llega a esa fila hay días en que esta filas más antes o después, y requiero que los datos que están justo después de la fila resumen se copien hasta la columna J, justo después de que se copien se peguen en otro libro en la segunda hoja a partir de la fila A3 ya que de ahí actualizo una tabla dinámica y a la vez una gráfica, espero me halla dado a entender, de antemano muchas gracias por su ayuda, no soy un experto en macros por lo cual requiere amablemente de su apoyo.

1 respuesta

Respuesta
1

Pon la siguiente macro en el libro que va a recibir los datos, llamemos a este libro "base"

Cuando ejecutes la macro, se abre el explorador de archivo para que selecciones el archivo de excel que contiene los datos, llamemos a este libro "resumen", una vez que selecciones el archivo "resumen", presiona Aceptar.

La macro copiará, del archivo "resumen", de la primer hoja, el rango de celdas de B4 hasta J y la última fila con datos; y pegará los datos en la segunda hoja del archivo "base". Por último la macro cierra el libro "resumen".

Prueba la macro y dime si es lo que necesitas.

Sub Copiar_Datos()
'Por.Dante Amor
    Set l1 = ThisWorkbook
    Set h1 = l1.Sheets(2)
    h1.Rows("3:" & Rows.Count).ClearContents
    '
    Application.ScreenUpdating = False
    With Application.FileDialog(msoFileDialogFilePicker)
        .Title = "Seleccione archivo de excel"
        .Filters.Clear
        .Filters.Add "Todos los archivos", "*.*"
        .Filters.Add "Archivos excel", "*.xls*"
        .FilterIndex = 2
        .AllowMultiSelect = False
        .InitialFileName = ThisWorkbook.Path & "\"
        If .Show Then
            Set l2 = Workbooks.Open(.SelectedItems.Item(1))
            Set h2 = l2.Sheets(1)
            h2.Range("B4:J" & h2.Range("B" & Rows.Count).End(xlUp).Row).Copy
            h1.Range("A3").PasteSpecial xlValues
            l2.Close False
            Application.ScreenUpdating = True
            MsgBox "Datos Copiados"
        End If
    End With
End Sub

.

'S aludos. Dante Amor. Recuerda valorar la respuesta. G racias

.

Avísame cualquier duda

.

Buen dia antes que nada te agradezco el apoyo brindado, te comento, el dia de hoy me llego ya el archivo para hacer el traspaso de informacion, la macro si hace el copiado pero de toda la columna, como seria si solo quisiera que copiara hasta la ultima fila de la tabla ya que despues de esa fila hay una fila vacia y empieza otra tabla con mas datos que tengo que meter en otros libros, disculpa si es que no me doy a enterder bien.

Esta macro solamente copiaría el primer bloque al archivo "resumen", ya que lo que pediste fue esto:

"

Y requiero que los datos que están justo después de la fila resumen se copien hasta la columna J, justo después de que se copien se peguen en otro libro en la segunda hoja a partir de la fila A3

"

Sub Copiar_Datos()
'Por.Dante Amor
    Set l1 = ThisWorkbook
    Set h1 = l1.Sheets(2)
    h1.Rows("3:" & Rows.Count).ClearContents
    '
    Application.ScreenUpdating = False
    With Application.FileDialog(msoFileDialogFilePicker)
        .Title = "Seleccione archivo de excel"
        .Filters.Clear
        .Filters.Add "Todos los archivos", "*.*"
        .Filters.Add "Archivos excel", "*.xls*"
        .FilterIndex = 2
        .AllowMultiSelect = False
        .InitialFileName = ThisWorkbook.Path & "\"
        If .Show Then
            Set l2 = Workbooks.Open(.SelectedItems.Item(1))
            Set h2 = l2.Sheets(1)
            u = 4
            Do While h2.Cells(u, "B") <> ""
                u = u + 1
            Loop
            h2.Range("B4:J" & u).Copy
            h1.Range("A3").PasteSpecial xlValues
            l2.Close False
            Application.ScreenUpdating = True
            MsgBox "Datos Copiados"
        End If
    End With
End Sub

Pero para copiar el segundo bloque a otro archivo tendría que ser una lógica diferente, es decir, tendría que hacer otra macro pensando en que el bloque1 va a la archivo1, el bloque2 al archivo2, etc.


Sin embargo, sigo sin entender muy bien cómo tienes los datos, ya que no habías mencionado una fila vacía.

Entonces valora esta respuesta, ya que cubre lo que solicitaste. Crea una nueva pregunta y explicas con más detalle qué quieres copiar y en dónde lo quieres pegar. Apóyate con imágenes para hacer más clara la explicación. En el desarrollo de la pregunta escribe "Para Dante Amor" y con gusto te sigo ayudando.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas