Bonjour,
J'ai réaliser une macro qui boucle sur tous les fichiers xlsx d'un répertoire et copie-colle dans un autre fichier toutes les données.
La macro fonctionne sans problème, mais pour ma culture, je me demandais quel paramètre défini l'ordre de la boucle, par nom du fichiers? date de création? date de dernière modifications? après test il semblerais que ce ne soit aucun de ces paramètres. En effet j'ai testé avec trois fichiers test t1.xlsx t2.xlsx et t3.xlsx, crée dans cette ordre et j'obtenais bien 1-2-3, j'ai alors fait une modif sur le 1, j'obtient 2-1-3 puis j'en ai crée deux autres j'obtient maintenant 4-2-1-3-5, bref je ne comprends pas ce qui détermine l'ordre, est-ce aléatoire? j'ai l'impression que non puis qu'en relancer la macro sans faire de modif rien ne bouge.
Quelqu'un a-t-il la réponse?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39 Sub test() Dim Fso As Object, MonRepertoire As String Dim f1 As Object, f2 As Object, wb As Workbook Dim dl As Long, wbdl As Long, wbdc As Long Set Fso = CreateObject("Scripting.FileSystemObject") MonRepertoire = ThisWorkbook.Sheets("to do").Range("chemin") 'supression si demandé des données de la feuille data If ThisWorkbook.Sheets("to do").Range("supr") = "Oui" Then ThisWorkbook.Sheets("data").Cells.ClearContents 'boucle sur les fichiers For Each f1 In Fso.GetFolder(MonRepertoire).Files If f1.Name Like "*.xlsx" Then Set wb = Workbooks.Open(f1) dl = ThisWorkbook.Sheets("data").Range("A" & Rows.Count).End(xlUp).Row If dl = 1 Then wb.Sheets(1).Cells(1, 1).CurrentRegion.Copy ThisWorkbook.Sheets("data").Cells(dl, 1).PasteSpecial xlValues Application.CutCopyMode = False wb.Close Else If ThisWorkbook.Sheets("to do").Range("entete") = "Non" Then wb.Sheets(1).Cells(1, 1).CurrentRegion.Copy ThisWorkbook.Sheets("data").Cells(dl + 1, 1).PasteSpecial xlValues Application.CutCopyMode = False wb.Close Else wbdl = Range("A" & Rows.Count).End(xlUp).Row wbdc = Cells(1, Columns.Count).End(xlToLeft).Column Range(Cells(2, 1), Cells(wbdl, wbdc)).Copy ThisWorkbook.Sheets("data").Cells(dl + 1, 1).PasteSpecial xlValues Application.CutCopyMode = False wb.Close End If End If End If Next f1 End Sub
Partager