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