Option Explicit

Dim objDOM As DOMDocument
 
 
Sub Creation_interface()
    'Définit la plage de cellules qui va servir pour la création du fichier xml
    CreationFichierXML Worksheets("nom de la feuille").Range("A:AH")
End Sub
 
 
Sub CreationFichierXML(Plage As Range)

Dim XnodeRoot As IXMLDOMElement, oNode As IXMLDOMNode
Dim XNom1 As IXMLDOMElement
Dim XNom2 As IXMLDOMElement
Dim XNom3 As IXMLDOMElement
Dim XNom4 As IXMLDOMElement
Dim XNom5 As IXMLDOMElement
Dim XNom6 As IXMLDOMElement
Dim Cmt As IXMLDOMComment
Dim Entete As Range, Cell As Range
Dim i As Integer, j As Integer, z As Integer
Dim w1 As Worksheet
 
Set Entete = Plage.Rows(1)
Set w1 = Sheets("nom de la feuille")
Set Plage = w1.Range("A" & Rows.Count).End(xlUp)
 
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 et version xml
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("le nom de votre racine")
objDOM.appendChild XnodeRoot 'ici on définit la balise racine du fichier xml

'Boucle sur les données du tableau
For i = 1 To Plage.Rows.Count ' ici on récupère les données lignes
    Set XNom1 = objDOM.createElement("le nom d'une boucle")
    XnodeRoot.appendChild XNom1 'ici on indique où le noeud est le fils et le parent Parent.appendchild fils
        
    For j = 1 To 3 'ici on détermine les colonnes que l'on souhaite rattacher
        CreationElement Entete.Cells(1, j), Plage.Cells(i, j), XNom1 'ici on définit les balises fils rattachées à la boucle
    Next j

    Set XNom2 = objDOM.createElement("le nom de la boucle")
    XnodeRoot.appendChild XNom2
    
    Set XNom3 = objDOM.createElement("le nom de la boucle")
    XNom2.appendChild XNom3 'ici on indique où le noeud est le fils et le parent Parent.appendchild fils
    
    For j = 4 To 20
        CreationElement Entete.Cells(1, j), Plage.Cells(i, j), XNom3
     Next j

    Set XNom4 = objDOM.createElement("le nom de la boucle")
    XNom2.appendChild XNom4 'ici on indique où le noeud est le fils et le parent Parent.appendchild fils
    
    For j = 21 To 26
        CreationElement Entete.Cells(1, j), Plage.Cells(i, j), XNom4
     Next j
     
    Set XNom5 = objDOM.createElement("le nom de la boucle")
    XNom2.appendChild XNom5 'ici on indique où le noeud est le fils et le parent Parent.appendchild fils
    
    For j = 27 To 32
        CreationElement Entete.Cells(1, j), Plage.Cells(i, j), XNom5
     Next j
    
    For z = 1 To Range("AG" & Rows.Count).End(xlUp).Row
        If w1.Cells(z, "AG") <> "" Then ' avec cette condition on créé une récurrence pour récupérer les éléments fils qui seront rattachés à la boucle
        Set XNom6 = objDOM.createElement("le nom de la boucle")
        XNom2.appendChild XNom6 'ici on indique où le noeud est le fils et le parent Parent.appendchild fils
    
    For j = 33 To 41
        CreationElement Entete.Cells(1, j), Plage.Cells(z, j), XNom6
    
    Next j
    
    End If
        Next z
     
Next i

objDOM.Save "C:\Users\le nom de l'utilisateur\Desktop\nom du fichier où sera déposé le fichier créé\Interface" & "_" & Range("D2") & "_" & Range("E2") & ".xml" 'ici j'ai défini le nom que le fichier aurait. Je suis allé récupéré des données de cellules qui constituent le nom

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
