Lire fichiers XML en vba

Résolu
setfocus Messages postés 47 Date d'inscription dimanche 16 avril 2006 Statut Membre Dernière intervention 7 novembre 2011 - 18 août 2009 à 10:35
 youssef - 31 déc. 2013 à 22:07
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

Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
18 août 2009 à 11:22
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
3
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
0
Rejoignez-nous