Fusionner plusieurs fichiers excel de meme contenu en un seul
Résolu
Thyristhor
Messages postés
10
Date d'inscription
Statut
Membre
Dernière intervention
-
Thyristhor Messages postés 10 Date d'inscription Statut Membre Dernière intervention -
Thyristhor Messages postés 10 Date d'inscription Statut Membre Dernière intervention -
Bonjour le forum,
Je n'ai rien trouvé qui pourrait résoudre mon problème en passant par la recherche.
J'explique, 1 fichier Maitre, 12 fichiers esclaves au maximum qui sont censés alimenter le fichier maitre (1 par mois, ces fichiers change de nom selon la date à laquelle ils sont créés).
Le fichier maitre et les fichiers esclaves ont exactement la meme forme (meme colonnes et autant de lignes dans les fichiers)
Chaque ligne est un objet avec un nom unique qui lui est propre.
Dans les fichiers esclaves certaines lignes sont remplies, d'autres non. (possibilité que la meme ligne soit remplie différemment dans plusieurs fichiers esclaves, à actualiser selon le plus récent des fichiers)
J'aimerais que le fichier maitre, à son ouverture, pioche dans les différents fichiers esclaves pour mise a jour (la plus récente) des lignes objet.
j’espère m’être fait comprendre, je joint 3 fichiers exemples avec annotations pour plus de clarté, et suis dispo pour toutes info complémentaires.
http://www.cjoint.com/c/FDDmBndEUR7 Maitre
https://www.cjoint.com/c/FDDmB3BZsQ7 Esclave 1
http://www.cjoint.com/c/FDDmCJqQnb7 Esclave 2
Merci d'avance
Thyristhor
Je n'ai rien trouvé qui pourrait résoudre mon problème en passant par la recherche.
J'explique, 1 fichier Maitre, 12 fichiers esclaves au maximum qui sont censés alimenter le fichier maitre (1 par mois, ces fichiers change de nom selon la date à laquelle ils sont créés).
Le fichier maitre et les fichiers esclaves ont exactement la meme forme (meme colonnes et autant de lignes dans les fichiers)
Chaque ligne est un objet avec un nom unique qui lui est propre.
Dans les fichiers esclaves certaines lignes sont remplies, d'autres non. (possibilité que la meme ligne soit remplie différemment dans plusieurs fichiers esclaves, à actualiser selon le plus récent des fichiers)
J'aimerais que le fichier maitre, à son ouverture, pioche dans les différents fichiers esclaves pour mise a jour (la plus récente) des lignes objet.
j’espère m’être fait comprendre, je joint 3 fichiers exemples avec annotations pour plus de clarté, et suis dispo pour toutes info complémentaires.
http://www.cjoint.com/c/FDDmBndEUR7 Maitre
https://www.cjoint.com/c/FDDmB3BZsQ7 Esclave 1
http://www.cjoint.com/c/FDDmCJqQnb7 Esclave 2
Merci d'avance
Thyristhor
A voir également:
- Fusionner plusieurs fichiers excel de meme contenu en un seul
- Renommer plusieurs fichiers en même temps - Guide
- Fusionner deux cellules excel en gardant le contenu - Guide
- Liste déroulante excel - Guide
- Fusionner plusieurs feuilles excel en une seule - Guide
- Formule moyenne excel plusieurs colonnes - Guide
2 réponses
Bonjour
Une proposition, mettez le nom du chemin ou se trouve les fichiers esclaves en A2 de la feuille Liste des fichiers esclaves. Dans ce répertoire il doit y avoir le fichier maitre et les fichiers esclaves, cliquez sur le bouton.
https://www.cjoint.com/c/FDEjmER8xlw
Je dois m'absenter pour la journée, si il y a un soucis je ne répondrai que très tard ou demain.cdlt
Une proposition, mettez le nom du chemin ou se trouve les fichiers esclaves en A2 de la feuille Liste des fichiers esclaves. Dans ce répertoire il doit y avoir le fichier maitre et les fichiers esclaves, cliquez sur le bouton.
https://www.cjoint.com/c/FDEjmER8xlw
Je dois m'absenter pour la journée, si il y a un soucis je ne répondrai que très tard ou demain.cdlt
Bonjour
Finalement après avoir sorti le fichier maitre du dossier (chemin en A2) contenant les fichiers esclaves, ça a l'air de marcher.
Dans le code fourni, le fichier maitre s'appelait
Revoici le code avec les commentaires
Finalement après avoir sorti le fichier maitre du dossier (chemin en A2) contenant les fichiers esclaves, ça a l'air de marcher.
Dans le code fourni, le fichier maitre s'appelait
"Fichier-maitre.xlsm", peut-être que chez vous il s'appelle autrement dans ce cas, il faut le modifier dans le code.
Revoici le code avec les commentaires
Option Compare Text Sub RecupListeFichiersEsclaves() Application.ScreenUpdating = False Dim Chemin As String, FichEscl As String, i As Integer Range("A5:A20").ClearContents Chemin = Sheets("Liste des fichiers esclaves").[A2] & "\" FichEscl = Dir(Chemin) Lig = 5 'on démarre à la ligne 5 'tant que la liste des fichiers esclaves n'est pas vide et que le fichier n'est pas le fichier maître, alors on récupère le nom du fichier esclave. 'ensuite dans la colonne B, on crée une formule qui va extraire la date du fichier Do While FichEscl <> "" And FichEscl <> "Fichier-maitre.xlsm" Sheets("Liste des fichiers esclaves").Cells(Lig, 1) = FichEscl Sheets("Liste des fichiers esclaves").Cells(Lig, 2) = "=VALUE(MID(RC[-1],7,2) & ""/"" & MID(RC[-1],5,2) & ""/"" & LEFT(RC[-1],4))" FichEscl = Dir 'on passe au fichier suivant Lig = Lig + 1 'on de décale sur la ligne suivnate Loop 'on fait un tri par date, du plus ancien au plus récent Range("A5").Select ActiveWorkbook.Worksheets("Liste des fichiers esclaves").Sort.SortFields.Clear ActiveWorkbook.Worksheets("Liste des fichiers esclaves").Sort.SortFields.Add Key:=Range("B5:B" & Lig), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal With ActiveWorkbook.Worksheets("Liste des fichiers esclaves").Sort .SetRange Range("A4:B" & Lig) .Header = xlYes .MatchCase = False .Orientation = xlTopToBottom .SortMethod = xlPinYin .Apply End With 'on repère la dernière ligne et dernière colonne du fichier final DerLig = Sheets("Fichier maitre final").Range("A1").SpecialCells(xlCellTypeLastCell).Row DerCol = Sheets("Fichier maitre final").Range("A1").SpecialCells(xlCellTypeLastCell).Column ReDim Valeur(DerLig, DerLig, DerCol) As String 'on crée une variable "Valeur" avec les arguments suivants(Derlig pour le nombre maximum de fichiers esclaves, _ DerLig pour le nombre maxi de lignes du tableau, DerCol pour le nombre de colonnes maxi du tableau) 'pour chaque fichier esclave For i = 5 To Lig - 1 'on boucle de la ligne 5 jusqu'à la dernière ligne pour ouvrir chaque fichier esclave Workbooks.Open Filename:=Chemin & Sheets("Liste des fichiers esclaves").Cells(i, 1) For l = 2 To DerLig 'de la ligne 2 du tableau et jusqu'à la dernière, on relève toutes les valeurs For c = 2 To DerCol Valeur(i, l, c) = Cells(l, c) Next c Next l ActiveWorkbook.Close 'on ferme le fichier esclave Next i ' on passe au fichier suivant si il existe, sinon on passe à la ligne suivante 'ici, on fait l'opération inverse, on recopie toutes les valeurs enregistrées précédemment et on les restituent dans le tableau final For i = 5 To Lig For l = 2 To DerLig For c = 2 To DerCol ' on dépose la nouvelle valeur Sheets("Fichier maitre final").Cells(l, c) = Valeur(i, l, c) Next c 'on passe à la colonne suivante Next l 'on passe à la ligne suivante Next i 'on passe au fichier esclave suivant End Sub Cdlt
Merci de ta proposition, j'ai testé celle ci après avoir tout mis dans le meme dossier et quand je clique sur "récup données des fichiers esclaves", Excel tente de rouvrir le fichier maitre, si je lui confirme l'ouverture excel plante et redémarre, si je confirme la non-ouverture, j'ai cette ligne :
en erreur dans le débogeur.
je n'ai pas pu aller plus loin que ca dans le test.
Est il possible que tu annote le code de commentaires afin que je puisse réutiliser la macro pour d'autres configurations ( j'ai 9 fichier maitre pour 9*12 fichiers esclaves à gérer )
Cordialement
J'aurais toutefois besoin d'annotations sur le code pour reproduire la macro dans une autre config de fichier
merci d'avance
Thyristhor