Consolidation de classeur

Résolu/Fermé
Lovamavi - 10 janv. 2013 à 22:25
eriiic Messages postés 24603 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 15 décembre 2024 - 13 janv. 2013 à 18:48
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

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 ?
1
eriiic Messages postés 24603 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 15 décembre 2024 7 249
Modifié par eriiic le 12/01/2013 à 20:04
Ah ben oui, pour écrire dessus c'est impératif qu'elles ne le soient pas.
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
0
Raymond PENTIER Messages postés 58800 Date d'inscription lundi 13 août 2007 Statut Contributeur Dernière intervention 7 janvier 2025 17 264
11 janv. 2013 à 04:19
Je ne vois vraiment pas l'utilité de passer par VBA pour un calcul aussi simple !
0
Bonjour a vous aussi ...
Bien entendu, les formules fonctionnent mais le nom des fichiers excel vont changer et il faudra à ça moment la changer les formules ... Voilà le pourquoi de la VBA.
0
Raymond PENTIER Messages postés 58800 Date d'inscription lundi 13 août 2007 Statut Contributeur Dernière intervention 7 janvier 2025 17 264
12 janv. 2013 à 04:38
Alors ça, c'est une information qui nous manquait ...
0
eriiic Messages postés 24603 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 15 décembre 2024 7 249
12 janv. 2013 à 06:56
Bonjour,

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
0
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
0

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
0
eriiic Messages postés 24603 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 15 décembre 2024 7 249
13 janv. 2013 à 16:56
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
0
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 ?
0
eriiic Messages postés 24603 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 15 décembre 2024 7 249
Modifié par eriiic le 13/01/2013 à 18:13
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 ?
0
Cela peut-il une nouvelle fois venir de la protection de la feuille ?
0
eriiic Messages postés 24603 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 15 décembre 2024 7 249
13 janv. 2013 à 18:17
normalement non, ça n'empêche pas l'appel.
Mais tu n'as pas renommé le Sub Synthese() autrement sur ton fichier et il est bien dans un module standard ?
0
Bien joué Eric,

J'avais effectivement renommer Synthèse, tout fonctionne parfaitement ...
Merci beaucoup pour le temps que tu m'as consacré

Au plaisir de recroiser ta route
0
eriiic Messages postés 24603 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 15 décembre 2024 7 249
13 janv. 2013 à 18:48
Bonne continuation :-)
eric
0