Excel VBA - Ajustement d'une macro
O
Bonjour, la macro ci-dessous sert à regrouper les données des différents fichier Excel comportant une feuille "Donnée", dans la feuille "Tableau".
Cependant, j'ai un problème. En effet, à chaque fois qu'une donnée est prise en compte, elle remplit une ligne et renvoie à la ligne suivante pour la prochaine donnée. Mais lorsque la macro change de fichier, elle recommence à inscrire les données à partir de la deuxième ligne parce qu'elle redémarre avec L = 2.
Ce qui fait que cette macro fonctionne pour le moment avec un fichier "Donnée" mais j'aimerais qu'elle fonctionne avec plusieurs.
Sub Macro1()
'
' Macro1 Macro
'
' Touche de raccourci du clavier: Ctrl+a
'
Dim CD As Workbook 'Variable CD (Classeur Destination)
Dim CA As String 'Variable CA (Chemin d'Accès)
Dim FD As Worksheet 'Variable FD (Feuille Destination)
Dim F As String 'Variable F (Fichier)
Dim CS As Workbook 'Variable CS (Classeur Source)
Dim FS As Worksheet 'Variable FS (Feuille Source)
Dim I As Byte 'Variable I (Lignes)
Dim J As Byte 'Variable J (Colonnes)
Dim DL As Byte 'Variable DL (Dernière Ligne)
Dim L As Integer 'Variable L (Lignes)
Application.ScreenUpdating = False 'Masque les rafraîchissements d'écran
Set CD = ThisWorkbook 'Définit le Classeur Destination
CA = ThisWorkbook.Path & "\" 'Définit le Chemin d'Accès
Set FD = CD.Worksheets("Tableau") 'Définit la Feuille Destination
F = Dir(CA & "*.xls*") 'Premier Fichier du dossier
Do While F <> "" 'Exécute tant qu'il existe des Fichiers
If F <> CD.Name Then 'Condition : si le Fichier n'est pas le Classeur Destination ou le Fichier TrésorerieMantesVerte
Set CS = Workbooks.Open(CA & F) 'Définit le Classeur Source
Set FS = CS.Worksheets("Donnée") 'Définit la Feuille Source
DL = FS.Range("C" & Rows.Count).End(xlUp).Row
L = 2
For J = 5 To 11
For I = 3 To DL
If FS.Cells(I, J) <> 0 Then
FD.Cells(L, 1) = FS.Cells(2, J)
FD.Cells(L, 2) = FS.Cells(I, 3)
FD.Cells(L, 3) = FS.Cells(I, J)
L = L + 1
End If
Next I
Next J
CS.Close False 'Ferme le Classeur Source sans enregistrer
End If 'Fin de la condition
F = Dir 'Fichier suivant
Loop 'Boucle
Application.ScreenUpdating = True 'Affiche les rafraîchissements d'écran
End Sub
' Macro1 Macro
'
' Touche de raccourci du clavier: Ctrl+a
'
Dim CD As Workbook 'Variable CD (Classeur Destination)
Dim CA As String 'Variable CA (Chemin d'Accès)
Dim FD As Worksheet 'Variable FD (Feuille Destination)
Dim F As String 'Variable F (Fichier)
Dim CS As Workbook 'Variable CS (Classeur Source)
Dim FS As Worksheet 'Variable FS (Feuille Source)
Dim I As Byte 'Variable I (Lignes)
Dim J As Byte 'Variable J (Colonnes)
Dim DL As Byte 'Variable DL (Dernière Ligne)
Dim L As Integer 'Variable L (Lignes)
Application.ScreenUpdating = False 'Masque les rafraîchissements d'écran
Set CD = ThisWorkbook 'Définit le Classeur Destination
CA = ThisWorkbook.Path & "\" 'Définit le Chemin d'Accès
Set FD = CD.Worksheets("Tableau") 'Définit la Feuille Destination
F = Dir(CA & "*.xls*") 'Premier Fichier du dossier
Do While F <> "" 'Exécute tant qu'il existe des Fichiers
If F <> CD.Name Then 'Condition : si le Fichier n'est pas le Classeur Destination ou le Fichier TrésorerieMantesVerte
Set CS = Workbooks.Open(CA & F) 'Définit le Classeur Source
Set FS = CS.Worksheets("Donnée") 'Définit la Feuille Source
DL = FS.Range("C" & Rows.Count).End(xlUp).Row
L = 2
For J = 5 To 11
For I = 3 To DL
If FS.Cells(I, J) <> 0 Then
FD.Cells(L, 1) = FS.Cells(2, J)
FD.Cells(L, 2) = FS.Cells(I, 3)
FD.Cells(L, 3) = FS.Cells(I, J)
L = L + 1
End If
Next I
Next J
CS.Close False 'Ferme le Classeur Source sans enregistrer
End If 'Fin de la condition
F = Dir 'Fichier suivant
Loop 'Boucle
Application.ScreenUpdating = True 'Affiche les rafraîchissements d'écran
End Sub
Bonjour,
déplace le
L = 2avant
Do While F <> ""