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
1704725660798.png



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
1704726253772.png


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

1704726468740.png


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

1704726539585.png


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

1704726601525.png


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

1704726658017.png


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


1704726739291.png


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

1704727020007.png


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

Ce tableau
1704727168408.png


Devient sous PowerQuery
1704727347336.png

1704727194487.png

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: 6
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
314 562
Messages
2 110 728
Membres
110 908
dernier inscrit
François19