Posez votre question Signaler

Réunir plusieurs fichiers EXCEL dans 1 seul [Résolu]

ttjeremy - Dernière réponse le 8 janv. 2014 à 17:18
Bonjour,
j'ai un soucis Sur Excel.
Voila, j'ai Soixante fichiers excel de forme identique avec 5 à 6 onglets toujours de forme identique. (Ne demandez pas pourquoi c'est pour le TAF)
Ces fichiers ne se trouvent pas forcément dans le même dossier et ne sont pas en nombre identiques
Exemple:
DossierA : Dossier1,dossier2,dossier3,dossier4.....
Dossier1 : Exel1
Dossier2 : Excel2,Excel3
Dossier3 : Excel4,Excel5,Excel6
Dossier4 : Excel7,Excel8
Connaissez-vous une macro capable de tout me copier dans un Seul fichier Excel (Tout les fichiers les uns en dessous des autres) en indiquant le fichier dont l'info provient ainsi que l'onglet d'origine)
That is your challenge !!! Good Luck
PS : Je suis débutant en Macro, essayez d'expliquer simplement ou de me donner la macro entière.
Lire la suite 
Réponse
+10
moins plus
Bonjour ts le monde, svp j'ai besoin de la macro qui permet de concatener les fichiers excel qui ont la même structure

c super urgent. d'avance merci
Steve- 12 sept. 2008 à 01:04
Utiliser un fichier de batch : FetchCSVbatch se trouve sur google, petit macro à manipuler
Pour les reste les liens ci-dessus ne fonctionnent pas du tous
Répondre
Ajouter un commentaire
Réponse
+6
moins plus
bonjour ttjeremy,

Connaissez-vous une macro capable de tout me copier dans un Seul fichier Excel (Tout les fichiers les uns en dessous des autres) en indiquant le fichier dont l'info provient ainsi que l'onglet d'origine)
That is your challenge !!! Good Luck


Bon comme personne ne se précipite sur ta question, je relève le "challenge".

Dans ce fichier, je t'ai mis un classeur prêt à fonctionner et le module macro que tu peux importer dans ton classeur :
http://cjoint.com/?dgvPyWen8b

Tu peux sélectionner ton "DossierA" et tous les classeurs de tous les sous répertoires seront concaténés avec le chemin du fichier d'origine, l'onglet d'origine, le nombre de lignes et le nombre de colonnes.

Si tu dépasses le nombre de lignes maximum de la feuille, on passe sur une nouvelle feuille.

Si tes fichiers ont des plages ou des fonctions avec le même nom, il y a un message excel pour le signaler à chaque double et il faut renommer pour que ton classeur fonctionne.

Essaies d'abord sur un petit dossier pour voir le fonctionnement et bon test.
kyrcnos- 10 oct. 2011 à 11:40
As-tu le mode d'emploi? J'ai 124 fichiers excel à insérer pour le taf etje vais péter un câble!
par avance merci!
Répondre
kevvkevv- 13 déc. 2011 à 18:13
je ne compren pas du tou de se ki lia ecrive reponde moi silvouplai tre rapidemen
Répondre
Loloche- 23 janv. 2012 à 09:41
Bonjour,

Serait-il possible de remettre de lien pour accès à la macro faite pour ttjeremy??

Merci d'avance
Répondre
delph- 7 févr. 2012 à 08:18
Bonjour,

Serait-il à nouveau possible de remettre de lien pour accès à la macro faite pour ttjeremy??

Merci d'avance
Répondre
JulienG- 24 avril 2012 à 16:38
Bonjour,

Cette macro m'a l'ai top !
Serait-il à nouveau possible de remettre de lien pour accès à la macro faite par ttjeremy ?

Merci par avance,
Julien
Répondre
Ajouter un commentaire
Réponse
+1
moins plus
bonjour

Dans chaque fichier, j'ai oublié de mentionné qu'il y avait deux onglets qui ne devait pas faire partir de cette liste.

Connaissez-vous un moyen de ne pas les mettre dans le "Global_classeur"?


Il y a toujours des exceptions pour tout traitement alors autant les mettre en paramètre.

J'ai mis cette ligne dans la macro et il suffit de rajouter d'autres feuilles pour les exclure éventuellement :
exclus = Array("P de Garde", "Définition des colonnes")

Le classeur corrigé est ici : http://cjoint.com/?dklLFvOwSp
ttjeremy- 10 mars 2008 à 18:03
Re bonjour,

La macro est presque parfaite.

Après l'exécution, il me reste quelques manip à faire mais comparé au temps que vous m'avez fait gagner, cela ne représente rien.

Je vous remercie beaucoup. Heureusement qu'il y a des personnes comme vous pour faire avancer le chmilblick.

Encore Merci.

Cordialement,
Ttjérémy
Répondre
marcus53 1Messages postés mercredi 9 janvier 2013Date d'inscription 9 janvier 2013Dernière intervention - 9 janv. 2013 à 15:05
Bonjour, la macro m'interesse mais elle n'est plus en ligne. Peux-tu y remédier ?
merci
Répondre
Ajouter un commentaire
Réponse
+1
moins plus
bonjour

N'as-tu pas un fichier sans données ?
Comme l'on saute les 2 premières lignes maintenant...

Essaies de changer cette ligne
On Error GoTo fin
par
'On Error GoTo fin

S'il y a une erreur tu verras où elle se produit.
Ajouter un commentaire
Réponse
+1
moins plus
bonjour j'ai le mémé soucis que (Réunir plusieurs fichiers EXCEL dans 1 seul
ttjeremy, le mercredi 5 mars 2008 à 11:36:57) mais j'ai pas trouvé le fichier sur le lien. ça sera gentille de me le filé merciii
Ajouter un commentaire
Réponse
+0
moins plus
bonjour

Après l'exécution, il me reste quelques manip à faire

Si tu me dis en quoi elles consistent, elles peuvent peut-être être intégrées facilement.

Selon le style de classeur, le résultat est parfois différent.
ttjeremy 12Messages postés lundi 10 mars 2008Date d'inscription 1 novembre 2008Dernière intervention - 11 mars 2008 à 18:25
Bonjour,

Les quelques petits soucis concernent simplement toutes les lignes vides qui s'incorporent dans le fichier "Global classeur"

Si tu veux que je sois encore plus précis sur mon besoin,

le fichier global devrait :

- copier les deux premières lignes qu'une seule fois (normal, il s'agit de la légende des colonnes).

- comporter une colonne supplémentaire avec comme info le nom du fichier d'origine ainsi que l'onglet pour chaque ligne. (Si possible, 1ere colonne)

Pour synthétiser, tous les fichiers groupés dans le "global classeur" doivent ne former qu'un seul fichier avec leur provenance (traçabilité) qui servira à centraliser les informations pour mieux les traiter par la suite.

Pour moi travailler,

il est préférable que je puisse lire les informations sur un seul fichier. J'ai en tout 11000 lignes à gérer a terme. la provenance de l'information est importante pour gagner du temps.
Par la suite, si j'avais des liens hypertexte sur cette provenance, ce serait le ponpon.

Si tu penses pouvoir faire tout cela, je laisse libre court a ton ingénieusité, mais je te rassures, tu en as déjà fait beaucoup pour moi.
Répondre
Ajouter un commentaire
Réponse
+0
moins plus
bonjour

Ce n'est pas tout à fait ce qui était dans le sujet initial mais c'est normal que le projet évolue en fonction des résultats obtenus.

Il me manque quelques réponses encore :
- y a-t-il lieu de copier les formats de fond, de couleurs et autres ?
- le nom du fichier d'origine est-il simplement le nom du classeur ?
- doit-on tenir compte du chemin complet ou simplement du relatif par rapport au global ?
- le nom de l'onglet sur la colonne B n'est-ce pas mieux ?
- le lien hypertexte serait sur la première colonne ?
- y-a-t-il des formules dans les classeurs ?
- y-a-t-il des zones nommées dans les classeurs ?

Cela permettra d'adapter le code à ta problématique.
Je suppose que tu crées un nouveau classeur à chaque fois, faut-il initialiser totalement le classeur ?
Ajouter un commentaire
Réponse
+0
moins plus
Bonjour,

Il me manque quelques réponses encore :

- y a-t-il lieu de copier les formats de fond, de couleurs et autres ? Il faut garder au minimum les couleurs des lignes et les formules.

- le nom du fichier d'origine est-il simplement le nom du classeur ? Oui tout simplement

- doit-on tenir compte du chemin complet ou simplement du relatif par rapport au global ? Le relatif par rapport au global est suffisant

- le nom de l'onglet sur la colonne B n'est-ce pas mieux ? Cela n'a pas d'importantce

- le lien hypertexte serait sur la première colonne ? Pourquoi pas, ça peut être une bonne idée

- y-a-t-il des formules dans les classeurs ? oui tout à fait, elles sont d'ailleurs importantes.

- y-a-t-il des zones nommées dans les classeurs ? Non


J'espère avoir répondu correctement à tes questions.

Merci de m'aider.

Cordialement,
Ttjeremy
Ajouter un commentaire
Réponse
+0
moins plus
bonjour

Merci de la précision des réponses et tu peux essayer cette version : http://cjoint.com/?dnuJh6bpkj

Le lien hypertexte est mis sur la première ligne de l'onglet afin de ne pas surcharger la première colonne mais il est possible de le recopier facilement.
Ajouter un commentaire
Réponse
+0
moins plus
Bonjour,

Les différentes collonnes rajoutées fonctionnent mais par rapport à la version d'avant, il y a un gros soucis.

La macro ne copie que 16 fichiers sur 30.

Je ne sais pas pourquoi.

Cordialement,
Ttjeremy
Ajouter un commentaire
Réponse
+0
moins plus
Voici le message d'erreur :

Erreur d'execution '1004'

Impossible de coller les informations car les Zones copier et de collage sont de forme et de taille différentes. Essayez l'unes des opérations suivantes :

- Cliquez sur une cellule puis collez
- Sélectionnez une Zone rectangulaire de taille et de forme identiques à celles des informations puis collez.

En faisant débogage, il y a une ligne de la macro qui se surligne en jaune.

Cells(l, 1).Resize(nbl, c).Copy Destination:=Wf.Cells(ligne, 2)
Ajouter un commentaire
Réponse
+0
moins plus
bonjour

Je viens d'essayer avec une feuille vide et cela fonctionne.

Peux-tu regarder la feuille concernée car elle doit être enregistrée en fin de fichier et voir les particularités.

La ligne concernée copie les données sur une seule cellule destinataire et tu ne devrais pas avoir ce message.

As-tu démarré ta concaténation sur une feuille vide ?
Ajouter un commentaire
Réponse
+0
moins plus
C'est bon,

J'ai ré-enregistré le fichier. tout va bien.

Par contre il y a toujours les lignes vides qui se mettent dans le "global classeur"
Ajouter un commentaire
Réponse
+0
moins plus
bonjour

En fait cela venait que ton classeur était censé utiliser 256 colonnes et pour les mettre dans 255 : problème.

Cela vient de la propriété usedrange qui est bien utile mais ne donne pas toujours des résultats adéquats.

C'est corrigé ainsi que les lignes vides qui venaient du même problème. S'il en reste vérifies qu'il n'y ait pas des espaces dans une cellule : http://cjoint.com/?dooeWnJHZw

Bon test et bon courage !
ttjeremy 12Messages postés lundi 10 mars 2008Date d'inscription 1 novembre 2008Dernière intervention - 18 mars 2008 à 10:38
Bonjour,

J'ai effectué le Test.

Les lignes vignes n'ont pas disparus mais il faut que je vérifie si elles ne contiennent pas d'espaces.

Merci pour ton aide.

Cordialement,
Ttjeremy.
Répondre
Ajouter un commentaire
Réponse
+0
moins plus
Bonjour,
Je ne sais pas si c'est possible mais j'aimerais compiler dans une seule feuilles des données qui sont dans 2 feuilles différentes mais que j'ai réuni dans un seul fichier.
Au départ, je me suis demandée s'il ne fallait pas créer un TCD, mais je pense qu'une macro serait plus conseillée. Je pourrais être amenée à changer les feuilles 2 et 3(tout en gardant la même disposition de colonnes !) à cause de différentes mise à jour que je doive effectuées sur une base de données, je ferai alors une extraction de cette base sous excel et donc amenée à enregistrer cette nouvelle base de données dans le classeur correspondant à la place des feuilles 2 et 3.
Dans un premier temps, il faudrait que je puisse faire apparaître dans une feuille 1 toutes les données de la feuille 2 (19 colonnes et nombre de lignes variables en fonction de la mise à jour) et compiler les données de la feuille 3 (6 colonnes et nombre de lignes différentes de la feuille2), en fonction des critères de la feuille 2 : colonne B, C et S. Il peut arriver qu'en fonction du numéro dans la colonne S, un doublon de nom prénom se forme en colonne B et C. Il faut donc qu'une nouvelle ligne se forme.
Je suis nulle en macro et je demanderai donc à celui qui voudra bien me renseigner de me donner le chemin à suivre, pas à pas...
En vous remerciant par avance, bon courage...
ttjeremy 12Messages postés lundi 10 mars 2008Date d'inscription 1 novembre 2008Dernière intervention - 15 avril 2008 à 15:37
Bonjour,

Si tu suis l'historique des conversations, tu pourras y trouver une macro qui réalisera ton souhait.

Tu pourras ainsi remercier son créateur.
Répondre
Ajouter un commentaire
Réponse
+0
moins plus
Bonjour,

J'ai un fichier Excel comportant environ 40 onglets de paramétrage et j'aimerais obtenir un autre fichier Excel comportant toutes les donnees de mes 40 onglets. Je n'y connais rien en macro et mais il me semble que le programme de gbinforme pourrait faire ça aussi mais je n'arrive pas à le trouver.

Ce serait vraiement super ! Ca m'eviterais de faire chaque semaine les 40 copier-coller et surtout de ne plus oublier d'inserer un onglet. Après c'est trop la galère

Merci d'avance pour votre aide,
Cordialement,
Delphine
Ajouter un commentaire
Réponse
+0
moins plus
bonjour DelphineG,

il me semble que le programme de gbinforme pourrait faire ça aussi

Ce n'est pas du tout le même problème car la macro concernée était destinée à globaliser un répertoire pour faire une analyse des données.

En ce qui te concerne, c'est plus simple puisque tu n'as qu'un seul classeur avec plusieurs onglets et donc la procédure n'a rien à voir.

Ton nouveau classeur comporte combien d'onglets ?

Le collage de chaque onglet se fait-il à la suite du précédent sur le même onglet ?

Tes données ont-elles des plages nommées ?

As-tu des formules ou uniquement des données saisies ?

Si tu explique un peu plus précisément, cela devrait être réalisable.
Ajouter un commentaire
Réponse
+0
moins plus
J'ai le même souci pour réunir plusieurs fichiers excel dans un seul. Mais j'arrive à accéder aux leins précédemment utiliser. Est ce quelqu'un peut m'nvoyer le code.
Merci d'avance.
rourouriri 23Messages postés mardi 6 mai 2008Date d'inscription 4 juin 2009Dernière intervention - 6 juin 2008 à 15:14
bonjour,

je sais pas si c'est ce code là qui te faut mais je te le fille au cas ou

Sub FusionDsFeuille()

Dim NbCol As Integer, NbLine As Long, NbLine1 As Long
Dim Wbk As Workbook, Wbk1 As Workbook

'Recherche du classeur 1 parmi tous les classeurs ouverts :
For Each Wbk In Workbooks

'Recherche du bout de nom toujours identique du classeur 1
If InStr(Wbk.Name, "salut") Then
'Ou recherche du nom complet si le nom complet est toujours identique
'if Wbk.name="Export Base X.xls" then

'On le nomme
Set Wbk1 = Wbk

'On compte le nombre de lignes de la feuille 1 du classeur 1
'En imaginant que c'est bien cette feuille sur laquelle on travaille
NbLine1 = Wbk1.Worksheets(1).Cells(6, 1).End(xlUp).Row

'On sort de la boucle si on a trouvé
Exit For

End If
Next Wbk


'Recherche du classeur 2 et 3 (dans n'importe quel ordre a priori) parmi tous les claseurs ouverts :
For Each Wbk In Workbooks
'Recherche du bout de nom toujours identique
If InStr(Wbk.Name, "coucou") Or InStr(Wbk.Name, "psss") Then
'Ou recherche du nom complet si le nom complet est toujours identique
'if Wbk.name="Export Base Y.xls" or Wbk.name="Export Base Z.xls" then
'Pas la peine de le nommer.. c'est le 2 ou le 3 au choix

'On compte le nombre de colonnes en se basant sur la ligne 1 (si ligne 1 = ligne en-tête
'sinon, adapter)
NbCol = Wbk.Worksheets(1).Cells(1, 4).End(xlToLeft).Column

'On compte le nombre de lignes en se basant sur la colonne 1 (si colonne 1 non vide
'sinon, adapter)
NbLine = Wbk.Worksheets(1).Cells(6, 1).End(xlUp).Row

'Copie du bloc à partir de la ligne 2 (donc sans les en-tetes) + collage sur la dernière ligne + 1 de la feuille 1 du classeur 1
Range(Wbk.Worksheets(1).Cells(2, 1), Wbk.Worksheets(1).Cells(NbLine, NbCol)).Copy Wbk1.Worksheets(1).Cells(NbLine1 + 1, 1)

'On incrémente le nombre de lignes total de la feuille 1 du classeur 1
NbLine1 = NbLine1 + NbLine
'On ne sort pas de la boucle car il faut faire les 2 classeur
'Facultatif : On ferme le fichier
'Wbk.Close
End If
Next Wbk
End Sub
Répondre
Ajouter un commentaire
Réponse
+0
moins plus
bonjour

Si tu regardes le poste 30 tu as bien un classeur.
marc23- 22 juil. 2010 à 09:55
Bonjour,
j'ai téléchargé le fichier du poste 30 et je suis plutôt impressionné.
Par contre, je n'ai pas l'impression que c'est la dernière version de ce qui avait été proposé étant donné que les titres de colonnes se répètent à l'importation des données. Est-ce qu'il serait possible de remettre le dernier fichier en ligne? Et autre chose, ou est ce qu'on peut paramétrer le fait de vouloir compiler les données sur différentes feuilles plutôt que tout sur une seule? (bon, là j'en demande peut etre beaucoup, on parle d'un fichier crée il y a 2 ans)
Répondre
gbinforme 10929Messages postés lundi 18 octobre 2004Date d'inscription ContributeurStatut 26 avril 2015Dernière intervention - 22 juil. 2010 à 12:29
Bonjour,

Tout est possible, et le code est totalement accessible et modifiable.
Pour supprimer les titres il y a un paramètre à changer et pour changer de feuille à chaque fichier la modification est très simple mais il ne faut pas oublier que le nombre de feuilles n'est pas illimité.

Tu as 2 autres versions ici et

Si tu n'as pas ton bonheur, précises les modifications que tu veux.
Répondre
marc23- 22 juil. 2010 à 20:30
Merci pour cette réactivité. Je n'en espérais pas tant. Je vais déjà commencer à regarder ce code de plus près et je reviens alors si j'ai des modifs à faire que je ne serais pas faire (ce qui est bien possible ;) )
Répondre
JulienG- 25 avril 2012 à 16:32
Bonjour,

Serait-il possible de remettre les fichiers en ligne ? Ce serait Top !
Merci par avance !
Répondre
Ajouter un commentaire
Réponse
+0
moins plus
Compiler des fichiers ferméS dans un même répertoire:

Sub compil()
Dim X As Integer, nbFichiers As Integer, Y As Integer
Dim Tableau() As String
Dim Direction As String
Dim rsdata As ADODB.Recordset
Dim szConnect As String
Dim szSQL As String
Dim videderniereligne As String
Dim derniereligne As String
Dim U As Object
Dim feuille As String
Dim i As Integer
'Application.ScreenUpdating = False
'Application.DisplayAlerts = False

Direction = Dir(ThisWorkbook.Path & "\*.xls")
'Direction = Dir(cheminarchivelocal & "*.xls")
Cells.Select
Range("P1").Activate
Selection.ClearContents
Selection.Delete Shift:=xlUp
Do While Len(Direction) > 0
nbFichiers = nbFichiers + 1
ReDim Preserve Tableau(1 To nbFichiers)
Tableau(nbFichiers) = Direction
Direction = Dir()
Loop

If nbFichiers > 0 Then
For X = 1 To nbFichiers




'derniereligne = Worksheets("Feuil1").Range("A5").Rows.Count


If Tableau(X) <> ThisWorkbook.Name Then

'[reportdetailleAZF20070831.xls]Feuil1!$A$2

feuille$ = "zer3_PHA (4)"
'repertoire = "D:\Archivefacturedetc\reportdetaille"

szConnect = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & ThisWorkbook.Path & "\" & Tableau(X) & ";" & _
"Extended Properties=""Excel 8.0;HDR=yes; IMEX=1"";"

'"Data Source=" & ThisWorkbook.Path & "\" & Tableau(X) & ";" & _

szSQL = "SELECT * FROM [" & feuille & "$]"



Set rsdata = New ADODB.Recordset
rsdata.Open szSQL, szConnect, adOpenForwardOnly, _
adLockReadOnly, adCmdText


''' Vérifie qu'on a bien reçu des données
If Not rsdata.EOF Then

Sheets("Feuil1").Select
If Range("A1").Value = "" Then
Sheets("Feuil1").Range("A1").CopyFromRecordset rsdata

Else:
derniereligne = Worksheets("Feuil1").Range("A3").End(xlDown).Row
videderniereligne = derniereligne + 1
Sheets("Feuil1").Range("A" & videderniereligne).CopyFromRecordset rsdata
End If




End If

End If
Next
souka- 17 mai 2013 à 11:17
bonjour ,je pense que ce macro est utile pour moi ,es que vous pouvez le deposé une autre fois si vous plait ,parce qu'il m'affiche le message suivant 'lien introuvable" ,merci
Répondre
medmirgoul- 8 janv. 2014 à 17:18
merci de renouveller la jonction de la macro car je la trouve pas.
Répondre
Ajouter un commentaire
Ce document intitulé «  Réunir plusieurs fichiers EXCEL dans 1 seul  » issu de CommentCaMarche (www.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes.

Le fait d'être membre vous permet d'avoir des options supplémentaires.