Power Query Nom des onglets des fichiers importés dans Power query

Mongo

XLDnaute Junior
Bonjour,

Nouvel utilisateur de Power Query, je rencontre un problème que vous allez, je l'espère, pouvoir m'aider à régler :

- J'exporte des fichiers Excel de notre ERP.
- J'importe ces fichiers Excel dans Power Query.
- Je fusionne ces requêtes suivant certaines conditions pour ne finalement obtenir qu'un tableau à charger dans Excel.
Jusque là, tout va bien

Mon souci vient du fait que l'ERP duquel son exportées les données modifie le nom des onglets à chaque exportation.
Si je ne modifie pas le nom des onglets avant d'actualiser Power Query, l'actualisation plante car Power Query ne reconnait pas la source.
Y a t-il une solution dans Power Query pour gérer ce type de problème ?

Merci d'avance
icon_lol.gif
 

Cousinhub

XLDnaute Barbatruc
Bonjour,
Comment importes-tu tes fichiers?(via "A partir d'un dossier"?)
Le répertoire est-il toujours le même?
Combien d'onglets par fichier?
Peux-tu juste mettre une copie d'écran de tes requêtes (partie gauche), et des étapes(partie droite)?
1701427232307.png
1701427253916.png
 

Mongo

XLDnaute Junior
Bonjour,
Comment importes-tu tes fichiers?(via "A partir d'un dossier"?)
Le répertoire est-il toujours le même?
Combien d'onglets par fichier?
Peux-tu juste mettre une copie d'écran de tes requêtes (partie gauche), et des étapes(partie droite)?
Regarde la pièce jointe 1185124Regarde la pièce jointe 1185125

Bonjour Cousinhub,

je les déposes dans un répertoire qui ne change pas (s'il devait changer, je devrais mettre à jour les sources).
Je les ai importés un à un (photo ci-dessous) puis les ai fusionnés et personnalisés (ajout de calculs + divers choses) pour obtenir les données dont j'ai besoin (photo du bas).


1701427911720.png


1701427964866.png
 

Pièces jointes

  • 1701427669926.png
    1701427669926.png
    90.8 KB · Affichages: 3
  • 1701427757601.png
    1701427757601.png
    125.2 KB · Affichages: 4

Cousinhub

XLDnaute Barbatruc
Re-,
Est-ce qu'à un moment, tu fais un SelectRow, pour filtrer sur les noms d'onglets?
Peux-tu mettre le code de ta première requête (nommée GCO) (Editeur Avancé, tu copies le code, et le code ici, en utilisant la balise code
1701429773319.png

Et en choisissant "Power Query"
1701429809878.png
 

merinos

XLDnaute Accro
Bonjour @Mongo ,

C'est possible assez facilement:

tu essaye d'importer une feuille...
1701431988746.png


Tu efface 2 étapes pour ne garder que la source.

Alors tu vois le contenu du fichier...Tu peux filtrer seulement les feuilles. Si besoin tu peux aussi enlever certaines feuilles sur base du nom.

1701432101143.png


La colonne Data contient tes feuilles...
1701432245564.png


Si tu dois importer un nombre inconnu de fichiers, tu transformes ceci en fonction et tu les applique sur le directory

A+

Merinos
 

Mongo

XLDnaute Junior
Re-,
Sinon, tu supprimes l'étape "Navigation", et reviens sur l'étape "Source".
Tu filtres sur Kind = "Sheet", "Hidden"=false...
Regarde la pièce jointe 1185137
Je viens de supprimer l'étape Navigation et dans l'étape source, les filtres étaient déjà sur Kind = "Sheet", "Hidden"=false...

Le code de ma première requète est le suivant :

let
Source = Excel.Workbook(File.Contents("C:\Users\§§§§§§§§§§§§\Documents\1-Data\2-Suivi des prix et diffusion des tarifs\Exportation Fichiers\Tarifs GCO.xlsx"), null, true),
GCO_Sheet = Source{[Item="[COLOR=rgb(0, 168, 133)]GCO[/COLOR]",Kind="Sheet"]}[Data],
#"Type modifié" = Table.TransformColumnTypes(GCO_Sheet,{{"Column1", type text}, {"Column2", type text}, {"Column3", type any}, {"Column4", type any}, {"Column5", type any}, {"Column6", type any}, {"Column7", type any}, {"Column8", type any}}),
#"Premières lignes supprimées" = Table.Skip(#"Type modifié",23),
#"Colonnes permutées" = Table.ReorderColumns(#"Premières lignes supprimées",{"Column2", "Column1", "Column3", "Column4", "Column5", "Column6", "Column7", "Column8"}),
#"Personnalisée ajoutée" = Table.AddColumn(#"Colonnes permutées", "TAUXREDUCTION", each [Column8]/100),
#"Type modifié1" = Table.TransformColumnTypes(#"Personnalisée ajoutée",{{"TAUXREDUCTION", Percentage.Type}})
in
#"Type modifié1"

A chaque fois que j'enregistre le fichier dans le dossier source, je renomme l'onglet en GCO pour palier au nouveau nom d'onglet lors de l'exportation depuis l'ERP.
 

Mongo

XLDnaute Junior
Bonjour @Mongo ,

C'est possible assez facilement:

tu essaye d'importer une feuille...
Regarde la pièce jointe 1185141

Tu efface 2 étapes pour ne garder que la source.

Alors tu vois le contenu du fichier...Tu peux filtrer seulement les feuilles. Si besoin tu peux aussi enlever certaines feuilles sur base du nom.

Regarde la pièce jointe 1185142

La colonne Data contient tes feuilles...
Regarde la pièce jointe 1185143

Si tu dois importer un nombre inconnu de fichiers, tu transformes ceci en fonction et tu les applique sur le directory

A+

Merinos

Merci Merinos.

Mais mon souci n'est pas de filtrer certaines feuilles des fichiers importés mais de gérer le nom de l'onglet qui change à chaque mise à jour du fichier source. A moins que je n'ai pas tout compris... :)
 

merinos

XLDnaute Accro
tu veux lire le contenu de la feuille... sans tenir compte du nom de celle-ci...

mon import ne nécésite pas de connaitre le nom des feuilles...j'obtien les noms_de_feuilles et les colonnes de données...


s'il n'y a qu'une feuille par fichier, pas de stress... ce sera simple.

S'il a y 3 feuilles par fichier dont 2 avec des noms stables dont tu n'as pas besoin, tu les elimine puis il te reste la bonne (par deduction)

Si plusieurs feuilles ont des noms qui varient c'est lus complexe...
mais si je sais que le "bonne" feuille contient "PAPA" en C4, je peux faire un test, savoir quelle feuille est bonne, eliminer les autres...
 

Cousinhub

XLDnaute Barbatruc
Re-,
(Désolé, absent cet apm)

PowerQuery:
let
Source = Excel.Workbook(File.Contents("C:\Users\§§§§§§§§§§§§\Documents\1-Data\2-Suivi des prix et diffusion des tarifs\Exportation Fichiers\Tarifs GCO.xlsx"), null, true),
GCO_Sheet = Source{[Item="GCO",Kind="Sheet"]}[Data],
#"Type modifié" = Table.TransformColumnTypes(GCO_Sheet,{{"Column1", type text}, {"Column2", type text}, {"Column3", type any}, {"Column4", type any}, {"Column5", type any}, {"Column6", type any}, {"Column7", type any}, {"Column8", type any}}),
#"Premières lignes supprimées" = Table.Skip(#"Type modifié",23),
#"Colonnes permutées" = Table.ReorderColumns(#"Premières lignes supprimées",{"Column2", "Column1", "Column3", "Column4", "Column5", "Column6", "Column7", "Column8"}),
#"Personnalisée ajoutée" = Table.AddColumn(#"Colonnes permutées", "TAUXREDUCTION", each [Column8]/100),
#"Type modifié1" = Table.TransformColumnTypes(#"Personnalisée ajoutée",{{"TAUXREDUCTION", Percentage.Type}})
in
#"Type modifié1"
Voici ton code (n'oublie pas d'utiliser les balises, c'est bien plus lisible...
A l'étape GCO_Sheet, efface Item="GCO" comme ceci :
PowerQuery:
let
Source = Excel.Workbook(File.Contents("C:\Users\§§§§§§§§§§§§\Documents\1-Data\2-Suivi des prix et diffusion des tarifs\Exportation Fichiers\Tarifs GCO.xlsx"), null, true),
GCO_Sheet = Source{[Kind="Sheet"]}[Data],
#"Type modifié" = Table.TransformColumnTypes(GCO_Sheet,{{"Column1", type text}, {"Column2", type text}, {"Column3", type any}, {"Column4", type any}, {"Column5", type any}, {"Column6", type any}, {"Column7", type any}, {"Column8", type any}}),
#"Premières lignes supprimées" = Table.Skip(#"Type modifié",23),
#"Colonnes permutées" = Table.ReorderColumns(#"Premières lignes supprimées",{"Column2", "Column1", "Column3", "Column4", "Column5", "Column6", "Column7", "Column8"}),
#"Personnalisée ajoutée" = Table.AddColumn(#"Colonnes permutées", "TAUXREDUCTION", each [Column8]/100),
#"Type modifié1" = Table.TransformColumnTypes(#"Personnalisée ajoutée",{{"TAUXREDUCTION", Percentage.Type}})
in
#"Type modifié1"

Ainsi, tu ne mets pas de nom d'onglet, juste le Kind=Sheet
Bonne soirée
 

Amilo

XLDnaute Accro
Bonjour à tous,

Sans trop m'être penché sur les messages, un test en passant par Folder.Files

VB:
let
    Source = Folder.Files("C:\Users\§§§§§§§§§§§§\Documents\1-Data\2-Suivi des prix et diffusion des tarifs\Exportation Fichiers")[Content],
    Fusion = Table.Combine(List.Combine(List.Transform(Source, each Excel.Workbook(_, true)[Data])))
in
    Fusion

Cordialement
 

Discussions similaires

Statistiques des forums

Discussions
313 264
Messages
2 096 657
Membres
106 701
dernier inscrit
KOFFI