Lire fichiers XML en vba [Résolu]

setfocus 47 Messages postés dimanche 16 avril 2006Date d'inscription 7 novembre 2011 Dernière intervention - 18 août 2009 à 10:35 - 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 

4 réponses

Répondre au sujet
Renfield 17307 Messages postés mercredi 2 janvier 2002Date d'inscription 18 janvier 2017 Dernière intervention - 18 août 2009 à 11:22
+3
Utile
1
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
Cette réponse vous a-t-elle aidé ?  
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
setfocus 47 Messages postés dimanche 16 avril 2006Date d'inscription 7 novembre 2011 Dernière intervention - 18 août 2009 à 11:45
0
Utile
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
Renfield 17307 Messages postés mercredi 2 janvier 2002Date d'inscription 18 janvier 2017 Dernière intervention - 18 août 2009 à 11:47
0
Utile
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

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.