Requête Power Query dépendant d'une cellule
Bonsoir à tous,
1ère question :
J'ai récemment fait une requête Power Query qui s'applique à tout un répertoire "2025" (appelons-la requête principale), je me demandais si je pouvais rendre ça dynamique c'est-à-dire de modifier cette requête principale pour qu'elle s'applique aussi bien à des répertoires nommés "2024", "2026" (bien entendu tous les fichiers dans ces répertoires auront le même schéma).
L'intérêt étant que pour l'année 2026 il n'y aura pas à modifier cette requête principale.
L'idée que j'ai trouvée serait dans le classeur de mettre en cellule A1 le nom du répertoire (l'année 2025, 2026 ...) et de faire une seconde requête avec un drill-down qui irait prendre cette valeur et celle-ci serait utilisée comme variable dans la requête principale.
Je voulais votre avis sur cette méthode, peut-être qu'il y une méthode plus propre en une seule requête ou bien que Power Query ne doit pas fonctionner comme cela.
2ème question :
Je me demandais si Power Query était recommandé si l'on avait simplement des valeurs de cellules Excel à recopier de plusieurs classeurs Excel vers un classeur récapitulatif mais sans faire aucune opérations sur ces valeurs, seulement les recopier.
Je vais avoir besoin de faire ce travail et que ce soit automatisé, je pensais faire simplement des références externes mais il faut que tous les fichiers sources soient ouverts ce qui m'embête un peu.
Merci de votre aide, à bientôt.
Hello,
Question 1 : C’est la bonne méthode, tu définis ta cellule comme une plage nommée. Ensuite tu vas taper sur cette plage nommée avec PowerQuery. Et tu modifies l’étape source de ta requête principale en conséquence
Question 2 : pour recopier il faudrait plutôt du VBA mais avec des exemples de ce que tu veux ça serait plus simple. Powerquery est également adapté pour aller chercher ces valeurs dans les différents fichiers surtout si le format est toujours le même
@+
Bonsoir à tous,
Merci pour votre réponse, pour la question 2 alors peut-être que je dois décomposer mon problème, du VBA pour piocher mes valeurs dans différents fichiers puis du Power Query si j'ai vraiment de l'agrégation massive à faire.
Pour la question 1, j'ai fait quelque chose qui semble marcher mais je ne sais pas si c'est bien fait.
J'ai simplifié le problème, je dispose de cette architecture :
Dossier parent/
├── recap.xlsx
├── 2024/
└── 2025/
Je travaille sur le fichier "recap.xlsx" avec en cellule B1 la valeur 2024 ou bien 2025, puis dans chacun des répertoires 2024 et 2025, j'ai créé 2 fichiers Excel contenant chacun une seule valeur dans la cellule B2 et je fais une requête qui me renvoie un tableau avec les 2 valeurs piochées dans les fichiers du répertoire 2024 ou 2025 (selon la valeur B1 de recap.xlsx).
Voici mon code M :
En fait j'ai fait l'agrégation avec l'interface Power Query, j'ai seulement ajouté les 5 premières lignes de code pour que le répertoire soit choisi en fonction de la valeur de la cellule B1.
let
sourceValue = Excel.CurrentWorkbook(){[Name="folderName"]}[Content],
folderName = Number.ToText(sourceValue{0}[Column1]),
path = "C:\Users\Utilisateur\Documents\Excel\Power Query\PWQ_Depending_On_Cell_Value\",
folderPath = path & folderName,
Source = Folder.Files(folderPath),
#"Fichiers masqués filtrés1" = Table.SelectRows(Source, each [Attributes]?[Hidden]? <> true),
#"Appeler une fonction personnalisée1" = Table.AddColumn(#"Fichiers masqués filtrés1", "Transformer le fichier", each #"Transformer le fichier"([Content])),
#"Colonnes renommées1" = Table.RenameColumns(#"Appeler une fonction personnalisée1", {"Name", "Source.Name"}),
#"Autres colonnes supprimées1" = Table.SelectColumns(#"Colonnes renommées1", {"Source.Name", "Transformer le fichier"}),
#"Colonne de tables développée1" = Table.ExpandTableColumn(#"Autres colonnes supprimées1", "Transformer le fichier", Table.ColumnNames(#"Transformer le fichier"(#"Exemple de fichier"))),
#"Colonnes supprimées" = Table.RemoveColumns(#"Colonne de tables développée1",{"Source.Name"}),
#"Colonnes renommées" = Table.RenameColumns(#"Colonnes supprimées",{{"Column1", "Values"}})
in
#"Colonnes renommées"Je veux bien votre avis car je débute avec Power Query et ce n'est peut-être pas très efficace, surtout qu'au boulot bien sûr il y aura des traitements plus importants à faire une fois le répertoire bien choisi.
Et autre chose, dans mon fichier je me retrouve avec 5 ou 6 requêtes qui (à mon sens) ne servent à rien, je ne comprends pas comment je les ai créées ...
Merci à vous pour vos conseils.
Hello,
C'est lié à l'assistant qui parfois crée des requêtes complémentaires quand tu navigues dans la requête. C'est pas hyper propre.
Un exemple pour variabiliser le dossier
@+
Bonsoir et merci de votre réponse,
ça ne fonctionne pas chez moi j'ai ce message d'erreur :
Mais ce n'est pas grave j'ai compris votre code, et je vois que vous faites un tableau pour récupérer les valeurs,
et ensuite vous faites une "vraie" requête qui utilise les valeurs du tableau précédent pour aller chercher les données dans le bon répertoire.
Super ça me parait plus propre que ce que j'avais fait.
_____________________________________
Finalement j'ai réglé le souci de l'erreur Firewall (pour ça j'ai suivi un tuto Youtube) mais en fait ça m'a fait tout rassembler dans une seule requête, au final ça me donne ça :
let
Source_ = Excel.CurrentWorkbook(){[Name="tParam"]}[Content],
vAnnee = Text.From(Table.SelectRows(Source_, each ([Variables] = "Année"))[Chemin]{0}),
vChemin = Table.SelectRows(Source_, each ([Variables] = "Chemin dossier"))[Chemin]{0},
Source = Folder.Files(vChemin & "\" & vAnnee)
in
SourceMais j'aimerais comprendre comment j'aurais pu faire fonctionner votre code sans faire cette modification ? (Donc comment me débarrasser de l'erreur Firewall sans tout rassembler en une seule requête).
Merci encore.
Bonne soirée
Hello,
Pour éviter cette erreur « classique », il faut aller dans l’éditeur puis dans fichier, options, options de requête puis ici !
Comme ça tu peux garder le fichier présenté sans reconstruire la chose.
N’hésite pas si besoin !
@+
Bonsoir,
Ok parfait ça marche ça me plait mieux comme ça
Et au passage je viens d'étudier les options de confidentialité.
Merci encore pour votre aide et votre réactivité !
A bientôt.
Bonne soirée