oguruma
XLDnaute Impliqué
Bonjour le forum,
ce post fait suite à
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
L'environnement PowerQuery est le suivant
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.
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
L'environnement PowerQuery est le suivant
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: