POWERQUERY :: Renommage dynamique de colonnes - sélection de colonnes - données externes au classeur Excel

oguruma

XLDnaute Occasionnel
En préambule ça complète ceci : https://excel-downloads.com/threads...onnes-dune-table-plusieurs-methodes.20080797/

Ce post est une variante de celui-ci :

POWERQUERY :: Renommage statique de colonnes - sélection de colonnes - données internes au classeur Excel​


En effet les données sont à l'extérieur du classeur. Donc très pratique, on va cherche les données à l'extérieur, on les importe et on les retravaille.

On passe donc par une requête intermédiaire qui va aller collecter les données externes.

1708286919942.png


Requête TbData, bien entendu elle s'appuie sur les tables de paramètres chargées.

PowerQuery:
let

   //---------------------------------------------------------------------------------------
   // On récupère le chemin d'accès aux données
   //---------------------------------------------------------------------------------------
    TbDataPath=try fnGetParameter(TB_PARAMS_GENRAUX,"TB_DATA_PATH")
                    otherwise fnGetParameter("TB_PARAMS_GENRAUX","TB_DATA_PATH"),

   //---------------------------------------------------------------------------------------
   // Type de source ? Table ? Feuille ?
   //---------------------------------------------------------------------------------------
    TbKind=try fnGetParameter(TB_PARAMS_GENRAUX,"TB_DATA_KIND")
                    otherwise fnGetParameter("TB_PARAMS_GENRAUX","TB_DATA_KIND"),

   //---------------------------------------------------------------------------------------
   // Nom de l'objet
   //---------------------------------------------------------------------------------------
    TbItem=try fnGetParameter(TB_PARAMS_GENRAUX,"TB_DATA_ITEM")
                    otherwise fnGetParameter("TB_PARAMS_GENRAUX","TB_DATA_ITEM"),

   //---------------------------------------------------------------------------------------
   // Paramètre pour promote des titres
   //---------------------------------------------------------------------------------------
    IsPromote=try fnGetParameter(TB_PARAMS_GENRAUX,"PROMOTE")
                    otherwise fnGetParameter("TB_PARAMS_GENRAUX","PROMOTE"),


   //---------------------------------------------------------------------------------------
   // Chargement des données
   //---------------------------------------------------------------------------------------
    Source = Excel.Workbook(File.Contents(TbDataPath), null, true),

   //---------------------------------------------------------------------------------------
   // Et si c'est une feuille on promote les titres de colonnes
   //---------------------------------------------------------------------------------------
    ToTable = Source{[Item=TbItem,Kind=TbKind]}[Data],

    ToPromote = if TbKind ="Table" then
                   ToTable
                   else if IsPromote = "OUI" then
                           Table.PromoteHeaders(ToTable, [PromoteAllScalars=true])
                           else ToTable
in
    ToPromote


Puis une fois la table externe chargée on peut la retravailler via une requête PIVOT

PowerQuery:
let
   //---------------------------------------------------------------------------------------
   // Requête pivot pour chager les données à traiter
   //---------------------------------------------------------------------------------------

   //---------------------------------------------------------------------------------------
   // Lecture des paramètres
   // La table est soit dans l'environnement PowerQuery soit dans une table Excel (TS)
   //---------------------------------------------------------------------------------------
       
   //---------------------------------------------------------------------------------------
   // Chargement des données - chemin lu à partir de la table des paramètres
   //---------------------------------------------------------------------------------------
   Source = try Excel.CurrentWorkbook(){[Name=TbData]}[Content]
              otherwise try TbData // si la table n'existe pas on renvoie une vide
                            otherwise #table({},{}),

   //---------------------------------------------------------------------------------------
   // Quelles sont les colonnes à conserver ?
   // MissingField.Ignore : pour éviter que la requête plante si les colonnes sont inconnues
   //---------------------------------------------------------------------------------------
   SourceKeep = try Table.SelectColumns(Source,ListSelectColumns,MissingField.Ignore)
                   otherwise #table({},{}),

   //---------------------------------------------------------------------------------------
   // Renommage des colonnes
   //---------------------------------------------------------------------------------------
   ToTableRename = try Table.RenameColumns(SourceKeep,ListRenameColumns,MissingField.Ignore)
                     otherwise #table({},{})

in
    ToTableRename


Pour plus d'explications voir les fichiers joints
- Challenge : jouer avec ces paramètres pour construire ces fonctions
1708287180156.png

Les codes sources ont été livrés dans d'autres Post ;)
Pour le paramétrage complémentaire nécessaire, passer par un fichier au format "win.ini" afin de mettre en pratique le post mettant en oeuvre ces types de fichiers


Les compléments et autres fonctions se trouvent ici : https://excel-downloads.com/threads...chiers-csv-ou-des-fichiers-excel-v2.20081238/
  • La gestion « à la volée » des types de colonnes à l’issue de l’importation
 

Pièces jointes

  • $__pqRenameColumnsNamesDynam_V2.zip
    318.5 KB · Affichages: 2
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
312 211
Messages
2 086 299
Membres
103 172
dernier inscrit
Aurelyan