Bonjour,

j'ai feuilleté les différents tutos permettant d'importer des fichiers XML notamment celui ci:
http://arkham46.developpez.com/artic...ge=page_4#L5-B

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
'Voir arborescence du fichier
Function ReadXMLFileXMLIndent()
Dim oXML As MSXML2.DOMDocument
Dim oNode As MSXML2.IXMLDOMNode
Set oXML = New MSXML2.DOMDocument
 
oXML.async = False
oXML.Load "C:\****\exportbis.xml"
 
For Each oNode In oXML.DocumentElement.ChildNodes
   Debug.Print oNode.BaseName
Next
 
End Function
j'ai un message comme quoi la variable objet n'est pas définie. comme je débute dans ce type de traitement je ne comprends pas d'où vient le problème d'autant que j'ai chargé la référence Microsoft XML 6.

Du coup j'ai essayé le code source ci-dessous (trouvé sur http://www.access-programmers.co.uk/...d.php?t=213209) avec le fichier xml en pièce jointe ici export.zip

en testant dans ma base Access aucun message d'erreurs (j'ai aussi compiler mon projet vba) mais aucun import de données non plus dans la table
j'ai vérifié les liens des fichiers et le nom des variables, des champs et des tables pourtant et je suis (presque) sur que c'est correct.

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
'Importer des fichiers XML dans Access lorsque ceux ci utilisent des attribut.
Public Sub ImportXML2()
 
Dim xmlDoc As MSXML2.DOMDocument
Dim franchiseNode As MSXML2.IXMLDOMNode
Dim playerNode As MSXML2.IXMLDOMNode
Dim rs As DAO.Recordset
 
Set rs = CurrentDb.OpenRecordset("rosters")
Set xmlDoc = New MSXML2.DOMDocument
 
With xmlDoc
 
    .Load "C:\***\export.xml"
 
    If .parseError.ErrorCode <> 0 Then
        MsgBox "Error loading: " & .parseError.reason
        'need to exit gracefully here
    End If
 
    For Each franchiseNode In .FirstChild.ChildNodes
 
        For Each playerNode In franchiseNode.ChildNodes
            rs.AddNew
            rs!franchise = franchiseNode.Attributes.getNamedItem("id").Text
            rs!player = playerNode.Attributes.getNamedItem("id").Text
            rs!Status = playerNode.Attributes.getNamedItem("status").Text
            rs.Update
        Next playerNode
 
    Next franchiseNode
 
End With
 
Set xmlDoc = Nothing
Set franchiseNode = Nothing
Set playerNode = Nothing
Set rs = Nothing
 
End Sub
en mettant des debug.print un peu partout j'ai l'impression que la boucle ne marche pas ou que la fonction ne trouve pas les noeuds.
J'ai du passé à côté de quelque chose mais je ne vois pas quoi... je n'en suis qu'à des traitements simples alors que ce que je cherche à faire est beaucoup plus complexe. Donc si quelqu'un pouvait me mettre sur la voie en me fournissant une base de travail toute faite avec un fichier xml (possédant plusieurs attributs différents pour chaque noeud) et un code source simple qui fonctionne ça m'arrangerait pour la suite qui s'avère plus compliqué.

Petite précision pour la suite : le fichier xml que je souhaite importer fait 110 mo et comporte 2 600 000 de lignes (je ne m'intéresserait qu'à certaines informations à l'intérieur mais ça va représenter un gros volume de données...) donc si vous avez des suggestions pour éviter que les traitements prennent trop longtemps je suis preneur car l'optimisation de code et moi ça fait deux



un grand merci d'avance à celui qui me sortira du pétrin