Macro export xml

bestsh

XLDnaute Nouveau
Bonjour à tous,

Je cherche à exporter des données sous format xml pour une application web.
Le fichier cible est le fichier export.xml avec la mise en forme suivante :

Code:
	<channel>
		<job>  
			<offre>007FSQS</offre>
			<datepub>25/07/2013</datepub>
			<descriptif>Vous effectuez les réparations (embrayage, distribution...), révisions, précontrôles périodiques, de véhicules automobiles particuliers selon les règles de sécurité et la réglementation. </descriptif>
			<localisation>MANTES LA JOLIE</localisation>
			<contrat>CDI</contrat>
			<statut>Employé qualifié</statut>
			<niveau></niveau>
			<aptitudes></aptitudes>
			<salaire>19800</salaire>
			<horaires>39h00 HEBDO Horaires normaux</horaires>
			<deplacement>Autre </deplacement>
			<nbsal>6 A 9 SALARIES</nbsal>
			<activite>Activités des sièges sociaux</activite>
			<contact>MGA - M. PREVOST FrancisE-mail : 1491@midasfrance.net</contact>
			<email1>1491@midasfrance.net</email1>
			<email>1491@midasfrance.net</email>
			<savesal>Mensuel de 1 650,00 euros sur 12 mois </savesal>
			<Civ>M. </Civ>
			<Nom>M. PREVOST Francis</Nom>
			<intitule>Mécanicien / Mécanicienne automobile</intitule>
			<secteur>Activités des sièges sociaux</secteur>
			<societe>MGA</societe>
		</job>
	</channel>

Mon fichier source est le fichier source.xlsx
La macro à corriger est dans le fichier texte.
____________________________________________________________________
Il faut que je crée une macro qui :
récupère la plage de données --> c'est ok
récupère le path du fichier xml (fenêtre enregistrer sous) --> c'est ok
crée le fichier xml --> c'est ok
Ajoute l'entête --> c'est ok

Ensuite j'ai des difficultés..

--> Je souhaite que pour chaque ligne, il mette en forme les données comme dans le fichier export.xml
pour le moment ma macro boucle sur les cellules et donc la mise en forme ne me va pas du tout...

Si quelqu'un pouvait m'aider à finaliser ma macro cela me sauverait la vie (au moins :)

J'espère que c'est clair pour vous...
Merci pour votre aide.
 

Pièces jointes

  • projet export xml.zip
    15.9 KB · Affichages: 39

mromain

XLDnaute Barbatruc
Re : Macro export xml

Bonjour bestsh, le forum,

Voici un essai avec ce code :
VB:
Sub ExportToXml()
Dim zoneSelection As Range, zoneEntete As Range, tabLigne() As Variant, tabEntete() As Variant
Dim pathFichierXml As String, fichierXml As TextStream, curCell As Range
    
    'récupérer la plage de données
     Set zoneSelection = Application.InputBox("Sélectionnez la plage de données à exporter en XML :", "Sélection", , , , , , 8)
    
    'récupérer le path du fichier xml (fenêtre enregistrer sous)
     pathFichierXml = Application.GetSaveAsFilename("Export.xml", "Fichier XML (*.xml), *.xml", , "Exporter dans un fichier XML")
    
    'créer le fichier xml
     Set fichierXml = CreateObject("Scripting.FileSystemObject").CreateTextFile(pathFichierXml, True)
    
    'ajouter l'entête
     fichierXml.WriteLine "<?xml version=""1.0"" encoding=""UTF-8""?>"
    fichierXml.WriteLine vbTab & "<channel>"
    
    With Feuil1
        tabEntete = .Range(.Cells(1, 1), .Cells(1, .Columns.Count).End(xlToLeft)).Value
        For Each curCell In Application.Intersect(zoneSelection.EntireRow, .Columns(1))
            tabLigne = .Range(curCell, .Cells(curCell.Row, .Columns.Count).End(xlToLeft)).Value
            fichierXml.WriteLine ComputeXmlLine(tabLigne, tabEntete)
        Next curCell
    End With
    
    
    fichierXml.WriteLine vbTab & "</channel>"
End Sub

Private Function ComputeXmlLine(tabLigne() As Variant, tabEntete() As Variant) As String
Dim i As Long
    ComputeXmlLine = vbTab & vbTab & "<job>"
    For i = LBound(tabLigne, 2) To UBound(tabLigne, 2)
        If tabLigne(1, i) <> vbNullString Then ComputeXmlLine = ComputeXmlLine & vbNewLine & vbTab & vbTab & vbTab & "<" & tabEntete(1, i) & ">" & tabLigne(1, i) & "</" & tabEntete(1, i) & ">"
    Next i
    ComputeXmlLine = ComputeXmlLine & vbNewLine & vbTab & vbTab & "</job>"
End Function

A+
 

bestsh

XLDnaute Nouveau
Re : Macro export xml

Bonjour mromain, le forum,

Tout d'abord merci pour votre réponse rapide.
Au départ j'ai eu une erreur sur le nom de la macro que j'ai changé en xlsToxml.
Ensuite une erreur user defined-type non defined sur Textstream mais avec une recherche rapide j'ai dù activer la Microsoft Runtime Library dans Outils/Références.

Maintenant j'ai une erreur sur la methode Intersect en ligne 20 : "method intersect of object _application failed"
ligne : For Each curCell In Application.Intersect(zoneSelection.EntireRow, .Columns(1))
Je n'ai pas réussi à voir où était l'erreur.


Pouvez vous me dire si cela fonctionne pour vous?
 

bestsh

XLDnaute Nouveau
Re : Macro export xml

Juste une question :

Nous avons Feuil1 qui n'est pas défini

With Feuil1
tabEntete = .Range(.Cells(1, 1), .Cells(1, .Columns.Count).End(xlToLeft)).Value
For Each curCell In Application.Intersect(zoneSelection.EntireRow, .Columns(1))
tabLigne = .Range(curCell, .Cells(curCell.Row, .Columns.Count).End(xlToLeft)).Value
fichierXml.WriteLine ComputeXmlLine(tabLigne, tabEntete)
Next curCell
End With

Cela peut il être dû à ça? J'ai essayé de le déclarer feuil As String et de mettre feuil = ActiveSheet.Name juste avant en changeant bien sur Feuil1 en feuil...

erreur...

Une idée? mes compétences sont un peu limitées là dessus.
 

mromain

XLDnaute Barbatruc
Re : Macro export xml

Bonjour bestsh, le forum

Essaye en remplaçant Feuil1 par zoneSelection.Parent.
Mais c'est tout de même bizarre... Chez moi, et sur le fichier que tu as mis dans ton premier post, ça marche.

Sinon, pour éviter d'avoir à cocher la référence Microsoft Scripting Runtime, tu peux remplacer TextStream par Object.

A+
 

Statistiques des forums

Discussions
314 655
Messages
2 111 605
Membres
111 217
dernier inscrit
aladinkabeya2