Dans le cadre de mon stage, je dois importer un fichier XML puis le rendre plus lisible
Je voudrais le faire par VBA.
Les recherches que j'ai faites sur internet m'ont dirigé sur cette piste : CreateObject("Microsoft.XMLDOM"), XPath SelecNodes etc..
Malheureusement, je ne comprends pas bien ce langage.
Actuellement, j'utilise cette macro construite avec ce que j'ai trouvé sur internet
VB:
Sub xEssai_Macro_XML()
'Déclarations des variables
Dim fd As Office.FileDialog
Dim strFile As String, WBK As Workbook
'Choisir le fichier avec une boite de dialogue
Set fd = Application.FileDialog(msoFileDialogFilePicker)
With fd
.Filters.Clear
.Filters.Add "FICHIER XML", "*.xml", 1
.Title = "Choisir le fichier XML"
.AllowMultiSelect = False
If .Show = True Then
strFile = .SelectedItems(1)
End If
End With
Application.ScreenUpdating = False
'Importer le fichier dans un tableau dans Excel
strXML_Fic = strFile
Workbooks.OpenXML Filename:=strXML_Fic, LoadOption:=xlXmlLoadImportToList
End Sub
Mais cette macro importe tout le fichier XML alors que le besoin serait de n'importer que certaines colonnes.
Je vous joins un fichier XML dans le fichier ZIP attaché.
Le fichier XML exemple génère une erreur quand on l'importe manuellement ou par macro.
Je ne sais pas pourquoi.
Merci pour l'aide et explications que vous voudrez bien m'apporter.
Normalement je ne devrais pas conseiller un forum concurrent mais ils sont meilleurs pour ça, nous c'est plus le VBA et les formules, c'est pour cela que je suis dans les deux forums.
Quand j'ouvre dans Powerquery, ca donne l'image de mon message #2
Je ne sais pas quelle manipulation faire pour ne pas avoir Table (mais le contenu)
Sinon, j'ai trouvé de code VBA dans le forum
Mais je ne sais pas aller plus loin avec
Ca mets tout dans la même cellule, ligne par ligne.
Code VBA avec le langage XML
VB:
Sub Test()
Dim xmlDoc As DOMDocument
Dim root As IXMLDOMElement
Set xmlDoc = New DOMDocument
xmlDoc.async = False
xmlDoc.Load ThisWorkbook.Path & "\order.exemple.xml"
Set root = xmlDoc.DocumentElement
Cells(1, 1) = root.BaseName
j = 1
BrowseChildNodes root
j = 0
End Sub
Private Sub BrowseChildNodes(root_node As IXMLDOMNode)
Dim i As Long
For i = 0 To root_node.ChildNodes.Length - 1
If root_node.ChildNodes.Item(i).NodeType <> 3 Then
j = j + 1
Cells(j, 1) = root_node.ChildNodes.Item(i).BaseName & "/" & _
root_node.ChildNodes.Item(i).Text
End If
BrowseChildNodes root_node.ChildNodes(i)
Next
End Sub