Fusionner plusieurs fichiers excel de meme contenu en un seul

Résolu/Fermé
Thyristhor Messages postés 10 Date d'inscription mercredi 13 avril 2016 Statut Membre Dernière intervention 2 mai 2016 - 29 avril 2016 à 14:33
Thyristhor Messages postés 10 Date d'inscription mercredi 13 avril 2016 Statut Membre Dernière intervention 2 mai 2016 - 2 mai 2016 à 11:46
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
A voir également:

2 réponses

Frenchie83 Messages postés 2240 Date d'inscription lundi 6 mai 2013 Statut Membre Dernière intervention 11 août 2023 337
30 avril 2016 à 11:16
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
0
Thyristhor Messages postés 10 Date d'inscription mercredi 13 avril 2016 Statut Membre Dernière intervention 2 mai 2016
2 mai 2016 à 08:56
Bonjour Frenchie,

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 :
Workbooks.Open Filename:=Chemin & Sheets("Liste des fichiers esclaves").Cells(i, 1)

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
0
Thyristhor Messages postés 10 Date d'inscription mercredi 13 avril 2016 Statut Membre Dernière intervention 2 mai 2016 > Thyristhor Messages postés 10 Date d'inscription mercredi 13 avril 2016 Statut Membre Dernière intervention 2 mai 2016
2 mai 2016 à 09:01
Après avoir refusé l'ouverture du fichier maitre, j'obtiens dans la feuille liste, la liste des fichiers présents dans le dossier y compris le fichier maitre, mais le tableau de la feuille "fichier maitre initial et/ou final" ne se rempli pas.
0
Thyristhor Messages postés 10 Date d'inscription mercredi 13 avril 2016 Statut Membre Dernière intervention 2 mai 2016
2 mai 2016 à 09:13
Finalement après avoir sorti le fichier maitre du dossier (chemin en A2) contenant les fichiers esclaves, ça a l'air de marcher.
J'aurais toutefois besoin d'annotations sur le code pour reproduire la macro dans une autre config de fichier
merci d'avance
Thyristhor
0
Frenchie83 Messages postés 2240 Date d'inscription lundi 6 mai 2013 Statut Membre Dernière intervention 11 août 2023 337
2 mai 2016 à 10:39
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
"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
0
Thyristhor Messages postés 10 Date d'inscription mercredi 13 avril 2016 Statut Membre Dernière intervention 2 mai 2016
2 mai 2016 à 11:46
Nickel merci beaucoup,
Effectivement j'ai changé le nom du fichier maitre
je jette un oeil et reviens par ici pour passer en résolu si c'est le cas.

Merci Frenchie
0