POWERQUERY :: Combinaison de tableaux structurés Excel pouvant être issus de répertoires différents avec des noms de feuilles différentes

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

oguruma

XLDnaute Impliqué
Bonjour le forum,
ce post fait suite à

Combinaison de tableaux structurés Excel pouvant être issus de répertoires différents avec des noms de tableaux structurés différents


Il fonctionne de la même manière en ce qui concerne son paramétrage.
La différence c'est que l'on adresse cette fois des noms de feuilles en lieu et place des noms de tables
1761822469783.png


L'environnement PowerQuery est le suivant
1761822516269.png


L'existence d'une feuille Excel est vérifié par la fonction fnIsExistsSheet

Voici le code. Vous verrez qu'il y a très peu de différence.

Une prochaine version sera publiée permettant de fusionner des fichiers Excel soit avec des tableaux structurés soit avec des feuilles.

PowerQuery:
let

    //******************************************************************************
    //                      FONCTIONS SECTION
    //******************************************************************************

    //******************************************************************************
    // Combinaison des fichiers
    //******************************************************************************
    COMBINE = () as any =>
            let
                ListCombinedFiles=List.Accumulate(
                    TBL_COMBINE_TO_RECORDS, // Liste des fichiers Excel à traiter
                    #table({},{}),          // On initialise l'accumulateur avec une table vide pour démarrer la fusion avec le 1er fichier Excel
                    (state,current)=>       // current = fichier Excel en cours de traitement
                        let
                            CurrentFile=Record.Field(current,LIST_COLUMNS_TBL_COMBINE{0}),  // Nom du fichier à traiter
                            IsFileExists=fnFileExists(CurrentFile),                         // On vérifie l'existance du fichier
                            CurrentTag=Record.Field(current,LIST_COLUMNS_TBL_COMBINE{1}),   // Nom de l'étiquette permettant de différencier les fichiers
                            CurrentItemTmp=Record.Field(current,LIST_COLUMNS_TBL_COMBINE{2}),  // Nom du tableau qui sera fusionné
                            CurrentItem=if CurrentItemTmp is null then "<NULL___ITEM_>" else CurrentItemTmp, // Mon met volontairement un item inconnu pour ne pas planter ainsi on passera au suivant
                            isExistsIem = fnIsExistsSheet(CurrentFile,CurrentItem),         // On vérifie si le tableau existe dans le fichier en cours de traitement                  
                            TableCombine=if IsFileExists then if isExistsIem                // si toutes les connditions sont réunnies on fusionne les données
                                            then
                                                let
                                                    // On récupère le fichier Excel comportant le tableau à fusionner
                                                    wbExcelTmp=try Excel.Workbook(File.Contents(CurrentFile), null, true){[Item=CurrentItem,Kind="Sheet"]}[Data] otherwise state,
                                                    // 1ère ligne = titre des colonnes à voir les type des fichiers
                                                    wbExcel=if STR_PROMOTE ="OUI" then Table.PromoteHeaders(wbExcelTmp, [PromoteAllScalars=true]) else wbExcelTmp,
                                                    // on ajoute la colonne étiquette qui différencie les fichiers importés
                                                    wbAddCol=Table.AddColumn(wbExcel,LIST_COLUMNS_TBL_COMBINE{1}, each CurrentTag),
                                                    // on procède à la fusion
                                                    wbCombine=Table.Combine({state, wbAddCol})
                                                in
                                                   wbCombine
                                            else state // Si Item n'existe pas on renvoie l'état de l'accumulateur qui permet de passer au fichier suivant sans plantage
                                         else state    // Si le fichier n'existe pas on renvoie l'état de l'accumulateur qui permet de passer au fichier suivant sans planatge
                        in
                            TableCombine               // Table finale comportant tous les tableaux fusionnés
                )
            in
                ListCombinedFiles,                     // La fonction renvoie le tableau fusionné

    //******************************************************************************
    // Déplacement de l'étiquette à la 1ère colonne
    //******************************************************************************
    MOVE_TAG_COLUM = () as any =>
            let
                LstColumns=Table.ColumnNames(TBL_DATA_COMBINE),
                NbColumns=List.Count(LstColumns) - 1,
                L1={LIST_COLUMNS_TBL_COMBINE{1}},
                L2=List.FirstN(LstColumns,NbColumns),
                LstCombine=List.Combine({L1,L2}),
                TblReorder=Table.ReorderColumns(TBL_DATA_COMBINE,LstCombine)
            in
                TblReorder,
               
    //******************************************************************************
    //                      PRINCIPALE SECTION
    //******************************************************************************

    //******************************************************************************
    // Identification des paramètres
    //******************************************************************************
    STR_PROMOTE=Text.Upper(fnGetParameter("TB_PARAMS", "PROMOTE")),
    STR_TBL_COMBINE=fnGetParameter("TB_PARAMS", "TABLE_LIST_COMBINE"),
    STR_TAG_PREM=fnGetParameter("TB_PARAMS", "TAG_PREMIERE_COLONNE"),  

    //******************************************************************************
    // On prépare les éléments pour la fusion
    //******************************************************************************
    TBL_COMBINE = Excel.CurrentWorkbook(){[Name=STR_TBL_COMBINE]}[Content],
    LIST_COLUMNS_TBL_COMBINE=Table.ColumnNames(TBL_COMBINE),
    STR_NOM_COLONNE_COMBINE=LIST_COLUMNS_TBL_COMBINE{0},
    TBL_COMBINE_TO_RECORDS=Table.ToRecords(TBL_COMBINE),

    //******************************************************************************
    // Fusion des fichiers
    //******************************************************************************
    TBL_DATA_COMBINE=COMBINE(),

    //******************************************************************************
    // Déplacement de la colonne étiquette
    //******************************************************************************
    TBL_DATA_FINALE=if STR_TAG_PREM = "OUI" or STR_TAG_PREM is null then MOVE_TAG_COLUM() else TBL_DATA_COMBINE

in
    TBL_DATA_FINALE
 

Pièces jointes

Dernière édition:
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Retour