[excel/VB] créer arborescence XML

Bonjour,
je cherche à créer une arborescence XML à partir d’une feuille excel.

J’ai en haut de mes collones des étiquettes (etiquette, 1, 2, 3, … n) et des valeurs pour chaque ligne s1,s2,s3, … n.
Donc s1 -> valeur etiquette, 1; etiquette 2, etiquette 3, … n.

Je souhaite avoir un doc XML tel que :

<mon_document>
 <s>
 1
   <etiquette1>
   valeur x
   </etiquette1>
   <etiquette2>
   valeur y
   </etiquette2>
etc...
 </s>
 <s2>
etc...
 <s2>
</mon_document>

Voilà,
Je ne sais pas comment faire. Pourriez-vous m’aider ?
Lionel

Option Explicit

Sub createXmlFile()
    Dim RBase As Range, RLigne As Range, RColonne As Range
    Dim tagName As String
    
    Set RBase = Range("BaseTableau") ' nommer la première colonne du tableau "BaseTableau"

    Open "z:Fxml.xml" For Output As 1
    Print #1, "<mon_document>"
    ' balayer les lignes
    For Each RLigne In Range(RBase.Offset(1), RBase.End(xlDown))
        'nom du node
        Print #1, "<s>"
        ' valeur du node
        Print #1, "  " + Mid(RLigne, 2)
        ' ecriture des childnodes
        For Each RColonne In Range(RLigne.Offset(0, 1), RLigne.End(xlToRight))
            ' le nom de la balise est pris sur la premiere ligne
            tagName = Intersect(RBase.EntireRow, RColonne.EntireColumn)
            Print #1, "  <" + tagName + ">"
            Print #1, "    " + RColonne
            Print #1, "  </" + tagName + ">"
        Next
        Print #1, "</s>"
    Next
    Print #1, "</mon_document>"
    Close 1
End Sub

Tout dépend de ce que tu veux faire par la suite, mais regarde si au lieu de
<etiquette1>
valeur x
</etiquette1>

tu n’as pas intérêt à employer
<etiquette1 value=“valeur x” />

je crois que je vais faire le lourd, mais je rame complètement …
j’ai bien mis en A1 “BaseTableau”

(ce que j’ai compris !?) changer le path de z:Fxml.xml et remplacé par un fichier correct. J’ai copié et collé le code puis éxécuté, mais j’obtiens :

Erreur d'éxécuition '1004':
la méthode 'Range de l'objet '_Global a échoué

je n’y comprend pas grand chose !

C’est bien ça

en fait c’est uniquement la première cellule (en principe A1) qu’il faut nommer.
revérifie avec Insertion > nom > definir

OK, donc jusque là tout va bien.
Pourquoi me dit-il

Erreur d'éxécuition '1004':
la méthode 'Range de l'objet '_Global a échoué

j’ai pourtant recopié littéralement

Option Explicit

Sub createXmlFile()
   Dim RBase As Range, RLigne As Range, RColonne As Range
   Dim tagName As String
   
   Set RBase = Range("BaseTableau") ' nommer la première colonne du tableau "BaseTableau"

   Open "c:Fxml.xml" For Output As 1
   Print #1, "<mon_document>"
   ' balayer les lignes
   For Each RLigne In Range(RBase.Offset(1), RBase.End(xlDown))
       'nom du node
       Print #1, "<s>"
       ' valeur du node
       Print #1, "  " + Mid(RLigne, 2)
       ' ecriture des childnodes
       For Each RColonne In Range(RLigne.Offset(0, 1), RLigne.End(xlToRight))
           ' le nom de la balise est pris sur la premiere ligne
           tagName = Intersect(RBase.EntireRow, RColonne.EntireColumn)
           Print #1, "  <" + tagName + ">"
           Print #1, "    " + RColonne
           Print #1, "  </" + tagName + ">"
       Next
       Print #1, "</s>"
   Next
   Print #1, "</mon_document>"
   Close 1
End Sub

j’ai juste changé c:Fxml.xml et créé un fichier Fxml.xml dans C:
Lorsque je clique sur debogage, il me colorie la ligne

   Set RBase = Range("BaseTableau") ' nommer la première colonne du tableau "BaseTableau"

Dans ta feuille Excel, tu as bien donné le nom BaseTableau à ta première cellule ?
Il faut le faire manuellement, ce n’est pas le programme qui le fait

un GRAND merci à gcc,
Cdt,
Lionel