IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Générer un fichier XML a partir de VBA [XL-2016]


Sujet :

Macros et VBA Excel

  1. #1
    Membre averti
    Homme Profil pro
    Reporting Analyst
    Inscrit en
    Février 2022
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Allemagne

    Informations professionnelles :
    Activité : Reporting Analyst
    Secteur : Finance

    Informations forums :
    Inscription : Février 2022
    Messages : 12
    Par défaut Générer un fichier XML a partir de VBA
    Bonjour tout le monde,

    je me suis récemment attaqué a la création d´une macro dans le but de générer un fichier XML a partir d´un tableau existant.
    Après avoir scruté plusieurs forum j´ai fais un premier essais avec la méthode Print# qui marche bien mais que j´ai trouvé un peu laborieuse. Mon idée était d´automatiser l'écriture des différentes ligne, je me suis donc tourné vers une autre méthode qui me semblait plus adapté: MSXML2.DOMDocument60, appendchild, createElement etc...

    Seulement, je pense que je ne comprend bien cette méthode car toutes mes tentatives sont des échecs.

    Avec le code ci-dessous, je cherche a récupérer les noms des noeuds dans un tableau puis leur valeur:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    Sub oNode2()
     
    Dim oXML As MSXML2.DOMDocument60
    Dim oNode As MSXML2.IXMLDOMNode
    Dim Var As Variant
    Dim Source As Worksheet
     
    Set oXML = New MSXML2.DOMDocument60
    Set oNode = oXML.createProcessingInstruction("xml", "version=""1.0"" encoding=""ISO-8859-1""") 
    Set Source = ThisWorkbook.Sheets("Sheet1")
     
    oXML.appendChild oNode
     
     
    For Each Var In Source.Range("B4:B6")
     
     
        With oXML.appendChild(oXML.createElement(Var))
           .Text = Var.Offset(0, 1)
        End With
     
    Next Var
     
    oXML.Save "...l"
     
    End Sub
    L´idée ici est de créer le XML suivant:

    Code XML : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <Nom>Dubois</Nom>
    <Prenom>Jean</Prenom>
    <Age>40</Age>

    A partir du tableau suivant:

    Nom Dubois
    Prenom Jean
    Age 40

    Je précise que bien sur ceci n´est qu´un exemple et que mon XML final devrait contenir 200-300 lignes, d´où la raison de rendre l´écriture de XML plus automatique.
    Mon code plante systématiquement quand rentre en jeu la Variable Var, et je ne comprends pas pourquoi.

    Merci par avance pour votre aide. Si vous avez des idées ou des méthodes radicalement différentes n´hésitez pas, cela me permettra d´apprendre de nouvelles choses sur VBA.

    Chris

  2. #2
    Expert confirmé
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    4 203
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 4 203
    Par défaut
    Hello,
    1 - il faut qu'il y ait un noeud racine dans le fichier XML.
    2 - Ne pas utiliser var comme nom de variable.

    Voici un exemple de code qui fait ce que tu veux :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    Sub oNode2()
    Dim oXML As MSXML2.DOMDocument60, oNode As MSXML2.IXMLDOMNode
    Dim oRoot As IXMLDOMElement, oElem As IXMLDOMElement
    Dim MonVar As Variant, Source As Worksheet
    Set oXML = New MSXML2.DOMDocument60
    Set oNode = oXML.createProcessingInstruction("xml", "version=""1.0"" encoding=""ISO-8859-1""")
    Set Source = ThisWorkbook.Sheets("Feuil1")
    oXML.appendChild oNode
    Set oRoot = oXML.createElement("Racine")
    oXML.appendChild oRoot
    For Each MonVar In Source.Range("B4:B6")
            Set oElem = oXML.createElement(MonVar)
            oRoot.appendChild oElem
            oElem.Text = MonVar.Offset(0, 1)
            oRoot.InsertBefore oXML.createTextNode(vbCrLf + "    "), oElem
    Next MonVar
    oRoot.appendChild oXML.createTextNode(vbCrLf)
    oXML.Save "d:\temp\sortieXml.xml"
     
    End Sub
    Résultat :
    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <?xml version="1.0" encoding="ISO-8859-1"?>
    <Racine>
        <Nom>Dubois</Nom>
        <Prenom>Jean</Prenom>
        <Age>40</Age>
    </Racine>
    les createTextNode c'est pour que le fichier de sortie XML soit plus joli avec des indentations et des retour chariot. Sans cela toutes les données sont sur une seule ligne

    Ami calmant, J.P

  3. #3
    Membre confirmé
    Homme Profil pro
    Concepteur CAO
    Inscrit en
    Décembre 2014
    Messages
    65
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Concepteur CAO
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2014
    Messages : 65
    Par défaut
    Bonjour jurassic pork,

    Il y a quelques années tu m'as super dépanné sur des problèmes de macro, la j'entame un nouveau projet sur la génération de fichier xml via excel et direct je tombe sur toi

    J'ai testé ta méthode

    1-J'ai créé un fichier xlsm, sur une Feuil1 j'ai rempli les cellule de B4 à C6.
    2-J'ai copié ton code dans un Module1 en modifiant le chemin de la ligne 18.
    3-J'ai ajouté référence Microsoft XML, v6.0

    Cela fonctionne merveilleusement bien

    Merci par avance

    JB

  4. #4
    Membre averti
    Homme Profil pro
    Reporting Analyst
    Inscrit en
    Février 2022
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Allemagne

    Informations professionnelles :
    Activité : Reporting Analyst
    Secteur : Finance

    Informations forums :
    Inscription : Février 2022
    Messages : 12
    Par défaut
    Bonjour,

    Toutes mes excuses pour mon retour un peu long.
    Un grand merci a toi pour ton aide Jurassic Pork (j´adore ce speudo), ca marche du feu de dieu ! Effectivement avec une racine et sans utiliser "Var" comme variable cela fonctionne comme souhaité (erreur de débutant).

    Bonne journée a tous
    Christopher

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Générer un fichier XML a partir d'une formulaire PHP
    Par vinkey_33 dans le forum Langage
    Réponses: 6
    Dernier message: 25/11/2016, 13h14
  2. Générer un fichier XML a partir d'un code source java
    Par yucef83 dans le forum Format d'échange (XML, JSON...)
    Réponses: 6
    Dernier message: 17/02/2014, 23h08
  3. [MySQL] Générer un fichier XML a partir de certain champs
    Par Joe Le Mort dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 29/11/2006, 12h56
  4. générer un fichier xml à partir xsl ou xslt
    Par sarah1 dans le forum XSL/XSLT/XPATH
    Réponses: 3
    Dernier message: 17/05/2005, 17h57
  5. Réponses: 2
    Dernier message: 27/05/2004, 00h40

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo