Excel : Fusionner plusieurs fichier XLS

Résolu
piroc Messages postés 61 Date d'inscription   Statut Membre Dernière intervention   -  
 Reny -
Bonjour à tous,

Je suis sous Excel 2007

J'ai plusieurs fichier XLS où il y a des tableaux.

J'aimerai savoir s'il est possible, par une quelconque manière, de faire en sorte que tous les fichier sélectionnés XLS s'ouvre dans un seule et même fichier XLS.

De se fait, tous les tableaux se "suivrons" en gardant leur colonnes identiques.

Il y a bien sur le copier/coller, mais j'ai énormément de fichier XLS à traiter...

Si vous avez des solution pour Excel 2010/2013, je suis preneur :)

Merci à tous.

5 réponses

  1. tompols Messages postés 1273 Date d'inscription   Statut Contributeur Dernière intervention   460
     
    Salut,
    en modifiant légerement la macro donnée plus haut (modifs en gras):
    Sub regroupe() 
    Dim chemin As String    ' classeur regroupé 
    Dim rep As String       ' répertoire à traiter 
    Dim fic As String       ' classeur regroupé 
    Dim ligne As Long       ' ligne écriture 
    Dim nbc As Integer      ' nombre de classeurs 
    Dim Wf As Worksheet     ' feuille regroupement 
    Dim Wl As Worksheet     ' feuille regroupée 
    rep = ThisWorkbook.Path & "\" 
    Application.ScreenUpdating = False 
    Application.EnableEvents = False 
    Application.DisplayAlerts = False 
    On Error GoTo fin 
    Set Wf = ThisWorkbook.ActiveSheet         ' variable feuille groupe 
    Wf.Cells.ClearContents 
    nbc = 0: nbf = 0                ' initialisation variables 
    ligne = 1 
    fic = Dir(rep & "*.xls")    ' recherche fichiers 
    While fic <> "" 
    If fic <> ThisWorkbook.Name Then 
        chemin = rep & fic       ' chemin fichiers 
            Workbooks.Open chemin, 0  ' ouverture 
            Set Wl = ActiveWorkbook.Sheets(1) 
            Wl.Copy After:=Wf 
            Workbooks(fic).Close SaveChanges:=False   ' Fermeture du classeur 
            nbc = nbc + 1 
    End If 
        fic = Dir 
    Wend 
    fin: 
        MsgBox nbc & " classeurs regroupés" 
        Application.ScreenUpdating = True 
        Application.EnableEvents = True 
        Application.DisplayAlerts = True 
     End Sub 
     

    A+
    On entend par une belle solution, la solution simple et facile d'un problème difficile et compliqué
    14
    1. tompols Messages postés 1273 Date d'inscription   Statut Contributeur Dernière intervention   460
       
      le fichier ici (à sauvegarder dans le rep contenant les fichiers à consolider) : https://www.cjoint.com/?BJAprgKUBsg
      0
    2. piroc Messages postés 61 Date d'inscription   Statut Membre Dernière intervention  
       
      J'ai fait la même procédure que l'autre macro.

      J'ai le même résultat, sans le message "0 classeurs regroupés avec 0 feuilles et 1 lignes"
      0
    3. tompols Messages postés 1273 Date d'inscription   Statut Contributeur Dernière intervention   460
       
      je viens de modifier le lien cjoint, j'étais allé un peu vite ^^ : https://www.cjoint.com/?BJAprgKUBsg
      0
    4. tompols Messages postés 1273 Date d'inscription   Statut Contributeur Dernière intervention   460
       
      enregistrer le fichier dans le répertoire, activer les macros puis lancer la macro "regroupe"
      0
  2. Morgothal Messages postés 1350 Statut Membre 184
     
    J'ai bien corrigé et simplifié la macro plus haut, j'étais aussi allé un peu vite avec la macro de gbinforme, merci tompols :)
    Celle-ci marche bien, en créant une nouvelle feuille pour chaque classeur à insérer :

    Sub regroupe()  
    Dim chemin As String     
    Dim rep As String     
    Dim fic As String    
    Dim Wf As Workbook  
    Dim source As Range  
    
    rep = ThisWorkbook.Path & "\"  
    Application.ScreenUpdating = False  
    Application.EnableEvents = False  
    Application.DisplayAlerts = False  
    
    Set Wf = ThisWorkbook  
    
    fic = Dir(rep & "*.xls")    ' recherche fichiers  
    While fic <> ""  
    If fic <> ThisWorkbook.Name Then  
        chemin = rep & fic       ' chemin fichiers  
              
            Workbooks.Open chemin, 0  ' ouverture  
            Set source = ActiveWorkbook.Sheets(1).Range("A1:IV65000")  
            Wf.Sheets.Add  
              
            source.Copy  
            With Wf.Sheets(1)  
            .Cells(1).PasteSpecial Paste:=8  
            .Cells(1).PasteSpecial Paste:=xlPasteValues  
            .Cells(1).PasteSpecial Paste:=xlPasteFormats  
            Application.CutCopyMode = False  
            End With  
              
        ActiveWorkbook.Close  
    End If  
        fic = Dir  
    Wend  
    End Sub

    Il faut :
    _créer un classeur dans le dossier où se situent tous tes classeurs à regrouper
    _l'appeler comme bon te semble
    _l'ouvrir et appuyer sur Alt+F11 (l'éditeur VBA s'ouvre)
    _dans ThisWorkbook (par exemple), colle la macro ci-dessus, et exécute la en appuyant sur F5.

    Chez moi ça fonctionne :-)

    -------------------
    Cordialement,
    Clément
    4
    1. piroc Messages postés 61 Date d'inscription   Statut Membre Dernière intervention  
       
      ha ok c'est la VBA qui me posai problème :)

      Sa à l'air de fonctionné ! Mon pc rame à mort mais je voie dans la VBA que des feuilles s'ajoutes peu à peu a mon global.xls
      Je vous dit sa dans quelque minutes, j'ai 82 classeur à mettre :)
      0
    2. piroc Messages postés 61 Date d'inscription   Statut Membre Dernière intervention  
       
      ha...j'ai un message d'erreur
      Erreur d'exécution '1004':
      Erreur définie pas l'application ou par l'objet
      0
    3. Morgothal Messages postés 1350 Statut Membre 184
       
      J'ai lancé sur une trentaine de classeurs, je n'ai pas de souci de ce genre...
      J'investigue pour voir
      0
    4. tompols Messages postés 1273 Date d'inscription   Statut Contributeur Dernière intervention   460
       
      Salut Morgothal,
      bien vu pr la correction, par contre tu manipules du Range en limitant à du Excel 2003 (""A1:IV65000"), ça me parait mieux d'utiliser la méthode copy sur la feuille.....
      piroc, tente avec mon fichier en attendant (commentaire au msg précédent)
      0
    5. piroc Messages postés 61 Date d'inscription   Statut Membre Dernière intervention  
       
      Il c'est arrêter au 18ème classeurs.
      Je vais tout supprimer et relancer pour voir

      Mais petit problème. Donc la VBA me met tout les classeurs dans un seul et même classeur (global.xls) ce qui est génial. Mais chaque tableau et sur une feuille différente, j'aurais aimais avoir tout sur la même feuille...
      0
  3. Morgothal Messages postés 1350 Statut Membre 184
     
    Re,
    Voici une macro de gbinforme qui fonctionne chez moi (une macro trouvée en prenant le premier résultat d'une recherche google au fait ;))
    Attention, il faut que le classeur où tout sera regroupé s'appelle "global.xls" et qu'il soit placé dans le même dossier que tous les autres:
    Sub regroupe()
    Dim chemin As String    ' classeur regroupé
    Dim rep As String       ' répertoire à traiter
    Dim fic As String       ' classeur regroupé
    Dim ligne As Long       ' ligne écriture
    Dim nbc As Integer      ' nombre de classeurs
    Dim nbf As Integer      ' nombre de feuilles
    Dim nbl As Integer      ' nombre de lignes
    Dim c As Integer        ' nombre de colonnes
    Dim l As Long           ' ligne lecture
    Dim Wf As Worksheet     ' feuille regroupement
    Dim Wl As Worksheet     ' feuille regroupée
    rep = ThisWorkbook.Path & "\"
    Application.ScreenUpdating = False
    Application.EnableEvents = False
    Application.DisplayAlerts = False
    On Error GoTo fin
    Set Wf = ThisWorkbook.ActiveSheet         ' variable feuille groupe
    Wf.Cells.ClearContents
    nbc = 0: nbf = 0                ' initialisation variables
    ligne = 1
    fic = Dir(rep & "*.xls")    ' recherche fichiers
    While fic <> ""
    If fic <> ThisWorkbook.Name Then
        chemin = rep & fic       ' chemin fichiers
            Workbooks.Open chemin, 0  ' ouverture
            Set Wl = ActiveWorkbook.Sheets(1)
            nbl = Wl.UsedRange.Rows.Count
            c = Wl.UsedRange.Columns.Count
            If ligne > 2 Then l = 2 Else l = 1  ' une seule fois le titre
            Wl.Cells(l, 1).Resize(nbl, c).Copy Destination:=Wf.Cells(ligne, 1)
            ligne = ligne + nbl - l + 1
            nbf = nbf + 1
            ActiveWorkbook.Close SaveChanges:=False   ' Fermeture du classeur
            nbc = nbc + 1
    End If
        fic = Dir
    Wend
    fin:
        MsgBox nbc & " classeurs regroupés avec " & nbf & " feuilles et " & ligne & " lignes"
        Application.ScreenUpdating = True
        Application.EnableEvents = True
        Application.DisplayAlerts = True
     End Sub
    

    2
    1. tompols Messages postés 1273 Date d'inscription   Statut Contributeur Dernière intervention   460
       
      Salut,
      A la lecture on dirait bien que ce code regroupe les tableaux de différents classeurs dans un seul et même tableau....
      0
    2. piroc Messages postés 61 Date d'inscription   Statut Membre Dernière intervention  
       
      Je n'est jamais utilisé de macro ....
      Comment dois-je procéder ?

      J'ai mon dossier où il y a tous mes fichier XLS: C:\Documents and Settings\Dell\Bureau\SOL 4\1

      J'y est crée un fichier XLS vide appelé global.xls

      Lancer le fichier XLS de @gbinforme http://cjoint.com/12ma/BCAxswLpCvy.htm

      Activé la macro (Option -> Activer ce contenu -> OK)

      et j'ai un message: "0 classeurs regroupés avec 0 feuilles et 1 lignes"
      0
    3. chnoirhomme Messages postés 3 Date d'inscription   Statut Membre Dernière intervention  
       
      Bonjour, en fait j'aimerai de l'aide de votre part, j'ai 60 fichiers Excel ou j'ai des informations dans la colonne K de 9 à 30. je voudrais sans ouvrir les 60 fichiers copier les cases de K9 à K30 de tous les classeurs l'une a la suite de l'autre dans un nouveau classeur nommer par exemple Evolution et en commençant par exemple a partir de la case F9 à F30, la seconde copie serait elle sur les case G9 a G30 et ainsi de suite. Les classeurs a copier sont nommé en reprenant a la fin la semaine et l'année XXXXX-01-2013. La compilation doit prendre en compte semaine après semaine de les prises de références. Une fois que j'ai regroupé ses donnée je doit créer un graphique montrant l'évolution des données.
      En vous remerciant d'avance.
      0
    4. DADOURC
       
      Bonjour,

      J'ai utilisé la macro qui regroupe tous les fichiers dans une seule et même feuille, en mettant tout à la suite.
      chacuns de mes fichiers comportent un tableau. Pensez-vous qu'il serait possible de remplir les tableaux dans le fichier "global" et qu'ils soient simultanément rempli dans chacuns de leur fichier source??

      Merci d'vance pour votre aide
      0
    5. Max1618 Messages postés 1 Statut Membre
       
      Bonjour,
      Merci beaucoup pour cette macro qui m'a déjà fait gagné beaucoup de temps.
      J'aurais juste deux questions qui me permettraient d'en gagner encore plus.
      Est-il possible d'importer chaque onglet les uns à coté des autres (au lieu des uns sous les autres) ?
      Est-il possible de n'importer qu'une plage de celulles (la plage F7:F37 présente sur chacun des classeurs) ?

      Merci par avance!
      0
  4. Morgothal Messages postés 1350 Statut Membre 184
     
    Bonjour,
    Soyons précis, un fichier xls est un classeur Excel qui contient des feuilles de calcul.
    Ton besoin est de mettre toutes les feuilles de tous les classeurs dans un seul classeur ?
    Ou de fusionner toutes les feuilles pour ne faire qu'une seule feuille excel en un classeur ?
    0
    1. Reny
       
      Bonjour,
      j'ai un problème presque identique sauf que moi j'aimerais fusionner 3 classeurs excel pour ne faire qu'une feuille afin d'éliminer les doublons (je précises que ce sont 3 fichiers contacts différents à réunir en un seul)
      merci d'avance
      0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. piroc Messages postés 61 Date d'inscription   Statut Membre Dernière intervention  
     
    Ton besoin est de mettre toutes les feuilles de tous les classeurs dans un seul classeur ?

    Oui, sachant que je n'est q'une feuille par classeur

    C'est un peut plus clair ? :) sinon je re explique en détail.
    0