Regrouper les données de plusieurs classeurs en un seul

EGAL68 Messages postés 6 Statut Membre -  
ThauTheme Messages postés 1564 Statut Membre -
Bonjour,
Je travaille sur excel 2007. J'ai vu quelques post proches de ma question, mais je n'arrive pas à faire fonctionner le code.
Je dispose de plusieurs classeurs avec un seul onglet comportant 2 colonnes :
- colonne 1 avec le nom du champ (identique à chaque classeur)
- colonne 2 avec les informations recherchées (différentes pour chaque classeur)

Je souhaite récupérer les informations de la 2ème colonne de chacun de ces classeurs dans un classeur de synthèse avec :
- colonne 1 : avec le nom du champ (identique à chaque classeur)
- colonne 2 : les infos de la colonne 2 du classeur 1
- colonne 3 : les infos de la colonne 2 du classeur 2
etc....
J'imagine que je dois stocker mes classeurs sources, dans un même répertoire
Quel code puis je utiliser ?
D'avance merci pour vos réponses

5 réponses

  1. ThauTheme Messages postés 1564 Statut Membre 160
     
    Bonjour Egal, bonjour le forum,

    Peut-être comme ça (à mettre dans le classeur de synthèse) :

    Sub Macro1()
    Dim CD As Workbook 'déclare la variable CD (Classeur Destination)
    Dim OD As Worksheet 'déclare la variable OD (Onglet Destination)
    Dim CH As String 'déclare la variable CH (CHemin d'accès)
    Dim SF As Object 'déclare la variable SF (Système de Fichiers)
    Dim D As Object 'déclare la variable D (Dossier)
    Dim EF As Object 'déclare la variable EF (Ensemble de Fichiers)
    Dim F As Object 'déclare la variable F (Fichier)
    Dim CS As Workbook 'déclare la variable CS (Classeur Source)
    Dim OS As Worksheet 'déclare la variable OS (Onglet Source)
    Dim DEST As Range 'déclare la variable DEST (cellule de DESTination)
    
    Application.ScreenUpdating = False 'masque les rafraîchissements d'écran
    Set CD = ThisWorkbook 'définit le classeur CD
    CH = CD.Path & "\" 'définit le chemin d'accès CH
    Set OD = CD.Sheets(1) 'définit l'onglet destination OD
    Set SF = CreateObject("Scripting.FileSystemObject") 'définit le système de fichiers SF
    Set D = SF.GetFolder(CH) 'définit le dossier D
    Set EF = D.Files 'définit l'ensemble des fichiers EF
    For Each F In EF 'boucle sur tous les fichier F de l'ensemble des fichiers EF
        If F.Name <> CD.Name And Left(Split(F.Name, ".")(1), 3) = "xls" Then 'condition si le fichier n'est pas celui-ci et si son extension commence par "xls"
            Workbooks.Open F 'ouvre le fichier
            Set CS = ActiveWorkbook 'définit le classeur source CS
            Set OS = CS.Sheets(1) 'définit l'onglet source OS
            Set DEST = OD.Cells(1, Application.Columns.Count).End(xlToLeft).Offset(0, 1) 'définit la cellule de destination DEST
            OS.Columns(2).Copy DEST 'copie la colonne 2 de l'onglet source et la colle dans DEST
            CS.Close False 'ferme le classeur source sans enregistrer
        End If 'fin de la condition
    Next F 'prochian fichier de la boucle
    Application.ScreenUpdating = True 'affiche les rafraîchissements d'écran
    End Sub


    À plus,
    ThauTheme
    1
  2. EGAL68 Messages postés 6 Statut Membre
     
    Merci pour cette réponse. Je n arrive pas à faire fonctionner la macro.
    tu écris CH= CD.Path&"/". Je ne comprends pas cette ligne. Dois je la modifier pour dire ou sont stockés les fichiers source? si oui Sous quel format ? J ai le sentiment que la macro n appelle pas les bons pour boucler.
    Cordialement
    0
  3. ThauTheme Messages postés 1564 Statut Membre 160
     
    Bonjour Egal, bonjour le forum,

    La ligne en question :

    CH = CD.Path & "/"

    récupère le chemin d'accès où se trouve le classeur de synthèse, en rajoutant à la fin le caractère antislash (\).
    Cela implique que, comme tu le disais dans le premier post, tous les fichiers sources se trouvent dans le même dossier que le fichier de synthèse, sinon, ça ne marchera pas...
    J'ai fait un rapide test chez moi avant de t'envoyer et je n'ai pas eu de bug...
    0
  4. EGAL68
     
    merci encore Thau Theme et désolé de te solliciter encore

    J'ai écris :
    CH = CD.Path & "C:\Users\Pierre\Documents\Macro\"

    je ne comprends pas pourquoi ça ne passe pas ; Je dois mal écrire le chemin
    j'ai enregistré la macro sous thisworkbook
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. ThauTheme Messages postés 1564 Statut Membre 160
     
    Bonsoir Egal, bonsoir le forum,

    Si ton classeur de synthèse se trouve dans le dossier :
    C:\Users\Pierre\Documents\Macro
    Alors CH va renvoyer son chemin (Path) donc :
    C:\Users\Pierre\Documents\Macro

    si en plus tu lui rajoutes : C:\Users\Pierre\Documents\Macro\, ça va donner à la fin :
    C:\Users\Pierre\Documents\MacroC:\Users\Pierre\Documents\Macro\
    donc ça va planter...

    Soit tu utilises CD.Path qui renvoie le chemin d'accès du classeur CD (auquel on rajoute l'anti slash [\] à la fin, soit tu écris le chemin en dur : C:\Users\Pierre\Documents\Macro\ Mais pas les deux !

    La macro na pas lieu d'être dans le composant ThisWorbook mais dans un module standard, Module1 par exemple...

    0