Lire fichiers XML en vba [Résolu]

Messages postés
47
Date d'inscription
dimanche 16 avril 2006
Dernière intervention
7 novembre 2011
- 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 

Votre réponse

4 réponses

Meilleure réponse
Messages postés
17308
Date d'inscription
mercredi 2 janvier 2002
Dernière intervention
22 août 2018
- 18 août 2009 à 11:22
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

Merci Renfield 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 90 internautes 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
Dernière intervention
7 novembre 2011
- 18 août 2009 à 11:45
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
17308
Date d'inscription
mercredi 2 janvier 2002
Dernière intervention
22 août 2018
- 18 août 2009 à 11:47
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

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.