VBA Synthèse de plusieurs classeurs

  • Initiateur de la discussion Initiateur de la discussion C@thy
  • 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 !

C@thy

XLDnaute Barbatruc
Bonjour,

je dispose de 1500 à 5000 classeurs que je dois agréger.

Chaque classeur comporte une seule ligne remplie : la ligne 9

je dois agréger tous mes classeurs dans un classeur unique, les lignes les unes en-dessous des autres (pour ensuite faire un TCD).

j'ai commencé le boulot (fichier Synthèse), mais là je bloque et j'ai besoin de votre aide.

En plus, j'ai simplifié la macro, mes les classeurs à agréger se situent dans tous les sous-répertoires du classeur actif (j'ai fait comme si ils étaient dans le même répertoire).

Un grand MERCI si vous pouvez m'aider.

Bises et bonne soirée

C@thy
 

Pièces jointes

Re : VBA Synthèse de plusieurs classeurs

Re

teste

Code:
       Range("A9:L" & Workbooks(nf).Sheets(1).[A65000].End(xlUp).Row).Copy Workbooks(ClasseurMaitre).Sheets(1).Range("B" & Ligne)

au lieu de

Code:
[A9:L20].Copy Workbooks(ClasseurMaitre).Sheets(1).Range("B" & Ligne)
 
Re : VBA Synthèse de plusieurs classeurs

Bonjour,

Code:
Sub ConsolideSousRepRepActuel()
  Application.ScreenUpdating = False
  [A9:M1000].ClearContents
  répertoire = ThisWorkbook.Path
  ClasseurMaitre = ThisWorkbook.Name
  Set fs = CreateObject("Scripting.FileSystemObject")
  Set dossier = fs.getfolder(répertoire)
  For Each d In dossier.SubFolders
    sousRépertoire = d.Name
    nf = Dir(répertoire & "\" & sousRépertoire & "\*.xls") ' premier fichier
    Do While nf <> ""
       Workbooks.Open Filename:=répertoire & "\" & sousRépertoire & "\" & nf
       [A9:L20].Copy Workbooks(ClasseurMaitre).Sheets(1).[B65000].End(xlUp).Offset(1, 0)
       nlig = [A20].End(xlUp).Row - 8
       Workbooks(ClasseurMaitre).Sheets(1).[A65000].End(xlUp).Offset(1, 0).Resize(nlig).Value = [C5]
       ActiveWorkbook.Close False
       nf = Dir ' fichier suivant
    Loop
   Next
End Sub

JB
 

Pièces jointes

Re : VBA Synthèse de plusieurs classeurs

Un énorme MERCI à vous tous, c'est super sympa de m'apporter votre aide.

J'ai un petit souci : tout ne fonctionne pas comme je veux.

Boisgontier, lorsque j'ai des classeurs remplis jusqu'en ligne 19 ça fonctionne à merveille, mais dès que j'en ai plus ça ne va plus nlig est égal à 0, or, j'ai mis 20 à titre d'exemple mais ça peut aller jusqu'à 400 ou 500 je n'ai pas encore les vrais fichiers remplis.

Comme tu l'as bien compris, le souci ce sont ces 3 lignes en fin de données.
Ils font tout pour m'empoisonner la vie, ces utilisateurs!

Je réfléchis encore à la question, mais on avance dans le bon sens.

Je n'ai pas réussi à remplir mon tableau avec la macro de Kiki29 (du Finistère??? Kenavo!).

J'avance encore un peu et je vous tiens au courant.

Bises et bonne journée ensoleillée à tous

C@thy
 
Re : VBA Synthèse de plusieurs classeurs

Bonjour,

Code:
Sub ConsolideSousRepRepActuel()
  Application.ScreenUpdating = False
  [A9:M1000].ClearContents
  répertoire = ThisWorkbook.Path
  ClasseurMaitre = ThisWorkbook.Name
  Set fs = CreateObject("Scripting.FileSystemObject")
  Set dossier = fs.getfolder(répertoire)
  For Each d In dossier.SubFolders
    sousRépertoire = d.Name
    nf = Dir(répertoire & "\" & sousRépertoire & "\*.xls") ' premier fichier
    Do While nf <> ""
       Workbooks.Open Filename:=répertoire & "\" & sousRépertoire & "\" & nf
       '---
       If [A9] <> "" Then
         nlig = [A8].End(xlDown).Row - 8
         [A9].Resize(nlig, 12).Copy Workbooks(ClasseurMaitre).Sheets(1).[B65000].End(xlUp).Offset(1, 0)
         Workbooks(ClasseurMaitre).Sheets(1).[A65000].End(xlUp).Offset(1, 0).Resize(nlig).Value = [C5]
       End If
       ActiveWorkbook.Close False
       nf = Dir ' fichier suivant
    Loop
   Next
End Sub

JB
 
Re : VBA Synthèse de plusieurs classeurs

MERCIiiiiiiiiiiiiiiiiiiiiiii Boisgontier, c'est parfait

de mon côté j'étais en train de "bidouiller" un truc,
mais... laborieux, tu vas voir...

Code:
Sub ConsolideSousRepRepActuel()
   Application.ScreenUpdating = False
   [A9:L1500].ClearContents
   [A9:L1500].Interior.ColorIndex = xlNone
   repertoire = ThisWorkbook.Path
   ClasseurMaitre = ThisWorkbook.Name
   Racine = ThisWorkbook.Path                  ' Répertoire courant
   Set fs = CreateObject("Scripting.FileSystemObject")
   Set dossier = fs.getfolder(Racine)  'S'il n'y a qu'un niveau de sous-répertoires.
   For Each d In dossier.SubFolders
     sousRépertoire = d.Name
     nf = Dir(repertoire & "\" & sousRépertoire & "\*.xls")    ' premier fichier
     Do While nf <> ""
       Workbooks.Open Filename:=repertoire & "\" & sousRépertoire & "\" & nf
       Ligne = Workbooks(ClasseurMaitre).Sheets(1).[A65000].End(xlUp).Row + 1
       FinLigne = Workbooks(nf).Sheets(1).[B65000].End(xlUp).Row
       nbLigne = FinLigne - 8
Range("A9:L" & FinLigne).Copy Workbooks(ClasseurMaitre).Sheets(1).Range("B" & Ligne)
  [C5].Copy Workbooks(ClasseurMaitre).Sheets(1).Range("A" & Ligne)
ActiveWorkbook.Close False
Ligne2 = Workbooks(ClasseurMaitre).Sheets(1).[B65000].End(xlUp).Row
If Ligne <> Ligne2 Then
Range("A" & Ligne).Select
Selection.AutoFill Destination:=Range("A" & Ligne & ":A" & Ligne2)
End If
      nf = Dir ' fichier suivant
    Loop
   Next
End Sub

Donc ton code est nettement plus mieux bien. 😎

Un grand grand merci à tous les protagonistes de ce fil, vous êtes SUPER!!!

Gros bisous et bonne journée
 
- 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
3
Affichages
896
Retour