Bonjour,
je ne suis pas expert en VBA. Ce post fait suite à celui-là notamment. J’arrive encore bien à me débrouiller avec les fonctions d’excel mais lorsqu’il faut passer aux macros en VBA 6 je suis perdu.
Du précédent post et un grand merci à gcc, je conserve ceci
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 "F:excel2xml.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, "<sujet>"
' valeur du node
Print #1, " " + Mid(RLigne, 2)
' ecriture des childnodes
For Each RColonne In Range(RLigne.Offset(0, 1), RLigne.End(xlToRight))
' Si cellule vide, on ignore
If RColonne <> "" Then
' le nom de la balise est pris sur la premiere ligne
tagName = Intersect(RBase.EntireRow, RColonne.EntireColumn)
Print #1, " <" + tagName + ">"
If IsNumeric(RColonne) Then
Print #1, " " + Str(RColonne)
Else
Print #1, " " + RColonne
End If
Print #1, " </" + tagName + ">"
End If
Next
Print #1, "</sujet>"
Next
Print #1, "</mon_document>"
Close 1
End Sub
cela fonctionne très bien et je souhaite utiliser split() et vlookup() maintenant pour un traitement plus intéractif.
Prenons le cas ou mon fichier excel.xls ne contient qu’une feuille1. Dans la colonne A1 j’ai une étiquette “étiquetteA” dans la colonne B une “étiquetteB” , etc. Le code ci-dessus fonctionne bien, mais je voudrais pour la colonne D (et uniquement la colonne D), découper la chaîne de caractères (par les espaces entre caractères) du contenu de la cellule D2, D3, … Dn (“item1”, “item2”, …, “itemn”). Pour l’“item1” aller chercher dans le fichier res.xls, la feuille_res, dans la matrice A1:C6500, la colonne 2 … du genre
passer ensuite à la cellule D3, etc. et s’arrêter lorsque la cellule de la colonne A est vide ou ne contient plus d’élément. Ensuite passer à la colonne E au précédent mode :
J’ai bien testé cela
mais je n’arrive pas à l’implémenter !?
Merci,
L