Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

POWERQUERY :: Passage de paramètres & récupération valeurs de cellules

oguruma

XLDnaute Occasionnel
Bonjour, cela fait un peu suite à ce post : https://excel-downloads.com/threads/excel-powerquery-passage-de-parametres.20076794/ où il est démontré comment passer des paramètres à une requête PowerQuery.
Ce post démontre d'autres manières de récupérer des valeurs d'une feuille de calculs.

Bien que le post mis en lien met en oeuvre l'utilisation d'un tableau structuré (structure très recommandée sous Excel) on peut également passer par des noms de champs ou des plages nommées.

Exemple de valeurs paramètres



Source : nom de champ
PowerQuery attribue par défaut un nom de colonne Column1 au nom de champ Dossier. {0} indice qui correspond à la seule et unique ligne du champ.
A noter que {0} = ligne 1, {0} ligne 2 ==> voir la gestion des listes.
PowerQuery:
let
    Source = Excel.CurrentWorkbook(){[Name="Dossier"]}[Content]{0}[Column1]
in
    Source


Autre exemple
PowerQuery:
let
    Source = Excel.CurrentWorkbook(){[Name="Fichier"]}[Content]{0}[Column1]
in
    Source


Source : plage de cellule
PowerQuery:
let
    Source = Excel.CurrentWorkbook(){[Name="PARAMETRES"]}[Content]{1}[Column1]
in
    Source



PowerQuery:
let
    Source = Excel.CurrentWorkbook(){[Name="PARAMETRES"]}[Content]{1}[Column2]
in
    Source



PowerQuery:
let
    Source = Excel.CurrentWorkbook(){[Name="PARAMETRES"]}[Content]{0}[Column2]
in
    Source



PowerQuery:
let
    Source = Excel.CurrentWorkbook(){[Name="PARAMETRES"]}[Content]{0}[Column1]
in
    Source



On peut aussi en faire une fonction comme celle-ci avec une recherche par mot clef sur la Column1

PowerQuery:
(pParams as text, pName as text) =>
 let
        Source = Excel.CurrentWorkbook(){[Name=pParams]}[Content],
        RowsParams = Table.SelectRows(Source, each ([Column1] = pName)),
        value = try RowsParams{0}[Column2] otherwise null
in
        value




ou par son index
PowerQuery:
(pParams as text, pIndex as number) =>
 let
        Source = Excel.CurrentWorkbook(){[Name=pParams]}[Content],     
        value = try Source{pIndex}[Column2] otherwise null
in
        value

On peut également simuler une liste qui ressemble de très près à une plage sur une colonne
PowerQuery:
(pList as text, pElem as number) =>
 let
        value = try Excel.CurrentWorkbook(){[Name=pList]}[Content]{pElem - 1}[Column1] otherwise null
in
        value

PowerQuery:
let
    Source = try fnGetElementList("LISTE",1) otherwise null
in
    Source



et enfin une autre manière en passant par tableau structuré transposé en colonne (pratique si peu de paramètres)

Ce tableau


Devient sous PowerQuery


PowerQuery:
let
    Source = Excel.CurrentWorkbook(){[Name="TbParams"]}[Content],
    #"Transposed Table" = Table.Transpose(Source),
    #"En-têtes promus" = Table.PromoteHeaders(#"Transposed Table", [PromoteAllScalars=true]),
    #"Type modifié" = Table.TransformColumnTypes(#"En-têtes promus",{{"Param_1", type text}, {"Param_2", type text}, {"Param_3", type text}, {"Param_4", type text}, {"Param_5", type text}})
in
    #"Type modifié"


PowerQuery:
let
    Source = T_PARAMS[Param_1]{0}
in
    Source
 

Pièces jointes

  • pqToolsTips_v0.006.xlsx
    35.6 KB · Affichages: 4
Dernière édition:

Discussions similaires

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…