Excel : Fusionner plusieurs fichier XLS

Résolu/Fermé
piroc Messages postés 61 Date d'inscription vendredi 26 octobre 2012 Statut Membre Dernière intervention 17 avril 2015 - 26 oct. 2012 à 11:48
 Reny - 3 sept. 2014 à 11:14
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.
A voir également:

5 réponses

tompols Messages postés 1273 Date d'inscription jeudi 29 juillet 2004 Statut Contributeur Dernière intervention 25 novembre 2013 435
Modifié par tompols le 26/10/2012 à 14:51
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
tompols Messages postés 1273 Date d'inscription jeudi 29 juillet 2004 Statut Contributeur Dernière intervention 25 novembre 2013 435
Modifié par tompols le 26/10/2012 à 15:18
le fichier ici (à sauvegarder dans le rep contenant les fichiers à consolider) : https://www.cjoint.com/?BJAprgKUBsg
0
piroc Messages postés 61 Date d'inscription vendredi 26 octobre 2012 Statut Membre Dernière intervention 17 avril 2015
26 oct. 2012 à 15:06
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
tompols Messages postés 1273 Date d'inscription jeudi 29 juillet 2004 Statut Contributeur Dernière intervention 25 novembre 2013 435
26 oct. 2012 à 15:17
je viens de modifier le lien cjoint, j'étais allé un peu vite ^^ : https://www.cjoint.com/?BJAprgKUBsg
0
tompols Messages postés 1273 Date d'inscription jeudi 29 juillet 2004 Statut Contributeur Dernière intervention 25 novembre 2013 435
26 oct. 2012 à 15:19
enregistrer le fichier dans le répertoire, activer les macros puis lancer la macro "regroupe"
0
Morgothal Messages postés 1236 Date d'inscription jeudi 22 avril 2010 Statut Membre Dernière intervention 19 mai 2015 183
Modifié par Morgothal le 26/10/2012 à 15:20
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
piroc Messages postés 61 Date d'inscription vendredi 26 octobre 2012 Statut Membre Dernière intervention 17 avril 2015
26 oct. 2012 à 15:26
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
piroc Messages postés 61 Date d'inscription vendredi 26 octobre 2012 Statut Membre Dernière intervention 17 avril 2015
26 oct. 2012 à 15:28
ha...j'ai un message d'erreur
Erreur d'exécution '1004':
Erreur définie pas l'application ou par l'objet
0
Morgothal Messages postés 1236 Date d'inscription jeudi 22 avril 2010 Statut Membre Dernière intervention 19 mai 2015 183
26 oct. 2012 à 15:32
J'ai lancé sur une trentaine de classeurs, je n'ai pas de souci de ce genre...
J'investigue pour voir
0
tompols Messages postés 1273 Date d'inscription jeudi 29 juillet 2004 Statut Contributeur Dernière intervention 25 novembre 2013 435
26 oct. 2012 à 15:33
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
piroc Messages postés 61 Date d'inscription vendredi 26 octobre 2012 Statut Membre Dernière intervention 17 avril 2015
26 oct. 2012 à 15:36
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
Morgothal Messages postés 1236 Date d'inscription jeudi 22 avril 2010 Statut Membre Dernière intervention 19 mai 2015 183
26 oct. 2012 à 14:16
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
tompols Messages postés 1273 Date d'inscription jeudi 29 juillet 2004 Statut Contributeur Dernière intervention 25 novembre 2013 435
26 oct. 2012 à 14:36
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
piroc Messages postés 61 Date d'inscription vendredi 26 octobre 2012 Statut Membre Dernière intervention 17 avril 2015
26 oct. 2012 à 14:52
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
chnoirhomme Messages postés 3 Date d'inscription lundi 18 février 2013 Statut Membre Dernière intervention 18 février 2013
18 févr. 2013 à 22:04
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
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
Max1618 Messages postés 1 Date d'inscription mardi 30 juillet 2013 Statut Membre Dernière intervention 30 juillet 2013
30 juil. 2013 à 16:41
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
Morgothal Messages postés 1236 Date d'inscription jeudi 22 avril 2010 Statut Membre Dernière intervention 19 mai 2015 183
26 oct. 2012 à 12:00
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
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

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
piroc Messages postés 61 Date d'inscription vendredi 26 octobre 2012 Statut Membre Dernière intervention 17 avril 2015
26 oct. 2012 à 12:19
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