Lire fichiers XML en vba [Résolu]

Messages postés
47
Date d'inscription
dimanche 16 avril 2006
Statut
Membre
Dernière intervention
7 novembre 2011
- - Dernière réponse :  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!
Afficher la suite 

3 réponses

Meilleure réponse
Messages postés
17283
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
21 juillet 2019
56
3
Merci
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

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 111 internautes nous ont dit merci ce mois-ci

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
Commenter la réponse de Renfield
Messages postés
47
Date d'inscription
dimanche 16 avril 2006
Statut
Membre
Dernière intervention
7 novembre 2011
0
Merci
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!
Commenter la réponse de setfocus
Messages postés
17283
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
21 juillet 2019
56
0
Merci
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
Commenter la réponse de Renfield