Macro permettant recopie de plusieurs Excel

Bonjour,

Je rencontre un problème pour composer une macro qui me paraissait simple mais qui ne l'est pas finalement pour moi…

Je travaille à partir de fichiers Excel isolé par "affaire client". Ces fichiers Excel ont la même trame/présentation et des formats de données identiques.

--> À présent, il me manque un niveau de consolidation me permettant de faire des TCD à un niveau global (= soit 40 fichiers Excel compilés).

Pour cela, je souhaite mettre au point une macro me permettant de recopier dans un Excel consolidé, chaque fichier Excel que j'ai par affaire. L'idée est de copier-coller à la suite sur mon fichier Excel consolidé pour me constituer une base de données globale.

La limite que j'identifie est le nombre de lignes différent d'un fichier Excel à un autre. Pour y remédier, je pensais faire un compteur de ligne remplies sur chacun de mes fichiers Excel pour que la macro sachent de combien de lignes décalés son copier-coller. Et là je cale, je ne sais pas quel morceau de code me permettrait d'y arriver...

Vous trouverez ci-joint un exemple de mon besoin. 2 fichiers "1" et "2" qui sont mes fichiers de travail et un fichier "Conso" dans lequel je souhaite voir copier-coller à la suite les données des fichiers 1 et 2.

41.xlsx (8.73 Ko)
22.xlsx (8.70 Ko)
4conso.xlsx (9.04 Ko)

Je vous remercie par avance pour votre aide et lecture ! :)

Anthony

Bonjour,

La limite que j'identifie est le nombre de lignes différent d'un fichier Excel à un autre.

Anthony

La méthode la plus simple est d'identifier la dernière ligne avec

derL = range("A" & rows.count).end(xlup).row

tu peux utiliser la macro compilation de cet outil https://www.excel-pratique.com/fr/telechargements/utilitaires/dispatcher-compiler-excel-no466

proposition

Option Explicit

Sub collecter()
Dim wbk1 As Workbook, wbk2 As Workbook, ws1 As Worksheet
Dim MonRepertoire, Repertoire As FileDialog, monFichier$, derL%

    Set Repertoire = Application.FileDialog(msoFileDialogFolderPicker)
    Application.FileDialog(msoFileDialogFolderPicker).Title = "Choix du répertoire de stockage des fichiers générés"
    Repertoire.Show
    If Repertoire.SelectedItems.Count = 0 Then Exit Sub
    MonRepertoire = Repertoire.SelectedItems(1) & "\"

    Set wbk1 = ThisWorkbook
    Set ws1 = wbk1.ActiveSheet
    Cells(Rows.Count, 1).End(xlUp).CurrentRegion.Offset(1, 0).ClearContents
    monFichier = Dir(MonRepertoire & "*.xlsx")

    Do While monFichier <> ""
        ws1.Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).Select
        derL = ws1.Cells(Rows.Count, 1).End(xlUp).Row + 1
        Set wbk2 = Workbooks.Open(MonRepertoire & monFichier)
        wbk2.ActiveSheet.Cells(Rows.Count, 1).End(xlUp).CurrentRegion.Cells.Copy
        ws1.Paste
        Application.DisplayAlerts = False
            wbk2.Close False
        Application.DisplayAlerts = True
        Rows(derL).Delete Shift:=xlUp
        monFichier = Dir
    Loop

    Cells(Rows.Count, 1).End(xlUp).CurrentRegion.Cells(1, 1).Select

End Sub
5compil.xlsm (17.91 Ko)

Bonjour Steelson,

Je vous remercie pour le code ! Il marche bien et correspond exactement à mon besoin !

Cependant, je n'arrive pas à lui spécifier un onglet de fichier excel... J'ai tenté des fonctions Sheets() et Sheets().name mais je bloque...

--> Dans l'application que je veux en faire, les fichiers à consolider ont 3 onglets. L'onglet "base de donnée" que je veux systématiquement copier s'appelle Pivot, il s'agit de l'onglet 2 de ces fichiers.

Existe t'il un moyen de le spécifier dans la macro pour que celle-ci n'aille copier que ces onglets "Pivots" ?

(je pensais à une modif. dans ces deux lignes ci-dessous)

Set wbk1 = ThisWorkbook

Set ws1 = wbk1.ActiveSheet

Merci encore beaucoup... !

Dans ton fichier conso, il n'y avait qu'un seul onglet !

Si tu veux en spécifier un sur la cible :

    Set wbk1 = ThisWorkbook
    Set ws1 = wbk1.Sheets("_______ici_le_om_de_l_onglet_cible________")

Si tu veux en spécifier un sur la source

wbk2.Sheets("_______ici_le_om_de_l_onglet_source________").Cells(Rows.Count, 1).End(xlUp).CurrentRegion.Cells.Copy

Bonjour Steelson,

Je te remercie une nouvelle fois ! Je viens de réussir à faire marcher ton code sur mes fichiers sources. J'ai réussi de suite sur des fichiers exemples comme sur mon premier post. Mais quand il a fallu le mettre sur mes vrais fichiers sources, j'ai galéré car la macro ne fonctionnait pas (rien ne se passait). Le problème venait du fait que mes données dans mes fichiers sources étaient inscrites dans un "tableau".

Il a fallu convertir ses tableaux en plages normales et oh miracle, ça fonctionne... :)

Cependant, certains contiennent des filtres car les gens l'utilisent aux cours de la journée et la macro ne recopie que les cellules affichées... Y-a-t'il un moyen pour la macro de "défiltrer" à chaque ouverture de fichier dans l'onglet "Pivot" ?

En manuel, un "Trier et filtrer" puis "Effacer" suffisent... Mes filtres sont tous en ligne 2, colonne A à BL.

Je te et vous remercie à nouveau !

Le problème venait du fait que mes données dans mes fichiers sources étaient inscrites dans un "tableau".

Il a fallu convertir ses tableaux en plages normales et oh miracle, ça fonctionne... :)

Cependant, certains contiennent des filtres car les gens l'utilisent aux cours de la journée et la macro ne recopie que les cellules affichées... Y-a-t'il un moyen pour la macro de "défiltrer" à chaque ouverture de fichier dans l'onglet "Pivot" ?

Remets 2 fichiers source bien représentatifs pour adapter la macro à la fois aux tableaux et au filtre.

Bonjour Steelson,

Voici les deux fichiers sources "à compiler", ils sont fidèles à ceux tenus en réalité.

La problématique est toujours la même comme tu l'as identifié, mon fichier source "1" contient une colonne filtré dont les données masquées ne seront pas copier/coller sur le fichier Compil...

Je m'excuse du retard conséquent de ma réponse, je fais ça en plus de mon job de comptable et je me suis retrouvé sous la vague ces 15 derniers jours avec la clôture annuelle... Je suis maintenant dispo et pleinement investi. Merci encore pour ton aide précieuse !

5compil.xlsm (30.16 Ko)

J'ai ajouté

        If wbk2.Sheets("Pivot").FilterMode Then wbk2.Sheets("Pivot").ShowAllData
6compil.xlsm (21.54 Ko)
Rechercher des sujets similaires à "macro permettant recopie"