Process trop long VBA XML

Bonjour,

J’ai un problème au niveau du temps d’acquisition qui est beaucoup trop long (6 min pour un fichier).

J’extrais sous vba des données provenant d’un fichier XML.

Mon process est long car je boucle X fois dans l’intégralité du fichier ! J’aimerais boucler sur un bloc de balise et passer à un autre bloc. Sur l’exemple du fichier donné ci-dessous je voudrais pouvoir boucler dans les balises « balisepere » et pouvoir extraire des valeurs (pas toutes) dans chaque nœud.

J’ai pu voir sur les forums des méthodes pour rentrer dans les balises excel mais je n’arrive pas à l’adapter.

Je vous mets aussi un bout de mon programme pour vous montrer la méthode que j’utilise que j’ai « adapté » pour le fichier xml que je vous ai mis.

For Xn = 0 To X - 1

'obtention des types

genre = oXML.getElementsByTagName("noeud1").Item(Xn).Attributes.getNamedItem("Type").NodeValue

ActiveSheet.Cells(Xn + i, 1) = genre

'si type = C ou S on recupere les données equipement

If genre = "Connector" Or genre = "Shell" Then

equipement = oXML.getElementsByTagName("noeud1").Item(Xn).Attributes.getNamedItem("tag").NodeValue

ActiveSheet.Cells(Xn + i, 3) = equipement

End If

For Yn = 0 To Y - 1

If xml_doc.getElementsByTagName("noeud2").Item(Yn).Attributes.getNamedItem("info").NodeValue = equipement Or xml_doc.getElementsByTagName("noeud2").Item(Yn).Attributes.getNamedItem("info2").NodeValue = equipement Then

pin = xml_doc.getElementsByTagName("noeud2").Item(Yn).Attributes.getNamedItem("info3").NodeValue

ref = xml_doc.getElementsByTagName("noeud2").Item(Yn).Attributes.getNamedItem(“tag").NodeValue

End If

Next Yn

Next Xn

35exemple.xml (375.00 Octets)

Bonjour Sarah,

En utilisant le XMLDom il me semble que ça peut être rapide.

Voir fichier test joint qui lit et décode le 'exemple.xml' si il est dans le même dossier :

Sub test()
Dim Xml As Object, elem As Object, LM As Object, Lg As Object
Dim T() As Variant, idx As Long

    Set Xml = CreateObject("Microsoft.XMLDOM")
    Xml.Load ActiveWorkbook.Path & "\exemple.xml"
    idx = 0
    ReDim T(3, idx)
    T(0, 0) = "tag"
    T(1, 0) = "type"
    T(2, 0) = "info"
    T(3, 0) = "info2"

    Set elem = Xml.getElementsByTagName("balisepere")
    For Each LM In elem
        idx = idx + 1
        ReDim Preserve T(3, idx)

        Set Lg = LM.getElementsByTagName("noeud1")
        T(0, idx) = Lg(0).Attributes(0).NodeValue
        T(1, idx) = Lg(0).Attributes(1).NodeValue

        Set Lg = LM.getElementsByTagName("noeud2")
        T(2, idx) = Lg(0).Attributes(0).NodeValue
        T(3, idx) = Lg(0).Attributes(1).NodeValue 
    Next

    Set Lg = Nothing
    Set elem = Nothing
    Set Xml = Nothing
    Sheets("Feuil1").Range("A1").Resize(UBound(T, 2) + 1, UBound(T, 1) + 1) = Application.Transpose(T)
End Sub

Pierre

43lirexml.xlsm (18.11 Ko)

merci pour votre réponse ca je vais tester ca !!

Rechercher des sujets similaires à "process trop long vba xml"