Power Query Choisir colonnes fichier XML avec POWERQUERY

StagExcelle

XLDnaute Junior
Bonjour,

Je n'arrive pas à manipuler POWERQUERY avec ce fichier XML.

Je voudrais qu'une fois ouvert dans POWERQUERY n'avoir que certaines colonnes dans le tableau EXCEL.

Je vous envoie un petit fichier Exemple.

Ce fichier XML est basé sur la norme ESPPADOM.

Je vais essayer de joindre un fichier XML plus rempli plus tard.
 

Pièces jointes

  • order.exemple.xml.zip
    2.9 KB · Affichages: 18

StagExcelle

XLDnaute Junior
Il manque des informations dans ma question ?

Je ne comprends pas pourquoi selon le fichier XML ouvert dans PowerQuery, ca change
Avec le fichier original, j'ai
exemple1.png

Avec le fichier exemple order.exemple.xml, j'ai
exemple2.png


Est-ce qu'on peut m'aider pour la suite ?
Merci.
 

Etoto

XLDnaute Barbatruc
Bonjour,
J'ai créé cette seconde discussion sur le conseil de Etoto.
Oulà là me dénonces pas 🤣 ! Le problème c'est qu'ici peu de gens connaissent très bien PQ et encore moins les XML alors les deux réunis y'en a très peu qui peuvent t'aider.
Il ne fallait pas le faire?
Si tu peux le faire vu que le thème de l'autre fil ne parle pas PQ.
 

StagExcelle

XLDnaute Junior
Bonjour,

J'ai trouvé cette discussion
J'essaie de modifier le fichier de Roblochon mais je n'y arrive pas.

Quelqu'un peut m'expliquer pourquoi PowerQuery n'affiche pas la même chose à l'écran selon le fichier XML qu'on veut ouvrir ?
Comme dans le message #2.

Mon fichier Exemple est presque terminé.
 

Hasco

XLDnaute Barbatruc
Repose en paix
Bonjour,

Je ne comprends pas pourquoi ca ne marche pas avec le fichier XML construit avec ESPPADOM.
Parce que le fichier books.xml est ce qu'on appelle un fichier 'plat' ne présentant qu'une seule collection racine <catalog> exposant des éléments <book> qui n'ont pour descendant que le propriétés. Cette collection peut être lue facilement comme une table ou chaque ligne représente un 'book' avec pour colonnes les propriétés du 'book'.

Votre ficher comporte des tables, sous tables et sous-sous tables. Power Query (comme excel d'ailleurs) ne sait pas directement extraire les données de ces fichiers complexes.
De plus, il extrait comme table chaque élément vide du fichier. Bref, ni excel (et ses fonctions xml) ni Power Query ne sont les meilleurs outils pour ce genre de traitement.
Sans doute que VBA le ferait.
J'ai regardé vos différentes discussion et posts ainsi que leur fichiers xml, mais rien n'est très clair dans ce que vous voulez extraire, les fichiers ne sont pas les mêmes, les données non plus...

Cordialement
 

patricktoulon

XLDnaute Barbatruc
Bonjour @Roblochon
c'est ce que je lui ai déjà dis dans la discussion au même sujet mais en VBA

le transfert sous forme tableau et sa forme (et arrangement) ne sera que par décision de l'utilisateur
il ne peut être en aucun cas être automatisé sans forcer un arrangement par VBA ou autres

d'autant plus que @StagExcelle; ni dans ce post "POWER QUERY" ni dans celui "en VBA" n'a donné un exemple de disposition qu’éventuellement elle désirerait en fonction de l'exemple qu'il y a dans le zip
 

StagExcelle

XLDnaute Junior
Bonjour patricktoulon et Roblochon

Merci pour vos réponses.

J'ai signalé dans les deux discussions que je suis en train de faire le fichier XML exemple en retirant les données réelles (dans le bloc-notes en faisant Edition/Remplacer)

Mais c'est long car dans le vrai fichier dont je dispose, il y a 199 ligne et 111 colonnes
(quand le fichier est ouvert dans Excel)

Je ne pas faire autrement pour modifier le fichier XML.

Dans la discussion VBA, j'ai mis en jaune dans l'image du message les colonnes (ou les nœuds, si je ne sais pas si c'est le bon terme) pour pouvoir faire un exemple de code VBA.

Selon les informations de Roblochon, PowerQuery ne peut traiter les fichiers ESPPADOM.

Alors je vais ajouter des explications dans la discussion VBA pour traiter une seule colonne.


 

Hasco

XLDnaute Barbatruc
Repose en paix
Est-ce qu'il faut que je mette aussi le fichier XML ici ?
Re bonjour,

J'ai regardé votre dernier message dans l'autre discussion ainsi que son fichier xml (impossible à importer sans erreur par les méthodes traditionnelles)

J'ai cru comprendre que vous aviez réussi à importer tout le tableau par vba ou méthode traditionnelle.
Si tel est le cas alors oui, powerquery peut vous aider à nettoyer votre tableau.

Si c'est ce que vous voulez alors il n'était pas besoin de nous donner votre fichier xml, seul votre tableau suffisait, en nous donnant les noms de colonnes à conserver et éventuellement à transformer (ex: DateTimeUtc en date). Je ne sais pas comment ces discussions sont devenues aussi complexes pour une chose somme toute assez simple.

Il existe aussi une autre possibilité, vous copiez/coller par valeur les colonnes qui vous intéresse dans une nouvelle feuille et le tour est joué.

Cordialement
 

StagExcelle

XLDnaute Junior
Bonjour Roblochon

Roblochon
Dans votre réponse du message #8, vous parlez d'une solution en VBA
Est-ce que vous pouvez, svp, m'indiquez comment vous feriez vous pour traiter la question ?
Merci.

Dans l'autre discussion, j'ai indiqué quelles colonnes il faut garder et pourquoi j'essaie de le faire à l'importation et pas après.

Quand on ouvre le fichier XML dans EXCEL, Excel créé un tableau automatique (je crois que sur le forum vous dites tableau structuré d'après les discussions que j'ai lue)

Si j'essaie de supprimer les colonnes manuellement ou par macro, Excel se fige ou la macro plante.

C'est pour cela que j'avais pensé choisir les colonnes à l'ouverture du fichier
(et que les recherches m'ont menés vers DOM)

Par rapport aux erreurs, selon mon chef de stage, ce n'est pas grave, car on dans Excel les données qu'il faut.

Je m'excuse si j'ai mal posé ma question
(Mais ne connaissant pas les fichier XML, ce n'est qu'hier que j'ai compris comment simplifier le fichier XML dans le bloc-notes)
 

Hasco

XLDnaute Barbatruc
Repose en paix
Bonjour,
Dans votre réponse du message #8, vous parlez d'une solution en VBApa
Est-ce que vous pouvez, svp, m'indiquez comment vous feriez vous pour traiter la question ?
D'abord il ne s'agit pas de moi mais de vous.
Il vous faut des connaissances de bases en xml, vba et dans la librairie microsoft MSXML2.DOMDocument60
Pour cette dernière, sachez qu'elle est capable de parcourir un document xml de différentes façon, notamment par sélection d'éléments ou par un autre langage, qu'on appelle xPath.

Dans l'exemple ci-joint, je n'utilise pas xPath car ils demande de déclarer les 'espaces de noms' présents dans le fichier, ce qui n' est pas forcément utile ici.

J'ai donc choisit une méthode par sélection de collections d'éléments par leur TagName. Le TagName étant le nom d'un élément que vous trouvez entouré de < et >. Dans books.xml 'catalog' est le TagName de l'élément racine du document (un document ne peut avoir qu'un et qu'un seul élément racine) dans votre fichier, c'est :
<rsm:CrossIndustryOrder></rsm:CrossIndustryOrder>

L'élément racine <catalog> de books xml est une collection d'éléments '<book>
un <book> contenant lui même divers éléments uniques (auteur,titre,genre, prix etc)
mais on pourrait lui imaginer une collection <pages> contenant des éléments unique <page>

La méthode getElementsByTagName() de DOMDocument60 retourne une COLLECTION d'éléments du document OU d'un élément parent par le TagName de cette collection.

La valeur de retour de cette méthode est toujours une collection de 0 à n éléments, c'est là la subtilité, qui permet de l'utiliser pour ne retourner qu'un seul élément sans avoir à passer par des boucles sur les noeuds xml de l'élément parent.

Je vous laisse potasser et continuer la procédure.

Mettez le classeur dans le même dossier que votre fichier ESPPADOM_TEST_5.xml

Cordialement
 

Pièces jointes

  • Extraire_Xml_Datas.xlsm
    25.5 KB · Affichages: 4

Discussions similaires

Statistiques des forums

Discussions
311 724
Messages
2 081 936
Membres
101 844
dernier inscrit
pktla