Voici l'illustration de mon classeur tel qu'il est conçu. J'ai tout mis sur une feuille pour que ce soit plus clair, mais on peut dispatcher sur plusieurs feuilles, puisque l'on travaille avec des tableaux structurés et des plages nommées... Le tableau bleu est nommé t_Fichiers et le vert (résultat de la requête) est nommé pq_Feuilles
Voici la requête Power query qui récupère les noms des feuilles du classeur dont le nom figure dans la plage nommée Fichier...
Code PowerQuery : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 let Fichier = Excel.CurrentWorkbook(){[Name="Fichier"]}[Content]{0}[Column1], Source = Table.SelectRows(Excel.Workbook(File.Contents(Fichier)), each [Kind] = "Sheet"), Feuilles = Table.SelectColumns(Source, {"Name"}) in Feuilles
Voici le code VBA qui parcourt le tableau des fichiers, qui actualise la requête et qui affiche dans un msgbox la concaténation des noms des feuilles trouvés, à chaque boucle (C'est évidemment pour l'exemple, et j'ai utilisé TEXTJOIN <=> JOINDRE.TEXTE, une exclusivité 365)...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 Sub Test() Dim r As Range For Each r In Range("t_Fichiers[Classeur]") Range("Fichier").Value = r.Value Range("pq_Feuilles").ListObject.QueryTable.Refresh False MsgBox Application.Evaluate("textjoin("" - "",true,pq_Feuilles)") Next r End Sub
A adapter en fonction de tes besoins et de ta version, bien sûr. C'est l'idée que j'illustre ici![]()
Partager