1 pièce(s) jointe(s)
Lecture de données d'un xml
Bonjour à tous,
Je me permets de vous contacter car cela fait plusieurs jours que je galère à obtenir mon résultat final.
J'ai un fichier XML (cf pièce jointe) qui n'a pas une arborescence concrète tel que parent--> fils--> petit fils--> etc. Donc il est difficile de faire une boucle pour extraire des données à l'aide de VBA.
Je m'explique. Je souhaite extraire certaines données comprises entre différentes lignes de mon fichier xml. Pour cela j'ai créé une boucle qui permet de créer une feuille ou d'effacer la feuille si elle est déjà existante afin de renseigner par feuille des informations.
Voici le code:
Code:
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
| For Each WF_classElement In Gfi_XMLDoc(Gfi_Position_modele(Gfi_indice_modele)).SelectNodes("/PLMXML/WorkflowTemplate")
Gfi_module_enCours = Gfi_indice_modele
GFI_a7_WF_className = WF_classElement.getAttribute("name")
GFI_a7_WF_className_trunc = Left(GFI_a7_WF_className, 30)
GFI_a7_WF_iconKey = WF_classElement.getAttribute("iconKey")
If (InStrRev(GFI_a7_WF_iconKey, "process", , vbTextCompare) > 0) Then
If fct_WsExist(GFI_a7_WF_className_trunc) Then
Sheets(GFI_a7_WF_className_trunc).Cells.Clear
Sheets(GFI_a7_WF_className_trunc).Cells.ClearContents
Sheets(GFI_a7_WF_className_trunc).Activate
Else
ActiveWorkbook.Sheets.Add After:=Worksheets(Worksheets.Count)
ActiveSheet.Name = GFI_a7_WF_className_trunc
End If
Else
GoTo Next_Sentence
End If
Set WF_articles_autoriseElement = Gfi_XMLDoc(Gfi_Position_modele(Gfi_indice_modele)).SelectNodes("/PLMXML/WorkflowBusinessRuleHandler[@name='EPM-check-target-object']/Arguments/UserValue")
GFI_a7_articles_autorisés = WF_articles_autoriseElement(0).getAttribute("value")
If (InStrRev(GFI_a7_articles_autorisés, "-status_allow=", , vbTextCompare) > 0) Then
Sheets(GFI_a7_WF_className_trunc).Cells(7, 3).Value = GFI_a7_articles_autorisés
End If
Next_Sentence:
Next
EXIT_SUB:
End Sub |
En se référençant au fichier xml en pièce jointe, mon code créé bien une feuille par nœud sélectionné. Le problème arrive au niveau de l'information que je souhaite renseigner par feuille. Mon code renseigne à chaque fois la même valeur sur chaque feuille et ce n'est pas ce que je souhaite.
J'aimerai que la boucle ne recommence par à lire le fichier xml dès le début et qu'il continue de lire le fichier.
En expliquant le fichier xml, il créé une feuille pour les lignes suivantes:
6-->286 (I10)
287-->632 (I20)
633-->839 (I21)
840-->1028 (I30)
1029-->1294 (I31)
1295-->1354 (I60)
1355-->1414 (I61)
1415-->1474 (I63)
1475--> fin (I64)
J'aimerai donc qu'entre chaque intervalle (n° ligne), le code ne prenne uniquement que les informations comprises dans ces intervalles.
J'espère avoir été assez claire. Si ce n'est pas le cas dites le moi et j'apporterai des précisions.
Je vous remercie d'avance pour vos réponses et pour le temps utilisés pour traiter mon problème.
Cordialement,