Macro fusion plusieurs fichiers excel [Résolu/Fermé]

Signaler
-
 débutante_ndl -
Bonjour,


Je souhaite fusionner 6 fichiers excel en un seul.

Mes fichiers à fusionner s'appellent "C1, C2, C3, C4, C5 et C6.xls".
Chaque fichier comporte plusieurs onglet mais dans un 1er temps, seule l'onglet "Feuil1" est à récupérer, sans prendre l'en-tête (à partir de A2).
Les 6 fichiers évoluent régulièrement et indépendamment, le nombre de lignes change (pas le nombre de colonnes) il faut donc regrouper toutes les lignes les unes derrière les autres.
Le contenu de chaque ligne doit rester intact lors de la fusion (même si certaines cellules sont vides sur une ligne)

Le fichier final s'appelle "Global.xls".
Ces 7 fichiers se trouvent sous C:\test.

J'ai bien trouvé des posts à ce sujet mais je n'arrive pas à adapter les macros à ma demande.
N'ayant aucune connaissance en VBA, je perds beaucoup de temps..

Si quelqu'un pouvait m'envoyer un fichier excel avec une macro correspondante à mes noms de fichiers et emplacements, et le bouton qui l'exécute (en bonus!) ce serait génial !

Merci d'avance pour votre aide.

12 réponses

Messages postés
14934
Date d'inscription
lundi 18 octobre 2004
Statut
Contributeur
Dernière intervention
24 juin 2020
4 184
bonjour

Voici un fichier excel "Global.xls"

- avec une macro correspondante à tes noms de fichiers (et emplacements : aucune importance),

- et le bouton qui l'exécute (en bonus!) : pas vraiment de bouton, car le regroupement s'effectue à l'ouverture.

https://www.cjoint.com/?BCzxn3oc359
Messages postés
6
Date d'inscription
mardi 5 août 2014
Statut
Membre
Dernière intervention
8 août 2014

Bonjour,

Je viens de tester et le code ne fonctionne pas avec mes classeurs pour la 5ieme colonne.
Je n'arrive pas à saisir le problème, car je vois que dans votre code il trouve $ et lit les chiffres avant.

Peut-être parce que à certains endroits il peut y avoir une lettre entre le $ et le chiffre , par exemple 23k$. Est-ce que c'est ce qui cause un problème.

Merci!
Messages postés
9756
Date d'inscription
mercredi 11 août 2004
Statut
Contributeur
Dernière intervention
10 octobre 2020
1 076
Bonjour infogen,
Les MP c'est une chose et les réponses sur le forum une autre.......
Salutations
Le Pingou
Messages postés
14934
Date d'inscription
lundi 18 octobre 2004
Statut
Contributeur
Dernière intervention
24 juin 2020
4 184
Bonjour infogen,

Si tes montants n'ont pas que des chiffres effectivement cela n'était pas prévu.
Cette version doit résoudre le problème :

https://www.cjoint.com/c/DHiiPvCAe0Z

Les montants acceptent k m et espace.
Messages postés
6
Date d'inscription
mardi 5 août 2014
Statut
Membre
Dernière intervention
8 août 2014

Bonjour gbinforme!

Tout semble fonctionner, merci beaucoup de m'avoir aider avec mon problème :)
Messages postés
9756
Date d'inscription
mercredi 11 août 2004
Statut
Contributeur
Dernière intervention
10 octobre 2020
1 076
Bonjour infogen,
Et j'ajouterai que vous avez bien de la chance....!
Salutations
Le Pingou
Merci beaucoup gbinforme !!

çà a marché du 1er coup, incroyable !

Juste deux questions :
-Dans le fichier "Global", la macro récupère les 241 lignes de chacun des 6 fichiers.
Est-il possible de "coller" les données des 6 fichiers sans laisser de lignes vides entre 2 ?
(NB : le nombre de lignes est différent entre les 6 fichiers, et évolue d'une semaine à l'autre)

-j'avais pensé au bouton pour exécution de la macro car ensuite j'effectue des tableaux croisés dynamiques dans le fichier "Global", donc j'ai des feuilles qui restent fixes.
Je souhaite simplement actualiser la Feuil1 sans écraser les autres feuilles déjà existantes.
Est-ce possible ?

@+
Messages postés
31
Date d'inscription
jeudi 17 mai 2012
Statut
Membre
Dernière intervention
12 mars 2015

Bonjour,
ça marche à merveille.
Merci beaucoup et bon courage gbinforme.
Bonjour,

Je souhaiterais dans le même principe fusionner mes différents tableau et que du coup à l'ouverture de mon fichier global, les données ce mettent à jour.

Apparement ce qui est fait avant marcherai dans mon cas. Or, je n'arrive pas à l'ouverture du fichier télécharger a récupérer la macro créer.

Est-il possible de me faire une copie ici du code de la macro que je l'adapte à mon besoin
Messages postés
14934
Date d'inscription
lundi 18 octobre 2004
Statut
Contributeur
Dernière intervention
24 juin 2020
4 184
Bonjour derobeames,

Apparement ce qui est fait avant marcherai dans mon cas

C'est-à-dire ? Je ne vois pas bien le sens ?

Est-il possible de me faire une copie ici du code de la macro

La macro est dans le classeur, à l'open, non cachée et totalement accessible : il te suffit de regarder. Si tu n'arrives pas à la trouver tu auras peut-être du souci pour la modifier.
Bonjour,

Je suis désolé mais lorsque je récupère le fichier et que je vais dans macro, aucune ne s'affiche.

Est-ce le fait que je sois sur Excel 2010?

Je souhaite l'adapter à mon besoin qui est de faire le même regroupement avec tous les fichiers Excel du répertoire que je vais choisir moi-même.

Si quelqu'un arrive à ouvrir cette macro, au pire un copier-coller du texte m'irait parfaitement !

Merci d'avance.
Messages postés
14934
Date d'inscription
lundi 18 octobre 2004
Statut
Contributeur
Dernière intervention
24 juin 2020
4 184
l'éditeur de macro te serait plus utile si tu veux la modifier ;-)
>
Messages postés
14934
Date d'inscription
lundi 18 octobre 2004
Statut
Contributeur
Dernière intervention
24 juin 2020

Bonjour gbinforme,

j'ai un petite soucis que je n'arrive pas à résoudre, j'ai une macro qui me permet de fusionner mes fichiers excel sous une même feuille, ce que je veux faire c'est de pouvoir fusionner mes fichiers sélectionnés tout en gardant les feuilles dans le nouveau fichier excel, avec leurs noms d'origine

macro :

Sub regroupe()
Dim chemin As String
Dim rep As String
Dim fic As String
Dim Wf As Workbook
Dim source As Range
Dim SummarySheet As Worksheet

Set SummarySheet = Workbooks.Add(xlWBATWorksheet).Worksheets(1)


rep = "C:\Users\ndl\Desktop\Work"

Application.ScreenUpdating = False
Application.EnableEvents = False
Application.DisplayAlerts = False
ChDrive rep
ChDir rep

SelectedFiles = Application.GetOpenFilename( _
filefilter:="Excel Files (*.xl*), *.xl*", MultiSelect:=True)

' NRow keeps track of where to insert new rows in the destination workbook.
NRow = 1

' Loop through the list of returned file names
For NFile = LBound(SelectedFiles) To UBound(SelectedFiles)
' Set FileName to be the current workbook file name to open.
FileName = SelectedFiles(NFile)

' Open the current workbook.
Set WorkBk = Workbooks.Open(FileName)
' Modify this range for your workbooks. It can span multiple rows.
Dim LastRow As Long
LastRow = WorkBk.Worksheets(1).Cells.Find(What:="*", _
After:=WorkBk.Worksheets(1).Cells.Range("A1"), _
SearchDirection:=xlPrevious, _
LookIn:=xlFormulas, _
SearchOrder:=xlByRows).Row
Set SourceRange = WorkBk.Worksheets(1).Range("A1:ZZ" & LastRow)



' Set the destination range to start at column B and be the same size as the source range.
Set DestRange = SummarySheet.Range("A" & NRow)
Set DestRange = DestRange.Resize(SourceRange.Rows.Count, _
SourceRange.Columns.Count)

' Copy over the values from the source to the destination.
DestRange.Value = SourceRange.Value

' Increase NRow so that we know where to copy data next.
NRow = NRow + DestRange.Rows.Count

' Close the source workbook without saving changes.
WorkBk.Close SaveChanges:=False
Next NFile

' Call AutoFit on the destination sheet so that all data is readable.
SummarySheet.Columns.AutoFit

End Sub

merci pour votre réponse d'avance
Ah oui effectivement... Merci

En revanche, je n'arrive pas à corriger pour mon besoin. Je voudrais pouvoir choisir moi-même, au lancement de la macro, le répertoire dans lequel récuperer les fichiers !

Une idée? Sachant que sur une autre requête, j'utilisais :

ndp = FindWindow32("XLMAIN", Application.Caption)
rep = rech_rep(ndp, "Choisissez le répertoire à regrouper")
Messages postés
14934
Date d'inscription
lundi 18 octobre 2004
Statut
Contributeur
Dernière intervention
24 juin 2020
4 184
Bonjour,

les instructions que tu donnes ne peuvent pas fonctionner seules, comme ceci :
    With Application.FileDialog(msoFileDialogFolderPicker)
        .Show
        If .SelectedItems.Count > 0 Then
            rep = .SelectedItems(1)
        Else
            Exit Sub
        End If
    End With

à placer en début de macro que tu peux déplacer ailleurs.
Est-il possible de ne copier que les données à partir de la 15eme ligne du tableau ? car je ne veux pas des en-têtes. Sinon ca marche effectivement nickel.
Messages postés
1
Date d'inscription
mardi 23 avril 2013
Statut
Membre
Dernière intervention
23 avril 2013

Bonjour,

Ton fichier "BCAxswLpCvy" s'exécute très bien mais j'aurais quelques modifications à y intégrer et j'espère que tu pourras m'aider :
- En mettant "C?.xls" et des fichiers commencant par C sa marche mais dés que j'essaye de mettre "*.xls" (car j'ai des noms différents pour tous) cela ne fonctionne pas.
- Est ce possible de faire la même chose avec des fichiers .csv et d'y integrer un format de séparateur de champ (,) lors du transfert
- Est ce possible de mettre à jour le fichier destination en fonction si des fichiers ont été rajouté dans le répertoire et dans ce cas les incrémenter au fichiers destination.

J'espère avoir été clair.

Merci d'avance
Messages postés
14934
Date d'inscription
lundi 18 octobre 2004
Statut
Contributeur
Dernière intervention
24 juin 2020
4 184
Bonjour boston2001 et bienvenue

j'essaye de mettre "*.xls" ... cela ne fonctionne pas.

Aucune raison que cela ne fonctionne pas mais si tu as des classeurs 2007/2010, il faut mettre "*.xl*)

la même chose avec des fichiers .csv

C'est possible mais le fonctionnement est différent pour obtenir les cellules séparées.

Est ce possible... les incrémenter au fichiers destination

Tout est possible mais la fonction n'a rien à voir : celle qui était demandée récupère les fichiers à un instant et si tu la refais 3 jours plus tard tu auras le nouvel état avec les nouveaux fichiers et sans ceux qui ont été supprimés.

Si tu veux faire un historique, il faut d'abord un cahier des charges exhaustif car les variantes sont infinies.
Messages postés
1
Date d'inscription
lundi 5 août 2013
Statut
Membre
Dernière intervention
5 août 2013

Bonjour gbinforme,

Ton fichier marche nikel mais j'aimerais bien le modifier un peu pour qu'il copie chaque fichier sur un onglet différent du fichier Global avec si possible comme nom d'onglet, le nom du fichier copié. Est ce que tu pourrais m'éclairer ?

Merci
Messages postés
14934
Date d'inscription
lundi 18 octobre 2004
Statut
Contributeur
Dernière intervention
24 juin 2020
4 184
Bonjour foufy59,

Voici le classeur de regroupement qui copie chaque classeur du répertoire dans un onglet différent nommé à l'identique :

https://www.cjoint.com/c/CHiwNfvIhuQ

Le premier onglet fait la liste des classeurs regroupés avec lien sur l'onglet concerné. Attention au nom des classeurs car les noms d'onglets sont limités en longueur avec certains caractères non autorisés.

Bon tests.
slt,

merci d'abord pour ce travail car ça me parait pas super simple pour un novice comme moi ^^
j'ai donc essayé ta macro et j'ai un souci

j'ai dans le premier onglet le calcul qui ce fait bien avec la copie des noms de fichier avec le nombre de ligne
mes onglets données qui sont bien repris

donc ma question c'est :
est il possible d'avoir quand même l'onglet récap avec toute les données ?
car j'arrive pas à combiner tes 2 macros ^^ (oui je sais je suis nul)
Messages postés
14934
Date d'inscription
lundi 18 octobre 2004
Statut
Contributeur
Dernière intervention
24 juin 2020
4 184
Bonjour,

Tu as changé de nom ? ... pas facile à suivre !

Tout est toujours possible mais quel est l'intérêt d'avoir l'ensemble des données en double ?
Bonjour gbinforme,

Déjà merci pour ta précieuse aide avec la macro.
J'ai utilisé Ton fichier "BCAxswLpCvy". Cependant, impossible de changer "C?.xls" par "*.xls" .
J'ai pu, à l'aide d'une autre de tes macros, faire le changement voulu; comme ceci:


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("JU HEP BEJUNE - Médiathèque de ")
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
Est souligné ce que j'ai ajouté.

J'aimerais pouvoir encore inclure en macro une suppression de doublon, sachant que chaque ligne comprend des caractères de A à P. Peux-tu m'aider?
bonjour,

la macro en fichier joins ne marche, plus.

serait il possible de l'avoir de nouveau.

Je voudrais fusionner plusieurs fichier xlsx qui contienne 5 feuille chacun en un seul fichier.

Merci
Messages postés
14934
Date d'inscription
lundi 18 octobre 2004
Statut
Contributeur
Dernière intervention
24 juin 2020
4 184
bonjour kikounet ,

la macro en fichier joins ne marche, plus.

Qu'entends-tu par là ?
Je viens de la télécharger et elle fonctionne si tu as des classeurs dans ton dossier.
quand j'ai voulu la chargé sur ci-joins, elle marquait fichier enlevé.

mais ça à marché se matin.

Je vais essayer ça.

Merci
après essai,

cela me met erreur dépassement de capacité.

Une idée?
après avoir continué, j'ai réussi faire avancé le Schmilblick mais pas bien loin.

J'ai essayer dans un dossier contenant 2 fichier excel avec chacun 5 onglet et dans chaque onglet 20 colonne de 65000 ligne chacun.

La macro me trouve qu'un seul onglet et 10 ligne pour un fichier.

Encore un problème
Bonjour,

Est'il possible de fusionner les fichiers même si les feuilles ont des noms différents?
Messages postés
14934
Date d'inscription
lundi 18 octobre 2004
Statut
Contributeur
Dernière intervention
24 juin 2020
4 184
bonjour,

Est-il possible de "coller" les données des 6 fichiers sans laisser de lignes vides

La macro ne laisse pas de lignes vides et si tu as des lignes vides c'est qu'elles sont dans tes fichiers (peut-être avec une mise en forme ou autre) : j'ai tout de même supprimé les lignes vides existantes.

Je souhaite simplement actualiser la Feuil1 sans écraser les autres feuilles déjà existantes. Est-ce possible ?

La macro ne touche que la Feuil1 (qui doit exister) et les autres feuilles peuvent être présentes sans problème.

j'avais pensé au bouton pour exécution de la macro

Si tu veux, mais quel est l'intérêt du bouton puisque la fonction est effectuée à l'ouverture ?

https://www.cjoint.com/?BCAxswLpCvy
Messages postés
31
Date d'inscription
jeudi 17 mai 2012
Statut
Membre
Dernière intervention
12 mars 2015

C'est vrai ça marche avec Excel 2003
sinon avec Excel2007 non
Messages postés
14934
Date d'inscription
lundi 18 octobre 2004
Statut
Contributeur
Dernière intervention
24 juin 2020
4 184
C'est-à-dire ?
Le code fonctionne avec 2002, 2007, 2010 et probablement avec 97 que je n'ai plus.

Tu peux préciser ce qui ne va pas ?
Messages postés
1
Date d'inscription
jeudi 7 mars 2013
Statut
Membre
Dernière intervention
7 mars 2013

Bonjour gbinforme,

Pourriez-vous m'aider à personnaliser le fichier final avec mes propres noms de fichiers Excel et leurs emplacements?
J'ai des dossiers par année/mois/jour où le fichier s'appelle 01012012.csv/02012012.csv/03012012.csv etc...
Que dois-je modifier et où?
Je suis novice en macro.

Merci.
Manu
Messages postés
14934
Date d'inscription
lundi 18 octobre 2004
Statut
Contributeur
Dernière intervention
24 juin 2020
4 184
Bonjour,

Tu as une ligne titre dans tes csv qui ne fonctionnent pas comme les classeur ?

Tu veux regrouper tous tes fichiers sur la même feuille ?
Bonjour,
En fait j'ai un petit soucis avec la macro que vous avez mis dans votre document Excel, en effet, je n'arrive pas a avoir un document qui regroupe mes fichiers excel si j'ai un fichier qui contient plusoeurs feuilles, comment je peux faire pour remedier a ce problème ?