Lire fichiers XML en vba [Résolu]

Signaler
Messages postés
47
Date d'inscription
dimanche 16 avril 2006
Statut
Membre
Dernière intervention
7 novembre 2011
-
 youssef -
Bonjour,

Un répertoire contient plusieurs fichiers XML de structures identiques.
Je veux réaliser un fichier Excel me listant les valeurs d'une certaine balise de ces fichiers.
Voici un bout de code qui fonctionne très bien... jusqu'au 10ème fichier! à partir du 10ème fichier une erreur "variable objet ou bloc with non définit" s'affiche.
   
Set ObjFSO = CreateObject("Scripting.FileSystemObject")
    Set MonRep = ObjFSO.GetFolder("\\chemin")
    Set ListFichiers = MonRep.Files
    i = 2
    For Each MonFich In ListFichiers
        If Right(MonFich.Name, 3) = "xml" Then
             XMLDoc.Load (MonFich)
             Set XMLNode = XMLDoc.selectSingleNode("//Service")
             ActiveSheet.Cells(i, 1) = XMLNode.Text
        End If
        i = i + 1
    Next


Auriez vous une idée?
En vous remerciant d'avance pour l'aide apportée...

Débutant... à vie!

3 réponses

Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
62
normal, tu fais un Set XMLNode =
et tu utilises derrière XMLNode.Text sans tester si tu l'as bien récupérée...

a voir si ton fichier XML la contient bien.

à noter qu'il est inutile de passer par FSO en VBA :

Dim sFileName As String 
Dim i As Long 
Dim oXML As DOMDocument60 
Dim oNode As IXmlDomNode 
    Set oXML = New DOMDocument60 
    oXML.Async = False 
    i = 2 
    sFileName = Dir$("\\chemin\*.xml") 
    Do While LenB(sFileName) 
        oXML.Load "\\chemin" & sFileName
        Set oNode = oXML.selectSingleNode("//Service") 
        If Not Nothing Is oNode Then 
            ActiveSheet.Cells(i, 1) = oNode.Text 
            i = i +1 
        End If 
        sFileName = Dir$() 
    Loop 



Renfield - Admin CodeS-SourceS - MVP Visual Basic
voici une solution. ça marche bien

Sub de()
Dim xmlDoc As Object
Dim xmlImps As Object
Dim xmlImp As Object
Dim xmlView As Object
Dim xmlComment As Object
Dim xmlNew As Object
Set xmlDoc = CreateObject("MSXML2.DOMDocument")
xmlDoc.Load "C:\lien.xml"
Set element = xmlDoc.DocumentElement.GetElementsByTagName("conceptGrp")
For Each noeud In element
MsgBox (noeud.nodeTypedValue)
Next
End Sub
Messages postés
47
Date d'inscription
dimanche 16 avril 2006
Statut
Membre
Dernière intervention
7 novembre 2011

Salut et merci de ta réponse.

pour le tag, tous les fichiers XML la contiennent obligatoirement. (valeur obligatoire lors de la création du XML via un site).
Pour fso tu as raison!! et d'ailleur, maintenant, ca marche!

Merci
Débutant... à vie!
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
62
tu devais pas avoir mis le async.
du coup, tu exploitais le fichier alors qu'il n'était pas forcément chargé à fond....


Renfield - Admin CodeS-SourceS - MVP Visual Basic