Power Query Premiers Pas Power Query, combiner tableaux provenant de différents onglets

vgendron

XLDnaute Barbatruc
Bonjour,

Je suis un fervent adepte des macros VBA, mais, je découvre seulement Power Query (nouvellement installé en tant qu'add-on sur ma version Excel 2010)

Dans le fichier ci joint, j'aimerais combiner tous les tableaux issus des onglets 1 2 3
MAIS: j'aimerais pouvoir ajouter une colonne qui me donne le NOM de l'onglet d'où sont issues les données
(pour expliquer ce besoin final, 1 2 3... sont des jours==> jusqu'a 31 donc)

je sais donc importer le tableau Tab_1 avec cette instruction
Excel.CurrentWorkbook(){[Name="Tab_1"]}[Content]
1) ca m'impose de transformer tous les tableaux en Tableau Structuré avec un nom "formaté": Tab_xx (xx étant le jour = nom de l'onglet)
1) ca m'impose de créér autant de requetes que d'onglets
2) selon le mois en cours (=classeur en traitement), ce nombre change..28 29 30 ou 31

mais j'ai vu cette commande:
Excel.CurrentWorkbook()
qui permet d'importer TOUS les tableaux du classeur (qu'ils soient sous forme tableau structuré ou pas)
y compris ceux que je ne veux pas: exemple d'un tableau sur la feuille "Feuille a ignorer"
y compris également le tableau final issu d'un traitement préalable

si j'ai bien vu lors de mes essais, lors de l'import de données juste sous forme de plage de données, Power Query fait lui meme la conversion en tableau structuré en mettant un nom arbitraire==> peut on imposer ce nom?

peut on faire une boucle qui importe tous les tableaux des onglets DONT le nom est un nombre?

Merci
 

Pièces jointes

  • Test PowerQuery.xlsm
    27.4 KB · Affichages: 7

Hasco

XLDnaute Barbatruc
Repose en paix
Bonjour,

L'étape Power query suivante va combiner tous les Tableaux du fichier dont le nom commence par "Tab_" & se termine par une chiffre de 1 à 9 :

Table.Combine(List.RemoveNulls(List.Transform({"1".."9"}, each try Excel.CurrentWorkbook(){[Name="Tab_" & _]}[Content] otherwise null)))

La même décomposer en 3 étapes :
let
Source = List.Transform({"1".."9"}, each try Excel.CurrentWorkbook(){[Name="Tab_" & _]}[Content] otherwise null),
#"Remove nulls" = List.RemoveNulls( Source),
Combiner = Table.Combine( #"Remove nulls")
in
Combiner

Vous pouvez également traiter votre fichier comme un fichier externe avec Excel.Workbook mais ce dernier devra avoir été enregistré pour que la requête puisse refléter les dernières modifications.

= Excel.Workbook(File.Contents("NomCompletDuFichier"))

Vous pourrez alors filtrer facilement les feuilles et les traiter

Il y a trop de choses dans votre question pour y répondre simplement.

Apprenez à manipuler les listes et vous ferez à peu près n'importe quoi.

Si vous avez des noms indexés > 9 alors

List.Transform({1..31},Text.From)

Ou suivant l'usage

List.Transform({1..31}, each "Nom_" & Text.From(_))

Cordialement

[Edit]hello @chris [/Edit]
 

Pièces jointes

  • Test PowerQuery.xlsm
    33.4 KB · Affichages: 13
Dernière édition:

chris

XLDnaute Barbatruc
RE
Power Query fait lui meme la conversion en tableau structuré en mettant un nom arbitraire==> peut on imposer ce nom?
A priori non : c'est comme pour les créations de classeurs, onglets, graphiques, ... Excel prend un terme générique et numérote

C'est une habitude à prendre : travailler systématiquement en tableaux structurés pour les listes de données (ils sont là depuis 19 ans) et systématiquement les renommer comme on renomme les onglets...
 

Hasco

XLDnaute Barbatruc
Repose en paix
Re,

Ca viendra.
Par contre il eut été plus élégant de dire que c'était pour répondre à un fil de discussion :
 

vgendron

XLDnaute Barbatruc
Re,

Ca viendra.
Par contre il eut été plus élégant de dire que c'était pour répondre à un fil de discussion :
Mea Culpa
j'ai hésité à le signaler en fait.
Je me suis effectivement servi de cet autre fil pour m'initier à PowerQuery, et je me suis dit que je risquais d'avoir une solution toute faite qui ne me forcerait pas vraiment à chercher par moi meme.
 

Discussions similaires

Réponses
14
Affichages
191
Réponses
16
Affichages
665
Réponses
13
Affichages
640

Statistiques des forums

Discussions
313 209
Messages
2 096 240
Membres
106 541
dernier inscrit
edf