Microsoft 365 Manipuler les données XML à partir d'Excel

  • Initiateur de la discussion Initiateur de la discussion Loulou27
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

Loulou27

XLDnaute Nouveau
Bonjour,

Voilà mon sujet :
Je souhaite à partir d'excel lire les données dans un fichier XML

De ce que je comprends, le xml est potentiellement comme des répertoires => copie par un logiciel pour comprendre la structure car je n'ai aucune connaissance au sujet des xml
1768207998452.png



Ce que j'ai en tête, c'est en partant de cette référence "OR-xxxxx" (rechercher par le biais d'une feuille excel), je remonte dans le "répertoire parent" VddEcu pour ensuite rechercher d'autres référence dans les autres "sous-répertoires" pour les vérifier

J'espère avoir été compréhensif !!!

Merci pour votre aide / retour


N.B : bien sûr, j'arrive à remettre au excel le fichier xml mais cela n'est pas très pratique pour travailler dessus et je pense que le mieux est de rester en xml

Je pense que le format du fichier xml n'est pas conforme mais je ne peux pas le modifier car il vient d'un outil que j'utilise



Si je modifie l'entête du xml, j'ai du mieux

avant :
<VddDiagProjects xmlns="http://......" xmlns:xsd="http://....." xmlns:xsi="http://....." xsi:schemaLocation="http://..... http://..... http://..... >

après :
<VddDiagProjects>

Dois-je donc passer par un fichier temporaire qui prendrai le xml souhaité pour l'enregistrer dans le même format avec l'entête modifié ou y'a-t-il une astuce ?
 
Dernière édition:
Salut,
tu as un xml avec un name space (xmlns:ns) voici un code vba pour gérer ce type de xml :
VB:
Sub LireVddDiagProjects()

    Dim xml As Object                ' MSXML2.DOMDocument60
    Dim nodes As Object              ' IXMLDOMNodeList
    Dim node As Object               ' IXMLDOMNode
    Dim f As Worksheet
    Dim ligne As Long

    '--- Feuille de sortie
    Set f = ThisWorkbook.Sheets("Feuil2")
    f.Cells.Clear
    f.Range("A1:D1").Value = Array("ID OR", "Description", "Catégorie", "Paramètres")
    ligne = 2

    '--- Création du DOM (late binding)
    Set xml = CreateObject("MSXML2.DOMDocument.6.0")
    xml.async = False
    xml.validateOnParse = False

    '--- Charger le fichier XML
    If Not xml.Load("D:\Temp\VddDiag.xml") Then
        MsgBox "Erreur de chargement du XML"
        Exit Sub
    End If

    '--- Déclarer le namespace (méthode correcte MSXML)
    xml.SetProperty "SelectionNamespaces", _
        "xmlns:ns='http://example.com/vdddiag/projects'"   ' <-- adapte l’URL

    '--- Récupérer tous les nœuds OR
    Set nodes = xml.SelectNodes("//ns:OR")

    If nodes.Length = 0 Then
        MsgBox "Aucun nœud OR trouvé. Vérifie le namespace."
        Exit Sub
    End If

    '--- Parcours des OR
    For Each node In nodes

        Dim idOR As String
        Dim desc As String
        Dim cat As String
        Dim params As String

        ' ID
        idOR = node.Attributes.getNamedItem("id").Text

        ' Description
        On Error Resume Next
        desc = node.SelectSingleNode("ns:Description").Text
        On Error GoTo 0

        ' Catégorie
        On Error Resume Next
        cat = node.SelectSingleNode("ns:Category").Text
        On Error GoTo 0

        ' Paramètres
        params = LireParametres_Late(node)

        '--- Écriture dans Excel
        f.Cells(ligne, 1).Value = idOR
        f.Cells(ligne, 2).Value = desc
        f.Cells(ligne, 3).Value = cat
        f.Cells(ligne, 4).Value = params

        ligne = ligne + 1

    Next node

    MsgBox "Lecture terminée"

End Sub

'----------------------------------------------------------
' Fonction : lit tous les paramètres d’un OR (late binding)
'----------------------------------------------------------
Function LireParametres_Late(n As Object) As String

    Dim pList As Object
    Dim p As Object
    Dim txt As String

    Set pList = n.SelectNodes("ns:Parameters/ns:Parameter")

    For Each p In pList
        txt = txt & p.Attributes.getNamedItem("name").Text & "=" & p.Text & "; "
    Next p

    LireParametres_Late = txt

End Function
Ce code lit les noeuds OR et les affiche dans la feuille Feuill2 du classeur avec comme source le xml suivant :
XML:
<?xml version="1.0" encoding="UTF-8"?>
<VddDiagProjects
    xmlns="http://example.com/vdddiag/projects"
    xmlns:xsd="http://www.w3.org/2001/XMLSchema"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="
        http://example.com/vdddiag/projects
        http://example.com/vdddiag/projects/schema.xsd">

    <VddEcu name="ECU_Moteur" version="1.2.4">

        <OR id="OR-12345">
            <Description>Lecture des défauts moteur</Description>
            <Category>Diagnostic</Category>
            <Parameters>
                <Parameter name="Timeout" unit="ms">500</Parameter>
                <Parameter name="Retries">3</Parameter>
            </Parameters>
        </OR>

        <OR id="OR-67890">
            <Description>Effacement des défauts</Description>
            <Category>Maintenance</Category>
            <Parameters>
                <Parameter name="SecurityLevel">2</Parameter>
            </Parameters>
        </OR>

        <OR id="OR-44556">
            <Description>Lecture des valeurs en temps réel</Description>
            <Category>Mesure</Category>
            <Parameters>
                <Parameter name="SamplingRate" unit="Hz">10</Parameter>
            </Parameters>
        </OR>

    </VddEcu>

</VddDiagProjects>

VddDiag.png


A adapter La feuille , le chemin du xml source, mettre l'url (xmlns) du fichier source

Nullosse
 
Dernière édition:
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
1
Affichages
2 K
Retour