Bonjour,

je suis en train de me lancer dans la lecture de fichiers XML en VBA.
Pour cela, je me base de ce Tutoriel bien connu : https://baptiste-wicht.developpez.co...ipt/xml/xpath/

Petit bémol sur ce tuto, les variables ne sont pas explicitement déclarées. J'y ai donc remédié comme suit :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
 
Option Explicit
 
Sub TutoBaptisteWICHT2()
 
Dim xmlDoc As Object
Dim personneElement, enfantElement As Object
Dim enfants As Object
Dim nom, prenom, etat, age As String
Dim text, nomEnfant, prenomEnfant As String
 
Set xmlDoc = CreateObject("Microsoft.XMLDOM")
 
xmlDoc.Async = "false"
xmlDoc.Load (ThisWorkbook.Path & "\personnes.xml")
 
For Each personneElement In xmlDoc.SelectNodes("/personnes/personne")
'on recupère les éléments sur la personne
 
    nom = personneElement.SelectSingleNode("nom").text
    prenom = personneElement.SelectSingleNode("prenom").text
    etat = personneElement.SelectSingleNode("etat").text
    age = personneElement.getAttribute("age")
    'MsgBox ("Nom : " & nom & vbCrLf & _
            '"Prenom : " & prenom & vbCrLf & _
           ' "Etat civil : " & etat & vbCrLf & _
           ' "Age : " & age)
 
    Set enfants = personneElement.SelectNodes("enfants/enfant")
 
   'S'il y a des enfants
    If enfants.lenght > 0 Then
        text = prenom & " " & nom & " a des enfants :"
        'On boucle sur tous les enfants
        For Each enfantElement In enfants
            nomEnfant = enfantElement.SelectSingleNode("nom").text
            prenomEnfant = enfantElement.SelectSingleNode("prenom").text
            text = text & vbCrLf & "-" & prenomEnfant & " " & nomEnfant
            MsgBox (text)
        Next
    Else
        MsgBox (prenom & " " & nom & " n'a pas d'enfants")
    End If
 
Next
 
Set xmlDoc = Nothing
 
End Sub
J'ai juste une erreur "438" au moment de l'exécution du bloc IF enfants.lenght > 0 Then....
Si j'enlève ce bloc, pas de soucis...

J'ai déclaré "enfants" comme une variable OBJECT. est-ce bien la bonne méthode ?

Merci d'avance pour votre aide !