XL 2013 Modification d'un code VBA pour fusionner des classeurs

  • Initiateur de la discussion Initiateur de la discussion sr94
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

sr94

XLDnaute Occasionnel
Bonjour

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)
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.

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:
Re : Modification d'un code VBA pour fusionner des classeurs

Bonjour,
pour tes filtres, je pense qu'il suffit de s'inspirer du code que tu utilisais précédemment et reprendre cette ligne
if .FilterMode Then .ShowAllData

ce qui te donnerait quelque chose comme ca: ?? pas testé

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
   if nf.FilterMode Then nf.ShowAllData
    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

pour l'erreur...??
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
2
Affichages
405
Réponses
12
Affichages
909
  • Question Question
Microsoft 365 Question code VBA
Réponses
2
Affichages
387
Réponses
6
Affichages
603
Réponses
1
Affichages
445
Retour