De Excel à XML

Bonjour à tous,

Tout nouveau sur ce forum, je suis sous Mac OS (nul n'est parfait) et Excel 2011 et suis confronté à un problème :

Je dispose d'un très grand tableau Excel avec comme rubriques (colonnes) : NOM, PRENOM, ADRESSE , .... (plein).

J'aimerai pouvoir exporter ce tableau en XML, un Node par ligne et les rubriques en attributs genre :

<LISTE>
   <FICHE id="numero de ligne" NOM="nom1" PRENOM="prenom1" ADRESSE="adresse1" ... />
   <FICHE id="numero de ligne" NOM="nom2" PRENOM="prenom2" ADRESSE="adresse2" ... />
   <FICHE id="numero de ligne" NOM="nom3" PRENOM="prenom3" ADRESSE="adresse2" ... />
   ...
</LISTE>

Quelqu'un aurait-il une astuce, une macro, ... pouvant faire cela ou pouvant m'aiguiller sur la façon de le faire ?

Il est à noter que je suis une bille sous la suite Office.

Par avance merci.

Pas l'ombre d'une idée ou le début d'une piste ?

Merci !

Bon, devant un tel succès, j'ai poursuivi mes recherches ... et j'ai trouvé ça :

Option Explicit

Dim objDOM As DOMDocument

Sub Test()
    'Définit la plage de cellules qui va servir pour la création du
    'fichier xml.
    'La première ligne du tableau est supposée contenir les entêtes
    '(sans espaces ni caractères spéciaux).
    CreationFichierXML Worksheets("feuille1").Range("A1:L16")
End Sub

Sub CreationFichierXML(Plage As Range)
'
'Nécessite d'activer la référence "Microsoft XML, V..."
'
Dim XnodeRoot As IXMLDOMElement, oNode As IXMLDOMNode
Dim XNom As IXMLDOMElement
Dim Cmt As IXMLDOMComment
Dim Entete As Range, Cell As Range
Dim i As Integer, j As Integer

Set Entete = Plage.Rows(1)
Set Plage = Plage.Offset(1, 0).Resize(Plage.Rows.Count - 1, Plage.Columns.Count)

'----
Set objDOM = New DOMDocument

'Ajoute un commentaire qui reprend le nom de l'utilisateur et
' la date du jour.
Set Cmt = objDOM.createComment("Créé par " & Environ("username") & ", le " & Date)
Set Cmt = objDOM.InsertBefore(Cmt, objDOM.ChildNodes.Item(0))

'Type de fichier
Set oNode = objDOM.createProcessingInstruction("xml", "version='1.0' encoding='ISO-8859-1'")
Set oNode = objDOM.InsertBefore(oNode, objDOM.ChildNodes.Item(0))
'----

Set XnodeRoot = objDOM.createElement("MonTableau")
objDOM.appendChild XnodeRoot

'Boucle sur les données du tableau
For j = 1 To Plage.Rows.Count
    Set XNom = objDOM.createElement("DonneeTableau")
    XNom.setAttribute Entete.Cells(1, 1), Plage.Cells(j, 1)
    XnodeRoot.appendChild XNom

    For i = 2 To Entete.Columns.Count
        CreationElement Entete.Cells(1, i), Plage.Cells(j, i), XNom
    Next i
Next j

objDOM.Save "/Users/Albert/Desktop/zzzFichier.xml"

Set XnodeRoot = Nothing
Set objDOM = Nothing
End Sub

Sub CreationElement(strElem As String, Donnee As Variant, oNom As IXMLDOMElement)
    Dim XInfos As IXMLDOMNode
    Set XInfos = objDOM.createElement(strElem)
    XInfos.Text = Donnee
    oNom.appendChild XInfos
End Sub

Sauf que quand je lance la macro, Excel me ramène à l'éditeur avec un message d'erreur : " Erreur de compilation. Type défini par l'utilisateur non défini.", en me surlignant la ligne :

objDOM As DOMDocument

Bon ...

Soit je n'ai pas de chance et personne n'a la moindre idée de ce que je demande !

Soit un truc effraie dans ma question : Mac ? XML ? 2011 ? Pas Excel tout de même !!

Merci

Salut,

Je pense qu'il te manque une reference.

Dans VBE, clique sur Outils Reference et Coche : Microsoft XML, V6.0

Dis moi si ton code fonctionne ensuite.

Par contre, si ton besoin est juste de créer un fichier XML comme tu le décris, pourquoi ne pas utiliser du code simple de manipulation de chaine.

Exemple :

Sub generateXMLFile_simple()
Dim numfile As Integer
numfile = FreeFile
Open "c:\test2.xml" For Output As #numfile
Print #numfile, "<LISTE>"
i = 2
While Cells(i, 1) <> ""
    Print #numfile, "<Fiche id=" & i & " NOM=" & Cells(i, 1) & " PRENOM=" & Cells(i, 2) & " ADRESSE=" & Cells(i, 3) & "/>"
    i = i + 1
Wend

Print #numfile, "</LISTE>"
Close #numfile

End Sub

Damien

Merci, merci pour cette réponse complète et, il me semble (je n'ai pas encore testé), très pragmatique.

Petit problème dans VBE/outils/Références ... je n'ai pas Microsoft XML (rien qui se rapporte au XML) ... je suis sous MAC (!?) comment et où puis-je trouver/ajouter cela ?

Merci

Merci BigDams, ton code marche "au poil" ...

Petit détail tout de même les accents ne passent pas ... comment tout passer en UTF-8 ?

Merci

Euh, désolé je suis NUL sur MAC.

Par contre, j'ai l'impression que l'installation d'un composant OpenXML (ou un truc dans le genre) soit necessaire.

Et dans ce cas il faudra sans doute revoir ton code...(Cf google)

Désolé de ne pas pourvoir t'aider plus.

NB : Au cas où :la reference Microsoft XML,V6 fait le lien avec la dll => c:\windows\system32\msxml6.dll SUR PC.

Je pense que cela prendra moins de temps de créer ton fichier XML a la main (via macro manipulation de chaine)

++

Damien

Rechercher des sujets similaires à "xml"