Extraction multi classeurs

ShuarS

XLDnaute Occasionnel
Bonjour à tous les XLDnaute :)

Pourriez vous m'aider à construire un bout de code pour réaliser des extractions multi classeurs svp ?

Le dossier "synthese" est directement sous C:\ <C:\synthese>​
Il contient x classeurs Excel enregistrés en .xlsm​
Tous ces classeurs ont tous la même base. Cf fichier "modele" ci joint.​
Tous ces classeurs ont un nom différent. Ex : modele; modele1; modele2; etc.​
Tous ces classeurs contiennent x feuilles avec un nom différent.​

Je voudrais faire un code pour : Cf fichier "consolide" ci joint.

Créer un nouveau classeur en .xlsx sous <C:\temp>​
Le nommer "consolide"​
Ecrire en colonne A tous les noms des différents fichiers xlsm contenus dans le dossier systhese.​
Ecrire en colonne B le nom de la feuille appelée pour le classeur. Ex : 2019 Sem 50​
Ecrire en colonne C la somme de toutes les valeurs. Ex : D2:Q10​

L'idée est de lancer chaque semaine la macro pour capter toutes les infos de la semaine précédente.
Donc les deux variables sont le nom de la feuille suivant le numéro de semaine et la zone de sélection.
Pour cette dernière il est possible de sélectionner D3:Q3 puis de descendre jusqu'en bas avec un Selection.End(xlToDown) peut être.

Je m'embrouille dans les boucles et mes connaissances limitées en VBA ne me permettent pas de réaliser tout ça.
Un peu d'aide serait le bienvenu :)

Merci à vous,
Shu
 

Pièces jointes

  • consolide.xlsx
    8.5 KB · Affichages: 9
  • modele.xlsm
    10.5 KB · Affichages: 9

xUpsilon

XLDnaute Accro
Bonjour,

Pour faciliter l'exploitation d'une boucle, il serait pratique que modele s'appelle "modele0".
Sinon comment savoir quelle semaine prendre ? Y a t'il écrit quelque part la semaine dans laquelle nous sommes ?

Je commence un truc en attendant tes réponses.

Bonne continuation
 

ShuarS

XLDnaute Occasionnel
Salut @xUpsilon et merci pour ton aide :)

Tous les fichiers .xlsm contenus dans le dossier systhese ont un nom différent.
Pour être plus précis, chaque classeur porte le nom d'une personne.
On parle d'une centaine de personne donc une centaine de classeurs Excel.

Pour savoir quelle semaine prendre je pensais faire un plus simple.
Chaque feuille porte le nom de la semaine et l'année. Ex : 2019 Sem 50 ; 2019 Sem 51 ; 2019 Sem 52 ; 2020 Sem 01; etc.
On pourrait donc appeler "2019 Sem 50" directement dans le code. Je le modifierais par 2019 Sem 51 la semaine suivant avant de relancer la macro… Pas très propre mais rapide :p
 

xUpsilon

XLDnaute Accro
Re,

Ca va prendre un temps infini je pense hein avec une centaine de classeurs.
Bref voir ci-joint un exemple : dans le code Chemin est le nom du chemin pour accéder au dossier (moi mon dossier c'était a stocké dans Documents stocké dans D:. Il faut que tu le remplaces par ton dossier (C:\synthese\) si je ne m'abuse.

Il faut également qu'il n'y aie que "consolider" d'ouvert, pour ne pas que la référence Workbooks(2) soit foirée.
Dis moi ce que tu en penses/les erreurs que tu rencontres.

Bonne continuation
 

Pièces jointes

  • consolide.xlsm
    19.6 KB · Affichages: 5

ShuarS

XLDnaute Occasionnel
Merci merci :)
J'ai adapté le fichier mais je n'obtiens rien étrangement.
La valeur "Somme" était non définie. J'ai donc rajouté : Somme As Single.

Mais là je n'ai aucune erreur ni aucun résultat.

J'ai raté quelque chose ?

Edit : Ok désolé j'avais oublié un antislash à la fin du chemin...
Maintenant j'obtiens une erreur lors de la première ouverture du premier fichier.
Erreur d'exécution '1004' sur la ligne "Workbooks.Open (Fichier)"

Il voit bien le nom du fichier mais refuse ou plante pour l'ouvrir apparemment.
Une idée ?
 
Dernière édition:

ShuarS

XLDnaute Occasionnel
@xUpsilon , je n'arrive pas à corriger cette erreur :(
J'ai créer des fichiers "simples" pour faire des essais mais je bloque toujours sur l'ouverture du premier fichier.
Pour info je n'utilise pas le bouton 1 qui ne semble être rattaché à rien.
Je lance la macro directement dans VB.

1576516364810.png


Mon chemin d'accès est correct car il retrouve bien le nom du premier fichier. Mais refuse de l'ouvrir.

Une idée please ???
 

xUpsilon

XLDnaute Accro
Re,

Très étonnant le fait qu'il te remonte le nom d'un fichier exemple stocké sur mon ordi perso. Sinon pour réinitialiser une mémoire éventuelle tu pourrais supprimer la ligne, enregistrer et fermer ton fichier, puis le rouvrir et réinsérer la ligne et voir si ça fonctionne.

Bonne continuation
 

xUpsilon

XLDnaute Accro
Re,

Tu as un fichier s'appelant "Classeur 1 - Copie (2).xlsm" dans ton dossier test ?
Sinon, l'erreur pourrait venir du fait que les fichiers ouverts ne contiennent pas de feuille nommée suivant le terme que tu entres en début de macro.

Dis m'en plus
 

ShuarS

XLDnaute Occasionnel
Oui.

1576570811567.png


Code:
Sub BoucleFichiers()
    Dim Chemin As String, Fichier As String, i As Integer, Semaine As String, Somme As Single
    
    i = 1
    Semaine = InputBox("Quel est le mois de l'année ? (format aaaa Sem ss)")
    'Définit le répertoire contenant les fichiers
    Chemin = "C:\test\a\"
 
    'Boucle sur tous les fichiers xls du répertoire.
    Fichier = Dir(Chemin & "*.xlsm")
    'Utilisez la syntaxe suivante pour boucler sur tous les types de fichiers :
    'Fichier = Dir(Chemin & "*.*")
 
    Do While Len(Fichier) > 0
        'écrit le résultat dans la fenêtre d'exécution (Ctrl+G).
        Workbooks.Open (Fichier)
        Workbooks("consolide.xlsm").Worksheets(1).Range("A" & i) = Fichier
        Workbooks("consolide.xlsm").Worksheets(1).Range("B" & i) = Semaine
        Somme = WorksheetFunction.Sum(Workbooks(2).Worksheets(Semaine).Range("D3:H100"))
        Workbooks("consolide.xlsm").Worksheets(1).Range("C" & i) = Somme
        Workbooks(2).Close
        i = i + 1
        Debug.Print Chemin & Fichier
        Fichier = Dir()
    Loop
End Sub

1576571093135.png


Débogage :

1576571118126.png


Je ne comprends pas...
 

ShuarS

XLDnaute Occasionnel
Arf je suis vraiment pas bon :p
En effet il arrive à l'ouvrir maintenant, merci :)

Par contre il plante sur la ligne somme. Il s'arrête là, ne fait pas la somme.
VB:
Somme = WorksheetFunction.Sum(Workbooks(2).Worksheets(Semaine).Range("D3:H100"))

1576574328394.png


Je n'ai que le classeur "consolide" ouvert.
 
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
311 725
Messages
2 081 940
Membres
101 845
dernier inscrit
annesof