Cet article va vous expliquer comment transmettre une variable à une requête Power Query.
Note importante avant de commencer
Le processus décrit ci-dessous s'appuie sur les dernières évolutions apportées à Power Query. Il est nécessaire maintenant de modifier les niveaux de confidentialités
Cette exigence n'était pas nécessaire il y a encore quelques mois. Donc si vous travaillez avec une requête qui a été créée il y a plus d'un an (avant 2020), il y a de fortes chances que vous deviez adapter les niveaux de confidentialités.
Importer un fichier csv
Prenons le cas très simple d'importer un fichier csv dans Excel en utilisant Power Query.

Remplacer le nom du fichier par une variable
L'idée ici c'est de rendre dynamique l'écriture pour se connecter au fichier source.



De cette façon, nous pouvons remplacer le nom du fichier par une variable pour facilement charger l'un des fichiers présents dans le même répertoire.



Etape 1 : Créer un tableau avec le nom de la variable
Le seul moyen pour Power Query de "lire" le contenu d'une cellule, c'est d'intégrer cette cellule dans un tableau.
Donc nous construisons un tableau avec une seule cellule contenant notre variable. Sans oublier l'entête de la colonne et de donner un nom caractéristique à notre tableau.



Etape 2 : Charger le tableau dans Power Query
Ensuite, il faut charger cette donnée dans Power Query en cliquant simplement sur le menu Données > A partir de Tableau ou d'une Plage



Etape 3 : Transformer la requête en valeur
A ce stade, la requête est chargée dans Power Query.



Mais pour pouvoir utiliser le contenu de la cellule comme variable, il faut appliquer une transformation
- Faîtes un clic-droit dans la cellule
- Choisissez l'option Drill-Down. Le terme n'a pas été traduit de l'anglais car "perçage" n'est pas terrible comme dénomination 😉



Cette action va convertir le contenu de la cellule en valeur. On peut d'ailleurs voir que l'icône dans le volet des requêtes a été transformée. L'icône présente le type de données de la cellule.



Dans ce cas de figure, le nom de la variable c'est tblFichier (le nom de la requête) et son contenu c'est la valeur dans la cellule.
Etape 4 : Utiliser la variable dans la source
Maintenant, nous allons remplacer le nom du fichier dans l'étape d'importation en concaténant le chemin et la variable avec le symbole &



Le problème c'est qu'après validation, Power Query nous retourne une erreur assez incompréhensible Formula.Firewall : Requête .... 😱😱😱😱😱
Etape 5 : Changer les paramètres de confidentialité.
En fait, pour permettre à Power Query d'interpréter le contenu de la variable, il faut lever les contrôles de confidentialité
- Aller sur le menu Fichier
- Puis Options et paramètres
- Enfin Options de requête



- Ensuite, il vous faut ouvrir le menu Classeur Actif > Confidentialité
- Puis sélectionner l'option Ignorer les niveaux de confidentialité et potentiellement améliorer les performances



Maintenant, en rafraîchissant votre requête, la variable est interprétée comme source de vos données 😀👍



Si vous voulez en savoir plus sur les raisons d'appliquer des niveaux de confidentialités à vos requêtes, je vous renvoie à cette vidéo d'explications présentée par Chris Webb (Senior Program Manager chez Microsoft).
Etape 6 : Changer le nom du fichier dans la feuille de calcul
Maintenant, il vous suffit de changer le nom du fichier à charger et de rafraîchir la requête (Données > Actualiser)



Instantanément, un nouveau fichier est chargé dans votre classeur 😎



24/08/2022 @ 12:54
Bonjour Frédéric, merci pour cette démonstration !
J'ai un problème avec mes requêtes, elles n'importent les chiffres dont j'ai besoin que s'il s'agit de valeur, s'ils sont issus d'une formule, elles m'importent "0". Une solution ?
Merci d'avance.
21/09/2021 @ 13:46
Bonjour
Merci pour l'information, comme Patrick, j'utilise les cellules nommées,
car dans la mise en page de la configuration je trouve que cela fait plus propre d'avoir le libellé avec la valeur sur le côté que le mode tableau ... & pr le reste de la procédure ça ne change pas grand chose
mais je bloquait à l'étape d'après : quand je sélectionnais le "Drill-down", il me transformait le champ au format "liste" même si avant j'avais bien converti la colonne en "texte" ...
et c'est avec votre capture écran que j'ai vu que le menu où apparaît le "drill-down" était sur la cellule et non sur l'entête ...
& là magie, il transforme bien la requête en texte !
21/09/2021 @ 14:18
TOP
31/08/2021 @ 18:36
Bonjour,
Je commence à m'autoformer sur ce sujet.
Je n'arrive pas à reproduire votre exemple, pourtant simple.
Les paramètres de confidentialité sont modifiés, pas d'erreur de ce coté là.
Expression.Error : Désolé... Nous n'avons pas pu appliquer l'opérateur & aux types Text et Table.
Détails :
Operator=&
Left=D:\.........\.....\Factures\
Right=[Table]
Pourriez-vous me guider, svp.
Cordialement
05/09/2021 @ 10:22
Heeeeuuuu, là je ne peux rien faire. Il faut voir le contexte du classeur
02/04/2021 @ 16:37
Bonjour,
moi j'utilise une cellule nommée avec le chemin et nom du fichier que je récupère comme source (ici Fic_Preco) :
Fichier =Excel.CurrentWorkbook(){[Name="Fic_Preco"]}[Content][Column1]{0},
Source = Excel.Workbook(File.Contents(Fichier), null, true),
Excel1 = Source{[Name="Excel"]}[Data],
n'est-ce pas plus simple ?
03/04/2021 @ 10:56
Oui, c'est une très bonne idée aussi comme cela. Il reste à adapter le code car tel quel, il ne fonctionne pas. Mais l'article illustre surtout le problème lié à la sécurité des données et le moyen de contourner le problème.
01/04/2022 @ 17:47
Bonjour,
Merci beaucoup.
Petite question : Personnellement je souhaiterais demander à l'utilisateur le fichier qu'il souhaite charger sans renseigner la cellule dans un tableau car le fichier peut changer de nom à chaque instant.
Je crois qu'il faut mettre un bout de code avant le Let mais j'avoue ne pas trouver la solution.
POurriez-vous m'aider ?
02/04/2022 @ 08:59
Impossible de vous répondre sans voir le projet. Tellement de situation impact un projet Power Query que je ne peux y répondre ici
25/03/2021 @ 08:47
Merci beaucoup, cela va me faire gagner beaucoup de temps et de place.