Extracción de datos de varias hojas

Hola amigo:
Tengo 200 facturas y cada una de ellas esta en en libro diferente, quiero sacar de cada libro los datos correspondientes a la celda b:17 y f:52
Y que los copie en el libro nuevo que estoy haciendo, también me gustaría que cuando pegase en el nuevo libro saltaría una fila para pegar los datos del siguiente libro, he probado de hacer una macro, pero solo consigo abrir un libro, no se como asignarle que me coja el siguiente libro, los archivos que quiero abrir están renombrados valor numérico, un saludo

1 Respuesta

Respuesta
1
Tres veces redacté este mail. Dos veces mi ~~~@#$%__!?¿##@@ PC se colgó y lo perdí, espero que esta sí logre completarla.
Tal como lo pediste, aquí tienes una macro que desarrollé para que ejecute una determinada acción sobre varios libros.
Para su funcionamiento solo necesitas crear un archivo nuevo que será un auxiliar para juntar todos los archivos en un único archivo.
Este archivo debe tener una hoja llamada INICIO.
En ella, coloca en la celda C7 la dirección de la carpeta donde debe buscar todos los archivos.
En la celda C8, ingresa qué tipo de archivos debe considerar. Esto te permite, seleccionar algunos de los archivos del directorio indicado en C7. Así, por ejemplo, si quieres que sólo considere los archivos que empiezan con "Fact", coloca en esa celda:
Fact*.xls
Si quieres que traiga todos los archivos, simplemente deja en tal celda:
*.xls
La celda C9 permite que coloques una clave, en caso de que los archivos a abrir tuvieran la misma clave de protección para apertura.
Si no tuviesen clave, deja esa celda en blanco.
Como no dijiste, específicamente de qué hoja debe tomar el rango B17:F52, la celda C10 recibirá tal dato.
Finalmente, la celda C11 tendrá el rango a traer (en tu caso:B17:F52)
Otra hoja, que llamaré "DATOS", recibirá desde la celda B4 los rangos de tus archivos
Graba este archivo.
Ahora falta colocar la macro que hace el trabajo.
Activa el editor de Visual Basic (presiona Alt+F11), inserta un nuevo módulo ("Insertar", "´Modulo") y pega el siguiente código:
Sub Pegarango()
'==== Variables del sistema
Dim MiCarpeta As String, MisArchivos As String, MiClave As String
'manuales:
Hoja_dest = "DATOS"
Celda_ini = "B4"
'tomadas de Hoja Inicio:
MiCarpeta = Trim(Sheets("INICIO").Range("C7").Value) & IIf(Right(Trim(Sheets("INICIO").Range("C7").Value), 1) = "\", "", "\")
MisArchivos = Trim(Sheets("INICIO").Range("C8").Value)
MiClave = Trim(Sheets("INICIO").Range("C9").Value)
DeHoja = Trim(Sheets("INICIO").Range("C10").Value)
ElRango = Trim(Sheets("INICIO").Range("C11").Value)
With Application.FileSearch
.LookIn = MiCarpeta
.SearchSubFolders = True
.FileName = MisArchivos
If .Execute(SortBy:=msoSortByFileName, SortOrder:=msoSortOrderAscending) > 0 Then
Sheets(Hoja_dest).Select
Range(Celda_ini).Select
For i = 1 To .FoundFiles.Count
DirFile = .FoundFiles(i)
Workbooks.Open FileName:=DirFile, Updatelinks:=False, PASSWORD:=""
Application.Calculation = xlManual
ActiveWorkbook.Unprotect PASSWORD:=MiClave
'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'
'* TAREA A EFECTUAR en archivo: PEGAR SECUENCIALMENTE RANGO DE CADA ARCHIVO
'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'
'Application.ScreenUpdating = False
Application.CutCopyMode = False
Sheets(DeHoja).Select
Range(ElRango).Copy
ActiveWindow.ActivatePrevious
Sheets(Hoja_dest).Select
With Selection
.PasteSpecial Paste:=xlValues
.PasteSpecial Paste:=xlFormats
End With
'ActiveSheet.Paste '<- Activa este si quieres que
'pegue los datos copiados tal como están en archivo
'de origen (y desactiva las cuatro lineas anteriores)
ActiveCell.Offset(Selection.Rows.Count + 1).Select
Application.CutCopyMode = False
ActiveWindow.ActivateNext
ActiveWorkbook.Close False
Sheets("INICIO").Select
Application.ScreenUpdating = True
'=============================================================
' FIN tarea en archivo
'=============================================================
Next i
MsgBox i - 1 & " ARCHIVOS AGREGADOS"
Else
MsgBox "No se encontró ningún archivo " & MisArchivos & " en " & Chr(10) & MiCarpeta
End If
End With
End Sub
Notarás que la mayoría de los datos están parametrizados, es decir que podrás cambiar la información en las variables sin tener que modificar el procedimiento. Un par se cargan dentro del código y el reto las toma de la hoja INICIO
Cierra el editor de visual basic y graba el archivo.
Hacia la mitad de la macro notarás que está indicada cuál es la tarea que debe realizar en cada archivo.
De esta manera, si otro día quieres hacer otra cosa con varios archivos en un directorio, bastará que coloques el código a ejecutar en este lugar.
El toque final sería colocar un botón en la hoja INICIO para activar la macro.
Para esto, una vez copiada la macro en el archivo, muestra la barra de herramientas de "Formularios" ("Ver" | "Barras de herramientas" | "Formularios".
De ella, toma el icono de "botón" y dibújalo en tu hoja. Al haber presionado el icono, el cursor del mouse se transformará en una cruz fina. Mantén presionado el botón derecho y arrástralo hasta donde desees dibujando el botón.
Cuando sueltes la tecla, automáticamente aparecerá la lista de macros disponibles de dónde podrás seleccionar el que quieres asociar. Simplemente, dale doble click.
También, puedes cambiar la vinculación de un botón con una macro, dando click derecho sobre él y eligiendo "Asignar macro". Otra vez, la lista de macros disponibles te permitirá realizar tal asignación.
Listo. Tienes un archivo que abrirá uno de los que te mandaron. Copiará el rango indicado, uno a continuación de otro con una línea de separación y luego cerrará ese archivo. Posteriormente, hará lo propio con el siguiente y así, hasta terminar con todos los indicados.
Finalmente bastará conque grabes este archivo combinado, dándole otro nombre por supuesto, y luego puedes eliminar la hoja INICIO y el módulo de la macro si no las necesitas.
Esto debería resolver tu pregunta. Si así fuera, agradeceré un comentario y que la finalices.
(Recuerda que mantener cierto número de respuestas pendientes impide que otros usuarios puedan consultarme)
aclarando qué entendí mal o qué faltó.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas