Macro VBA_ boucle pour macro "copier-coller"_NEXT FOR
Bonjour à tous,
Je viens de débuter dans les macros VBA et je cherche à automatiser un copier-coller pour constituer un tableau récap dans lequel pourraient naviguer facilement mes collègues.
Je cherche à créer une macro qui effectuera la tache suivante:
A partir d'un dossier qui regroupera plusieurs fichiers nommés "MissMond1.xls", "MissMond2", 3 (etc...), il faudrait que ma macro recopie la ligne 2 (ou la plage "A2 : D2") de l'onglet "feuil2" de chacun des fichiers "MissMond" du répertoire et qu'il les aligne dans l'onglet "feuil1" d'un fichier "recap"
La ligne2 de l'onglet feuil2 du fichier MissMond1 devra se retrouver dans l'onglet 1 du fichier Récap, en ligne 2
La ligne2 de l'onglet feuil2 du fichier MissMond2 devra se retrouver dans l'onglet 1 du fichier Récap, en ligne 3
La ligne2 de l'onglet feuil2 du fichier MissMond3 devra se retrouver dans l'onglet 1 du fichier Récap ,en ligne 4
La ligne2 de l'onglet feuil2 du fichier MissMond4 devra se retrouver dans l'onglet 1 du fichier Récap, en ligne 5
et ainsi de suite...
J'ai réussi à obtenir le résultat que je voulais avec la macro ci-dessous, mais le seul pbme, c'est qu'elle ne copie qu'une seule ligne (celle du premier fichier)!!
Il faut sûrement que j'utilise une boucle mais je n'arrive pas à savoir laquelle..."FOR"? "NEXT FOR"?
Voilà ma macro:
Sub Test1()
Dim Wb As Workbook
Workbooks.Open "C:\Macro_test\DdeMissMond1.xls"
Workbooks("DdeMissMond1.xls").Activate
Worksheets("feuil2").Activate
ActiveWindow.WindowState = xlNormal
Range("A2:D2").Select
Selection.Copy
Windows("Recap.xlsm").Activate
Range("A2").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Workbooks("DdeMissMond1.xls").Close
End SubPouvez-vous me dire ce que vous en pensez et me donner des pistes pour avancer rapidement svp?
Dsl du derangement...j'espère que vous pourrez m'aider, je devrais avoir abouti d'ici mercredi... :/
(j'ai une réunion jeudi)
Bien cdlt
Bonsoir
Il faudrait savoir où le fichier Recap se trouve. Sinon sans avoir testé un exemple à essayer
Sub test1()
Dim Chemin As String
Dim rep As String
Dim nbfichier As byte
Chemin = "C:\Macro_test" 'a adapter
rep = Dir(Chemin & "*.xls")
nbfichier = 1
fichier = "DdeMissmond" & nbfichier & ".xls"
While Not rep = ""
Workbooks.Open Chemin & fichier
Activeworbook.Sheets("feuil2").Range("A2:D2").Copy
Thisworbook.Sheets("feuil1").Range("A2").PasteSpecial Paste:=xlPasteValues
Workbooks(fichier).Close
nbfichier = nbfichier + 1
rep = Dir
Wend
End SubCordialement
Bonsoir Dan,
Le fichier récap se trouvait au même endroit que les fichiers source "MissMond" mais...j'avais envisagé de déplacer "récap" dans un autre dossier.
J'ai essayé 2 méthodes:
- lancer ta macro en déplaçant mon fichier "Recap" sur le bureau
- lancer ta macro en laissant le fichier "Recap"en le laissant dans le dossier "C:\Macro_test".
Mais désolée, sauf ton respect, le résultat a été un "bide" total, pour Excel... Excel ne me fait aucun message d'erreur, excel ne réagit pas...il ne se passe strictement rien. Electro-encéphalogramme plat, quoi!!
Même l'action que j'avais réussi à programmer (ouverture du fichier MissMond1 et inscription de la ligne contenue dans ce fichier dans le fichier "recap", puis fermeture du fichier MissMond1) ne se produit pas...!
J'avoue que je ne m'attendais pas à cette absence de réaction d'Excel...J'aimerais savoir ce qui m'a manqué pour empêcher que la macro se lance...(aurais-je fait une fausse manip dans mon recopie de macro...)
Sinon, j'ai trouvé une solution qui marche parfaitement, avec l'aide d'un autre bienfaiteur (mais sans l'usage de la boucle "NEXT FOR"). Je la partage ci-dessous!
Sub Test1()
Const chemin$ = "C:\Macro_test\"
Dim fichier As String
Dim rng As Range
Set rng = ThisWorkbook.Worksheets(1).Range("A2:D2")
rng.Resize(1000).ClearContents 'Adapter au nombre max de fichiers
fichier = Dir(chemin & "DdeMissMond*.xls")
Application.ScreenUpdating = False
Do While Len(fichier) > 0
With Workbooks.Open(chemin & fichier)
rng.Value = .Worksheets("Feuil2").Range("A2:D2").Value
Set rng = rng.Offset(1)
.Close
fichier = Dir
End With
Loop
Application.ScreenUpdating = True
End SubCette formule marche parfaitement (en laissant le fichier recap dans le même dossier que les fichiers missmond, c'est-à-dire le dossier "C:\Macro_test\")!!