Bonjour
J'ai récupéré sur un site la macro suivante :
J'ai plusieurs classeurs placés dans le répertoire "BD" , il n'y a qu'une seule feuille par classeur, toujours de structure identique, et je souhaiterais les compiler sur une seule feuille d'un classeur.
Comment puis je rajouter juste le code pour que les feuilles qui ont des données filtrées ne soient plus filtrées ?
Par ailleurs j'ai une erreur 1004 (erreur définie par l'application ou par l'objet) sur la ligne
mais cette ligne n'a pas l'air indispensable
Avant j'utilisais le code suivant, mais il est trop lourd (une demi heure pour 30 classeurs et au total 7000 lignes), le code ci-dessus fait la même chose en quelques secondes mais sans retirer le filtre.
Merci beaucoup
J'ai récupéré sur un site la macro suivante :
Code:
Sub syntèseClasseursBD2()
sousRépertoire = "BD"
[A2].CurrentRegion.Offset(1, 0).Clear
Set maitre = ActiveWorkbook
Repertoire = ThisWorkbook.Path
nf = Dir(Repertoire & "\" & sousRépertoire & "\*.xls") ' premier fichier
Do While nf <> ""
Workbooks.Open Filename:=Repertoire & "\" & sousRépertoire & "\" & nf
n = [A1].CurrentRegion.Rows.Count - 1
[A1].CurrentRegion.Offset(1, 0).Copy _
maitre.Sheets(1).[A65000].End(xlUp).Offset(1, 0)
ActiveWorkbook.Close False
'-- nom onglet
[A1].End(xlDown).End(xlToRight).Offset(-n + 1, 1).Resize(n, 1) = Left(nf, Len(nf) - 4)
nf = Dir ' fichier suivant
Loop
End Sub
J'ai plusieurs classeurs placés dans le répertoire "BD" , il n'y a qu'une seule feuille par classeur, toujours de structure identique, et je souhaiterais les compiler sur une seule feuille d'un classeur.
Comment puis je rajouter juste le code pour que les feuilles qui ont des données filtrées ne soient plus filtrées ?
Par ailleurs j'ai une erreur 1004 (erreur définie par l'application ou par l'objet) sur la ligne
Code:
[A1].End(xlDown).End(xlToRight).Offset(-n + 1, 1).Resize(n, 1) = Left(nf, Len(nf) - 4)
Avant j'utilisais le code suivant, mais il est trop lourd (une demi heure pour 30 classeurs et au total 7000 lignes), le code ci-dessus fait la même chose en quelques secondes mais sans retirer le filtre.
Code:
Option Explicit
Sub Compilation()
Dim fileName As String
Dim wb As Workbook
ThisWorkbook.Worksheets(1).Range("A3:AF" & ThisWorkbook.Worksheets(1).Range("A3").CurrentRegion.Rows.Count).EntireRow.Delete
fileName = Dir(ActiveWorkbook.Path & "\*.xls*")
Application.ScreenUpdating = False
Do While fileName <> ""
If fileName <> ThisWorkbook.Name Then
Set wb = Workbooks.Open(ActiveWorkbook.Path & "\" & fileName)
With wb.Worksheets(1)
If .FilterMode Then .ShowAllData
End With
wb.Worksheets(1).Range("A2:AF" & wb.Worksheets(1).Range("D2").CurrentRegion.Rows.Count).Copy
ThisWorkbook.Worksheets(1).Activate
Range("A" & Worksheets(1).Range("A2").CurrentRegion.Rows.Count + 1).Select
ActiveSheet.Paste
wb.Close False
End If
fileName = Dir
Loop
Set wb = Nothing
Application.ScreenUpdating = True
End Sub
Merci beaucoup
Dernière édition: