Macro Excel VBA y copiar pegar entre libro(s)
Resuelto
tom_3031
Mensajes publicados
8
Estado
Miembro
-
regys1 Mensajes publicados 4 Fecha de registro Estado Miembro Última intervención -
regys1 Mensajes publicados 4 Fecha de registro Estado Miembro Última intervención -
Bonjour,
Más vale uno que sabe que 10 que busca...
¿Cuáles son las líneas de código que debo poner en mi macro de Excel para resolver el siguiente problema.
Tengo 52 libros de Excel (en una misma carpeta) en los que me interesan el contenido de unas 10 celdas. Estas celdas están en una misma hoja, en la misma fila y la misma columna en los 52 libros. Las celdas no están contiguas.
Me gustaría copiar/pegar todo eso en un libro final ya creado. Con 52 columnas (1 para cada libro) de 10 filas (una para cada celda).
=> Idea directriz de procedimiento cuestionable y a traducir a VBA
0) Crear mi macro desde mi libro final con los siguientes pasos:
1) Iniciar un bucle en todos los libros del carpeta (especificar la ruta de la carpeta)
Dentro del bucle:
2) Abrir el primer Excel
3) copiar pegar las 10 celdas en una misma columna (vacía) del libro en cuestión en el orden deseado
4) copiar pegar esta columna en su columna de destino en el libro final
5) cerrar el Excel
6) Pasar al siguiente
Tanto la etapa 3 dentro de un mismo archivo la veo cómo hacerlo pero la gestión de pasar de un libro a otro, no tengo nivel...
Entre los Workbooks, workbookS, Activate, Open, For each next, la función Grabar una macro y no conociendo realmente la sintaxis de VBA... ¡estoy luchando!
¡Muchas gracias!
Thomas
Más vale uno que sabe que 10 que busca...
¿Cuáles son las líneas de código que debo poner en mi macro de Excel para resolver el siguiente problema.
Tengo 52 libros de Excel (en una misma carpeta) en los que me interesan el contenido de unas 10 celdas. Estas celdas están en una misma hoja, en la misma fila y la misma columna en los 52 libros. Las celdas no están contiguas.
Me gustaría copiar/pegar todo eso en un libro final ya creado. Con 52 columnas (1 para cada libro) de 10 filas (una para cada celda).
=> Idea directriz de procedimiento cuestionable y a traducir a VBA
0) Crear mi macro desde mi libro final con los siguientes pasos:
1) Iniciar un bucle en todos los libros del carpeta (especificar la ruta de la carpeta)
Dentro del bucle:
2) Abrir el primer Excel
3) copiar pegar las 10 celdas en una misma columna (vacía) del libro en cuestión en el orden deseado
4) copiar pegar esta columna en su columna de destino en el libro final
5) cerrar el Excel
6) Pasar al siguiente
Tanto la etapa 3 dentro de un mismo archivo la veo cómo hacerlo pero la gestión de pasar de un libro a otro, no tengo nivel...
Entre los Workbooks, workbookS, Activate, Open, For each next, la función Grabar una macro y no conociendo realmente la sintaxis de VBA... ¡estoy luchando!
¡Muchas gracias!
Thomas
7 respuestas
-
Entonces,
- Crea un nuevo libro de Excel
- colócalo, en un módulo, la macro de abajo,
- guárdalo como Recap.xslm (libro de Excel que admite macros)
- Asegúrate de que tu libro Recap.xslm contiene al menos dos hojas llamadas Feuil1 y Feuil2
- pruébalo...
Código :Option Explicit Sub Import() Dim objShell As Object, objFolder As Object Dim Chemin As String, fichier As String Dim Colonne As Byte 'ouverture de la fenêtre de choix du répertoire Set objShell = CreateObject("Shell.Application") Set objFolder = objShell.BrowseForFolder(&H0&, "Choisir un répertoire", &H1&) 'Si l'utilisateur annule sans choisir If objFolder Is Nothing Then 'message MsgBox "Abandon opérateur", vbCritical, "Annulation" Else 'sinon 'Chemin = répertoire choisi Chemin = objFolder.ParentFolder.ParseName(objFolder.Title).Path & "\" 'Choix du 1er fichier fichier = Dir(Chemin & "*.xls*") 'Colonne = n° de colonne ou on va coller les données 'pour commencer colonne A, laisser à 0, pour commencer colonne B remplacer 0 par 1 etc... Colonne = 0 'on boucle sur tous les fichiers excel du répertoire choisi Do While Len(fichier) > 0 Colonne = Colonne + 1 If fichier <> ThisWorkbook.Name Then 'attribue un nom dans le classeur, se référant à la plage à importer : B2:I18 ThisWorkbook.Names.Add "Plage", RefersTo:="='" & Chemin & "[" & fichier & "]fiche site'!$B$2:$I$18" With Sheets("Feuil2") ' "Importe les données" grâce au nom donné ci-dessus .[B2:I18] = "=Plage" .[B3:B10].Copy 'Copie B3:B10 End With With Sheets("Feuil1") .Cells(1, Colonne).PasteSpecial xlPasteValues 'Colle B3:B10 End With With Sheets("Feuil2") .[B16].Copy 'Copie B16 End With With Sheets("Feuil1") .Cells(9, Colonne).PasteSpecial xlPasteValues 'Colle B16 End With With Sheets("Feuil2") .[B18].Copy 'copie B18 End With With Sheets("Feuil1") .Cells(10, Colonne).PasteSpecial xlPasteValues 'Colle B18 End With With Sheets("Feuil2") .[G2].Copy 'Copie G2 End With With Sheets("Feuil1") .Cells(11, Colonne).PasteSpecial xlPasteValues 'Colle G2 End With With Sheets("Feuil2") .[I2].Copy 'Copie I2 End With With Sheets("Feuil1") .Cells(12, Colonne).PasteSpecial xlPasteValues 'Colle I2 End With With Sheets("Feuil2") .[G3].Copy 'Copie G3 End With With Sheets("Feuil1") .Cells(13, Colonne).PasteSpecial xlPasteValues 'Colle G3 End With With Sheets("Feuil2") .[I3].Copy 'Copie I3 End With With Sheets("Feuil1") .Cells(14, Colonne).PasteSpecial xlPasteValues 'Colle I3 End With End If fichier = Dir() Loop End If End Sub
Há otras formas de proceder que podrían, entre otras cosas, acelerar el proceso.
Así que dime si esto te conviene.
--
Cordialement,
Franck P-
Hola, acabo de descubrir qué es una macro, y buscando en la web encontré vuestro ejemplo que busco adaptar pero no entiendo nada de VBA. Lo que deseo hacer es en un archivo de Excel (todo bonito) recuperar los valores de la columna B del archivo 1 y los valores de las columnas A,B,C,D,E,F,G,H,,K,L del archivo 2 y pegarlos en el archivo Excel (todo bonito). Todo lo que he entendido es que habría 2 bucles, uno para cada archivo. Por otra parte, tras copiar/pegar el código en el editor, ¿puedo asegurarme de que lo que está en azul es la condición, en negro la orden y en verde el comentario? Muchas gracias de antemano por vuestra ayuda, eso me evitaría pegar y copiar tediosamente.
-
-