Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

XL 2016 PowerQuery nom des fichiers

steph_29120

XLDnaute Junior
Bonjour,

je réalise 3 "imports" de fichiers par le menu données d'excel 2016 ==>Nouvelle requête à partir d'un classeur.
je souhaiterai ajouter une colonne qui indique le nom du fichier depuis lequel j'ai importer les différents tableaux. : dans ce cas précis 3 noms de fichiers).

bonne journée et merci d'avance

nom du fichiernomprénom
fichier_1martinphilippe
fichier_1avriljean
fichier_2dupontfrançois
fichier_2legendrefrançoise
fichier_3professeurtournesol
 

Cousinhub

XLDnaute Barbatruc
Re-,
Je pense avoir trouvé...
Une fois que tu as tes 3 requêtes chargées (comme dans l'image ci-dessous), tu fais un clic droit dans la zone "Requête", "Nouvelle requête", "Autres sources", "Requête vide"



Tu la renommes "Comb" (par exemple), et tu cliques sur "Éditeur avancé"
Tu mets ce code à la place du code d'origine :
PowerQuery:
let
    Source = Record.ToTable(#sections[Section1]),
    Filtr = Table.SelectRows(Source, each ([Name] <> "Comb")),
    Expand = Table.ExpandTableColumn(Filtr, "Value", {"nom", "prénom"}, {"nom", "prénom"})
in
    Expand

Et normalement, tu obtiens ce que tu veux (regarde le tableau ci-dessus, j'ai rajouté tg pour ti_glazik...
Bon courage

PS, merci à @Amilo pour son code
 

Cousinhub

XLDnaute Barbatruc
Re-,
Afin de s'affranchir des noms de colonnes à développer, mets plutôt ce code dans l'éditeur avancé de la requête "Comb" :
PowerQuery:
let
    Source = Record.ToTable(#sections[Section1]),
    Filtr = Table.SelectRows(Source, each ([Name] <> "Comb")),
    Expand = Table.ExpandTableColumn(Filtr, "Value", Table.ColumnNames(Filtr[Value]{0}), Table.ColumnNames(Filtr[Value]{0}))
in
    Expand
Comme cela, si tu as plus de colonnes, elles seront toutes développées...
Bonne soirée
 

Amilo

XLDnaute Accro
Bonjour le forum, steph_29120, Cousinhub ,

VB:
Expand = Table.ExpandTableColumn(Filtr, "Value", Table.ColumnNames(Filtr[Value]{0}), Table.ColumnNames(Filtr[Value]{0}))
@Cousinhub , si je peux me permettre, cette ligne de code permet d'avoir uniquement toutes les colonnes de la 1ère Table mais pas celles des autres tables de la colonne [Value].
Si une colonne est ajoutée par exemple dans la table [Value]{1}, celle-ci ne sera pas reprise si le nouveau nom de la colonne n'apparait pas dans la 1ère table [Value]{0}.

J'aurais plutôt utilisé mais sans avoir testé :
Code:
=Table.ExpandTableColumn(Filtr, "Value", List.Distinct(List.Combine(List.Transform(Filtr[Value], each Table.ColumnNames(_)))))

@steph_29120 , Cousinhub a posé les bonnes questions dans ses différentes réponses et il n'est pas facile de proposer une méthode parmi d'autres sans connaître le contenu des dossiers, des fichiers et si les tables ou colonnes risquent d'être ajoutées....etc

Mais la dernière proposition de Cousinhub conviendra très certainement à votre situation.

Cordialement
 

steph_29120

XLDnaute Junior
Bonjour
Merci à tous les deux. Mais je dois mal m'y prendre car voilà ce que cela donne :



et rien ne se charge : je vous ai prévenu : je suis un grand débutant !
 

Pièces jointes

  • 1686901073243.png
    66.1 KB · Affichages: 7

Cousinhub

XLDnaute Barbatruc
Bonjour,
Il ne faut pas mettre cela dans la barre de formules, mais dans l'éditeur avancé (qui est en quelque sorte le pendant d'un Module, si tu connais un peu le VBA)
Pour ce faire, tu sélectionnes (comme tu l'as fait) la nouvelle requête (que tu as bien renommée "Comb")
Et dans le ruban Accueil, tu cliques sur "Éditeur avancé"

Tu arrives donc dans l'éditeur, et c'est là que tu colles le code :

Comme tu peux le voir, ici, j'utilise le code fourni par Amilo
 

Amilo

XLDnaute Accro
Re,
Depuis Excel, ALT+F12 permet d'ouvrir directement l'éditeur Power Query, ALT+F11 pour l'éditeur VBA

Edit : ALT + F12 ouvre l'éditeur PQ mais pour l'éditeur avancé, il faut effectivement passer par le ruban de l'éditeur PQ

Cordialement
 
Dernière édition:

chris

XLDnaute Barbatruc
Bonjour à tous

On peut faire un tableau listant les chemins et noms des fichiers puis charger ce tableau dans PowerQuery. On récupère ensuite les contenus : la colonne initiale reste.

Exemple :
Tableau nommé ListeXLS

On a une fonction nommée TraitementXLS qui charge les tableau du 1er onglet de chaque classeur, récupère une en-tête, et met les 2 colonnes en nompropre (c'est juste une ligne pour montrer qu'on peut agir sur chaque tableau)

VB:
(Fichier as text)=>
let
    Source = Excel.Workbook(File.Contents(Fichier)),
    Onglet=Source{0}[Data],
    #"En-têtes promus" = Table.PromoteHeaders(Onglet, [PromoteAllScalars=true]),
    NomPropre=Table.TransformColumns(#"En-têtes promus",{{"nom", Text.Proper, type text}, {"prénom", Text.Proper, type text}})
in
NomPropre

Et on a juste à appeler la fonction :
Ajouter une colonne, Appeler une fonction personnalisée, Sélectionner TraitementXLS comme Requête de fonction, valider.
Il n'y a plus qu'à cliquer sur la double flèche en haute de la colonne TraitementXLS

 
Dernière édition:
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…