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 SubSauf 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 DOMDocumentBon ...
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
- Messages
- 358
- Excel
- 2003-2007 FR
- Inscrit
- 02/08/2011
- Emploi
- Consultant Test Performance / Audit
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 SubDamien
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
- Messages
- 358
- Excel
- 2003-2007 FR
- Inscrit
- 02/08/2011
- Emploi
- Consultant Test Performance / Audit
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