Macro para copiar rangos de una hoja especifica de varios libros y consolidarlos en una sola hoja de un archivo nuevo

Sigo con poca experiencia y ahora requiero una macro que copie rangos específicos en una hoja (primera hoja) de varios archivos y luego pegarlos en un libro llamado "Consolidado"

Ejemplo:

- Tengo varios archivos en una carpeta que pueden variar en cantidades

- Cada archivo tiene en como primera hoja una llamada COSTOS

- Cada hoja COSTOS tiene datos como se muestra en la imagen

- Quiero que la macro abra los archivos y de esa hoja llamada COSTOS copie solo las celdas visibles (las ocultas no) y las pegue en un archivo llamado "Consolidado" quedando de esta manera:

- El libro llamado "Consolidado" ya estará creado y con los nombres de las columnas ya definidos

Respuesta
1

Pon la siguiente macro en tu archivo "Consolidado".

No mencionaste cómo se llama la hoja del libro "Consolidado" donde se va a poner la información, en la macro le puse "CostosConsol", cambia ese nombre en la macro por el nombre de tu hoja.

También cambia en la macro la ruta en donde se encuentra los archivos, en esta línea:

ruta = "C:\trabajo\varios\"

Sub CopiarRangos()
'Por.Dante Amor
    'copia rangos de hojas de libros en un libro
    Application.ScreenUpdating = False
    Application.DisplayAlerts = False
    Set l1 = ThisWorkbook
    Set h1 = l1.Sheets("CostosConsol")
    ruta = "C:\trabajo\varios\"
    '
    archi = Dir(ruta & "*.xls*")
    Do While archi <> ""
        Set l2 = Workbooks.Open(archi)
        Set h2 = l2.Sheets(1)
        u2 = h2.Range("B" & Rows.Count).End(xlUp).Row
        If u2 > 4 Then
            u1 = h1.Range("B" & Rows.Count).End(xlUp).Row + 1
            h2.Rows("5:" & u2).Copy
            h1.Cells(u1, "A").PasteSpecial Paste:=xlValues
        End If
        l2.Close False
        archi = Dir()
    Loop
    Application.ScreenUpdating = True
    MsgBox "Consolidación terminada"
End Sub

Los datos serán pegados como pegado especial valores.

Si quieres que se peguen normal, entonces cambia estas líneas en la macro:

            h2.Rows("5:" & u2).Copy
            h1.Cells(u1, "A").PasteSpecial Paste:=xlValues

Por esta:

h2.Rows("5:" & u2).Copy h1.Cells(u1, "A")

Hola muchas gracias por tu respuesta pero ejecuté la macro y no pega ningun valor en el nuevo libro

Solo hice adicional lo que pediste: agregue la dirección de la carpeta donde están los archivos "C:\Users\wmontene\Desktop\Pruebas templates\general" y al libro consolidado nombre la primera hoja donde se pegaran los valores "CostosConsol"

Ejecuté la macro y dice consolidación terminada pero no pega ningún valor

Podría hacer mas interesante la pregunta para la macro que quiero por algo que vi en otra macro:

Quisiera que un archivo tenga un botón (sé como asignar macro a botón) y que al darle click al botón se abra la carpeta donde esta ese archivo, en esa misma carpeta están los archivos que quiero consolidar (tal como el ejemplo anterior)

Luego debo seleccionar de esa carpeta los archivos que quiero consolidar.

La marco copiará solo las columnas visibles de los archivos a consolidar y los pegará en el archivo consolidado que ya tiene los encabezados de columnas.

Espero haber sido explicativo

Muchas gracias

En tu ruta no pusiste la última diagonal:

"C:\Users\wmontene\Desktop\Pruebas templates\general"

Debe ser así:

"C:\Users\wmontene\Desktop\Pruebas templates\general\"

En esa carpeta pon los archivos que vas a consolidar.


Sin duda se le pueden hacer mejoras a la macro, todas las que quieras con gusto las realizo, pero antes de pasar a una mejora terminemos de probar esta parte.

S a l u d o s

Le coloque la diagonal y arroja error 400. debo estar haciendo algo malo pero no se que es.. Te paso las imágenes de todo lo que tengo

Esta es la macro con las modificaciones

Este es el archivo consolidado

Este es la carpeta donde están los archivos

Este es el contenido de uno de los archivos

¿Puedes poner el mensaje de error completo y en qué línea de la macro se detiene?

Revisa bien la ruta que pusiste, tal vez un espacio de más o de menos.

También envíame el mensaje de error completo y en qué línea de la macro se detiene.

Si ya se resolvió, recuerda valorar la respuesta.

No he recibido más comentarios, si ya te funciona la macro, recuerda valorar la respuesta.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas