Consolidation de classeur
Résolu
Lovamavi
-
eriiic Messages postés 24603 Date d'inscription Statut Contributeur Dernière intervention -
eriiic Messages postés 24603 Date d'inscription Statut Contributeur Dernière intervention -
Bonjour à tous et avant toutes choses bonne année.
Voilà je suis novice en vba et je n'arrive pas à trouver et à adapter un code source me permettant de répondre à mes attentes qui sont les suivantes :
J'ai un répertoire qui comporte plusieurs classeur (Agent1.xls, Agent2.xls, ...) avec pour chacun un onglet par mois (JANVIER, FEVRIER, ...) ayant tous la même structure (même position de cellule)
J'ai créé un classeur SYNTHESE.xls ayant la même structure que les fichiers agents et j'aimerai récupérer par VBA dans chacune des cellules de ce fichier la somme des données de chaque cellule des différents classeurs du répertoire (cellule E12 de Agent1.xls + cellule E12 de Agent3.xls + cellule E12 de Agent3.xls, ...)
J'espère avoir été assez clair pour bénéficier de votre génie dans le domaine de la vba
Lovamavi
Voilà je suis novice en vba et je n'arrive pas à trouver et à adapter un code source me permettant de répondre à mes attentes qui sont les suivantes :
J'ai un répertoire qui comporte plusieurs classeur (Agent1.xls, Agent2.xls, ...) avec pour chacun un onglet par mois (JANVIER, FEVRIER, ...) ayant tous la même structure (même position de cellule)
J'ai créé un classeur SYNTHESE.xls ayant la même structure que les fichiers agents et j'aimerai récupérer par VBA dans chacune des cellules de ce fichier la somme des données de chaque cellule des différents classeurs du répertoire (cellule E12 de Agent1.xls + cellule E12 de Agent3.xls + cellule E12 de Agent3.xls, ...)
J'espère avoir été assez clair pour bénéficier de votre génie dans le domaine de la vba
Lovamavi
A voir également:
- Consolidation de classeur
- Imprimer un classeur excel sur mac - Guide
- Classeur numérique gratuit - Télécharger - Bureautique
- Excel ne parvient pas à insérer les feuilles dans le classeur de destination ✓ - Forum Excel
- Copier une feuille excel dans un autre classeur avec liaison ✓ - Forum Excel
- Étiquette classeur a imprimer gratuit excel ✓ - Forum Bureautique
8 réponses
Merci ERIIC pour ta réponse.
J'ai testé le code, mais cela bloque à la ligne "shDest.Range(plageRecup).ClearContents" !
Cela peut-il venir du fait que les feuilles sont protégées ?
J'ai testé le code, mais cela bloque à la ligne "shDest.Range(plageRecup).ClearContents" !
Cela peut-il venir du fait que les feuilles sont protégées ?
Bonjour,
une proposition :
https://www.cjoint.com/c/CAmg00n6DJn
à tester... tous les fichiers y compris Synthèse.xls doivent être dans le même répertoire
La plage à additionner est fixe (B2:C3 ici, à adapter).
Peut-être faudrait-il la rendre dynamique selon la feuille mais je manque d'éléments.
eric
une proposition :
Sub Synthese() ' adapter la plage à sommer sur tous les fichiers Const plageRecup As String = "B2:C3" ' Dim chemin As String, Fichier As String Dim wb As Workbook, shDest As Worksheet, shSource As Worksheet Dim c As Range Set wb = ThisWorkbook chemin = wb.Path + "\" Application.ScreenUpdating = False ' nettoyage For Each shDest In wb.Worksheets ' pour chaque feuille shDest.Range(plageRecup).ClearContents Next shDest ' ' pour chaque fichier Fichier = Dir(chemin & "*.xl*") ' 1er fichier Do While (Len(Fichier) > 0) If Fichier <> ThisWorkbook.Name Then Workbooks.Open chemin & Fichier ' traitement For Each shDest In wb.Worksheets ' pour chaque feuille Set shSource = Worksheets(shDest.Name) For Each c In shDest.Range(plageRecup) c = c + shSource.Range(c.Address) Next c Next shDest ActiveWorkbook.Close End If Fichier = Dir() ' fichier suivant Loop Application.ScreenUpdating = True End Sub
https://www.cjoint.com/c/CAmg00n6DJn
à tester... tous les fichiers y compris Synthèse.xls doivent être dans le même répertoire
La plage à additionner est fixe (B2:C3 ici, à adapter).
Peut-être faudrait-il la rendre dynamique selon la feuille mais je manque d'éléments.
eric
Bonjour Eric,
Je viens de ré-adapter le code avec tes conseils et cela fonctionne à merveille.
Je te remercie pour ton aide qui me permet de progresser un peu plus ... Toutefois je ne doute pas un instant avoir encore de tes compétences lors de mes futurs développement d'outil
Merci
Laurent
Je viens de ré-adapter le code avec tes conseils et cela fonctionne à merveille.
Je te remercie pour ton aide qui me permet de progresser un peu plus ... Toutefois je ne doute pas un instant avoir encore de tes compétences lors de mes futurs développement d'outil
Merci
Laurent
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Je viens de faire tourner la macro qui fonctionne parfaitement, je voudrais abuser encore un peu de tes conseils car compte tenu que ladite macro risque de durer tres longtemps (15 fichiers ayant 12 oglets !), je pense que je vais mettre un bouton sur chaque feuille du fichier synthèse =afin que la mise à jour soit faite uniquement mois par mois (ex : je clique sur le bouton janvier et la macro va chercher les données des feuilles "janvier" des différents fichiers.
Peux-tu me dire ce que je dois changer dans ton code pour réussir cela ?
NB : De plus peux-tu m'indiquer comment on met un fil en "RESOLU" sur ce forum ?
Merci d'avance
Peux-tu me dire ce que je dois changer dans ton code pour réussir cela ?
NB : De plus peux-tu m'indiquer comment on met un fil en "RESOLU" sur ce forum ?
Merci d'avance
Bonjour,
J'ai modifié le code. Un double-clic sur A1 lance la mise à jour de la feuille active.
Il y a une procédure en plus dans ThisWorkbook.
https://www.cjoint.com/c/CAnq2oOV4px
Pour mettre en résolu c'est en haut vers ton titre.
eric
J'ai modifié le code. Un double-clic sur A1 lance la mise à jour de la feuille active.
Il y a une procédure en plus dans ThisWorkbook.
https://www.cjoint.com/c/CAnq2oOV4px
Pour mettre en résolu c'est en haut vers ton titre.
eric
Je viens de lancer la macro et ca bloque sur SheetBeforeDoubleClick notamment sur Target. Le message me dit que" la fonction n'est pas définie".
Avec un bouton cela fonctionne donc pas de problème :) mais au titre de ma montée en compétence, pourquoi cela bloque t-il ?
Avec un bouton cela fonctionne donc pas de problème :) mais au titre de ma montée en compétence, pourquoi cela bloque t-il ?
Bizarre...
J'ai fait sur excel 2003 et je viens de tester sur 2010, pas de pb.
Peut-être as-tu une autre macro qui bloque les évènements et ne les restaure pas ?
Sinon essaie avec :
Then Call Synthese
ou au pire avec :
Then Call Module1.Synthese mais ça serait bien la 1ère fois que j'utiliserais cette syntaxe.
eric
PS: tu n'as pas renommé le Sub Synthese() autrement sur ton fichier ?
J'ai fait sur excel 2003 et je viens de tester sur 2010, pas de pb.
Peut-être as-tu une autre macro qui bloque les évènements et ne les restaure pas ?
Sinon essaie avec :
Then Call Synthese
ou au pire avec :
Then Call Module1.Synthese mais ça serait bien la 1ère fois que j'utiliserais cette syntaxe.
eric
PS: tu n'as pas renommé le Sub Synthese() autrement sur ton fichier ?
Je supprime tout le contenu de la plage indiquée avant de faire les sommes.
Ajouter ces lignes avant et après traitement de chaque feuille :
shDest.Unprotect Password:="pw"
shDest.Protect Password:="pw"
eric