XL 2019 xml

maguie

XLDnaute Junior
Bonjour
Je souhaiterais récupérer certaines données du fichier xml en pièce jointe. Mais uniquement certaines données provenant de la balise table et mettre ensuite ces données sous format ordonné dans un tableau excel. Quelqu'un pourrait-il m'aider.
Merci beaucoup.
 

Pièces jointes

  • ESSAI.txt
    6.9 KB · Affichages: 42

patricktoulon

XLDnaute Barbatruc
bonjour
quelle table? il y en a plusieurs

il faut être plus précis dans vos demande sinon on ira pas bien loin

tu a celle ci
HTML:
<Table>
<TR>
<TD>Secteur </TD>

<TD>V50 </TD>

<TD>Code Client </TD>

<TD>132662 </TD>
</TR>

<TR>
<TD>Date Commande </TD>

<TD>21.01.2021 </TD>

<TD>Date facture </TD>

<TD>22.01.2021 </TD>
</TR>

<TR>
<TD>Commande Client </TD>

<TD>NOM&amp;VV200000 </TD>

<TD>N° Facture </TD>

<TD>130803633 </TD>
</TR>

<TR>
<TD>Commande Urgo </TD>

<TD>153857494 </TD>

<TD>Bon de livraison </TD>

<TD>20313949 </TD>
</TR>

<TR>
<TD>TVA INTRACO. </TD>

<TD>FR54440312114 </TD>

<TD/>

<TD/>
</TR>
</Table>

ou encore celle ci
HTML:
<Table>
<TR>
<TH>Code Article </TH>

<TH>CIP ACL </TH>

<TH>Désignation des articles Lot - Date de péremption </TH>

<TH>Quantité facturée </TH>

<TH>Unité gratuite </TH>

<TH>% Remise </TH>

<TH>PUHT tarif </TH>

<TH>PUHT vente </TH>

<TH>Total HT </TH>

<TH>Code TVA </TH>
</TR>

<TR>
<TH>« Venant à nos droits suite au transfert de cette créance en vertu du contrat d#affacturage liant Laboratoires Urgo Healthcare à SGF (Société Générale Factoring), SGF est seule habilitée à en recevoir le paiement, mais a toute liberté pour désigner un mandataire pour procéder à cette collecte. Les Laboratoires Urgo Healthcare, expressément mandatés pour ce faire, procéderont au prélèvement des sommes dues à l#échéance convenue. Le paiement entre les mains des Laboratoires Urgo Healthcare mandataire de SGF, sera libératoire, et ce jusqu#à notification par SGF de la fin du mandat délivré par ses soins à Laboratoires Urgo Healthcare. Laboratoires Urgo Healthcare devra être avisé de toute demande de renseignements et réclamations. » 552569 3401098089279 URGO APHTES 12 35,00 % 9,39 6,10 73,20 AB 92517 - 31.08.2023 552605 3401048107183 URGO ONGLES ABIMES 3,3 ML 12 35,00 % 15,96 10,37 124,44 AB 87045 - 30.04.2023 552646 3401021104772 URGO ONGLES RONGES PLUS 9ML 12 35,00 % 9,48 6,16 73,92 AB 89978 - 31.07.2023 553110 3401560193756 ALVITYL PHYTO-STRESS 28 CP 12 50,00 % 9,22 4,61 55,32 A2 250656 - 30.11.2022 553112 3664492000183 ALVITYL MELA-SOMMEIL 30 GEL 12 50,00 % 12,56 6,28 75,36 A2 UMS38 - 30.11.2022 556179 3401043264546 URGO PANSEMENTS SPRAY 24 35,00 % 10,05 6,53 156,72 AB CH279 - 31.12.2022 556285 3401066005058 NYLEX 4 M X 5 CM 30 66,00 % 0,66 0,22 6,60 AB 30020 - 31.10.2025 556288 3401061110771 NYLEXOCREP 4 M X 10 CM 40 66,00 % 2,31 0,79 31,60 AB 90025 - 31.03.2025 556289 3401061110832 NYLEXOCREP 4 M X 15 CM 120 66,00 % 2,99 1,02 122,40 AB 90027 - 31.07.2025 556445 3401078681097 BTE 5O SACH/2 COMP NT 7,5X7,5 36 75,00 % 9,32 2,33 83,88 AB 098410002 - 30.09.2025 556514 3401360037540 BTE 1 BANDE SOS COUPURES /12 12 30,00 % 7,31 5,12 61,44 AB C32519A1 - 30.11.2024 556711 3401043375297 OPTISKIN 5,3CMX 8CM BTE 10 PTS 6 46,00 % 6,39 3,45 20,70 AB 200501A - 30.04.2025 Echange 552605 3401048107183 URGO ONGLES ABIMES 3,3 ML 3 0,00 0,00 0,00 83949 - 28.02.2023 556517 3664492000237 BTE 30 PTS PEAU SENSIBLE 2 0,00 0,00 0,00 67478 - 31.03.2022 Ristourne additionnelle cf. article 2 de la sous-annexe 3-5 Convention Premium  0.38 %: 3,38</TH>
</TR>
</Table>

ou encore celle ci
HTML:
<Table>
<TR>
<TD>Total </TD>

<TD>Escompte </TD>

<TD>Net </TD>

<TD>Code </TD>

<TD>Taux </TD>

<TD>Total </TD>
</TR>

<TR>
<TD>HT </TD>

<TD/>

<TD>HT </TD>

<TD>TVA </TD>

<TD>TVA </TD>

<TD>TVA </TD>
</TR>

<TR>
<TD>130,18 EUR</TD>

<TD/>

<TD> 130,18 EUR</TD>

<TD>A2</TD>

<TD> 5,50 %</TD>

<TD> 7,16 EUR </TD>
</TR>

<TR>
<TD>752,02 EUR</TD>

<TD/>

<TD> 752,02 EUR </TD>

<TD>AB</TD>

<TD> 20,00 %</TD>

<TD> 150,40 EUR</TD>
</TR>
</Table>

ou encore celle ci
HTML:
<Table>
<TR>
<TD>Total </TD>

<TD>Date </TD>
</TR>

<TR>
<TD>TTC </TD>

<TD>Echéance</TD>
</TR>

<TR>
<TD> 1.039,76 EUR </TD>

<TD>23.03.2021 </TD>
</TR>
</Table>

et j’arrête là car il y en a encore
 

patricktoulon

XLDnaute Barbatruc
re
teste ca dans un fichier provisoire
VB:
sub test()
    Dim laChaine As String, x, fichier As String, fic
    fic = Application.GetOpenFilename("Text Files (*.txt), *.txt", 1, "ouvrir un fichier")
    If fic = False Then Exit Sub
    x = FreeFile
    Open fic For Binary Access Read As #x: laChaine = String(LOF(x), " "): Get #x, , laChaine: Close #x
    t = Split(laChaine, "<Table>")
    t(0) = ""
    For i = 1 To UBound(t)
        t(i) = "<Table>" & Split(t(i), "</Table>")(0)
    Next
    With CreateObject("htmlfile")
        .parentwindow.clipboarddata.setdata "text", Join(t)
        With ActiveSheet
            .Cells(1).Select
            Paste
        End With
        .parentwindow.clipboarddata.clearData "Text"
       Cells.Replace What:="é", Replacement:="é", LookAt:=xlPart
     Cells.Replace What:="è", Replacement:="è", LookAt:=xlPart
     End With


End Sub
perso j'aurais préféré que ce soit des xml et non des TXT pour les loader comme tel
c'est plus facile de récupérer des élémentS dans l'architecture avec le DOM
MAIS bon tu fera avec ;)
 

maguie

XLDnaute Junior
re
teste ca dans un fichier provisoire
VB:
sub test()
    Dim laChaine As String, x, fichier As String, fic
    fic = Application.GetOpenFilename("Text Files (*.txt), *.txt", 1, "ouvrir un fichier")
    If fic = False Then Exit Sub
    x = FreeFile
    Open fic For Binary Access Read As #x: laChaine = String(LOF(x), " "): Get #x, , laChaine: Close #x
    t = Split(laChaine, "<Table>")
    t(0) = ""
    For i = 1 To UBound(t)
        t(i) = "<Table>" & Split(t(i), "</Table>")(0)
    Next
    With CreateObject("htmlfile")
        .parentwindow.clipboarddata.setdata "text", Join(t)
        With ActiveSheet
            .Cells(1).Select
            Paste
        End With
        .parentwindow.clipboarddata.clearData "Text"
       Cells.Replace What:="é", Replacement:="é", LookAt:=xlPart
     Cells.Replace What:="è", Replacement:="è", LookAt:=xlPart
     End With


End Sub
perso j'aurais préféré que ce soit des xml et non des TXT pour les loader comme tel
c'est plus facile de récupérer des élémentS dans l'architecture avec le DOM
MAIS bon tu fera avec ;)
Bonjour
J'ai essayé la macro mais j'ai une erreur
'Paste " ERREUR DE COMPILATION SUB OU FONCTION NON DEFINIE"
 

maguie

XLDnaute Junior
Bonjour,
Super cela fonctionne. Merci beaucoup
Encore une petite question. Puis-je utiliser la macro sur plusieurs xml placés dans un même répertoire.
L'idée est la suivante. La macro lie les fichiers sans les ouvrir et récupère les données dans un fichier unique.
Le but est de récupérer les données des factures dans une base excel afin de les transférer dans un fichier comptable.
Et aussi peut on faire le même procéder avec des fichiers txt formatés.
Merci
 

patricktoulon

XLDnaute Barbatruc
re
ben sur ce modèle tu a un dialog qui te propose de choir un fichier
tu peux choisir celui que tu veux
si tu dois en faire plusieurs d'affilé il te faudra changer ça
.Cells(1).Select en .cells(.usedrange.rows.count,1).offset(2)
pour copier a la suite chaque fichier que tu aura choisi avec le dialog


si ces fichier sont dans un dossier précis et que ils ont tous le meme format(code xml) on peut passer par une boucle dire et les faire tous d'un coup sans passer par un dialog


pour les fichier txt formaté il va falloir être plus précise trop vague ta demande
 

maguie

XLDnaute Junior
re
ben sur ce modèle tu a un dialog qui te propose de choir un fichier
tu peux choisir celui que tu veux
si tu dois en faire plusieurs d'affilé il te faudra changer ça
.Cells(1).Select en .cells(.usedrange.rows.count,1).offset(2)
pour copier a la suite chaque fichier que tu aura choisi avec le dialog


si ces fichier sont dans un dossier précis et que ils ont tous le meme format(code xml) on peut passer par une boucle dire et les faire tous d'un coup sans passer par un dialog


pour les fichier txt formaté il va falloir être plus précise trop vague ta demande
En pj le fichier txt. Je souhaiterais dans un répertoire lire plusieurs fichiers txt mais récupérer uniquement et de façon ordonnée le nom du fournisseur, la date de facture, le numéro de facture, le montant hors taxe, les montants de tva avec le taux approprié et enfin le montant TTC.
Merci
 

Pièces jointes

  • ESSAI TXT FORMATE.txt
    4.6 KB · Affichages: 4

patricktoulon

XLDnaute Barbatruc
re
et ben dis donc, je ne sais pas comment tu les a récupéré ces txt mais ça va être rigolo
a la base je soupçonne fortement un copier coller (xml/html) vers text qui bien sur enlève le balisage
ben si cette idée si tu l'avais pas eu ça aurait été bien ;) 🤣
peut être en jouant du replace sur les tabulation histoire de retrouver une cohérence au niveau des colonnes
mais bon ca va etre cotton

Capture.JPG
mais je garantie rien les headers de colonnes se sont entrecroisés sur 2 lignes lors du paste dans ce fichier text
je suppose qu'une balise "div" était dans la structure de la source de cette table
on se rend bien compte que la 2d partie bleu n'est plus vraiment cohérente avec les intitulés de la première
peut être devrait on réorienter la manœuvre depuis le début car en l’état il sera très compliqué de cibler la bonne donnée a chaque fois pour chaque fichier
si tu a accès a la source mieux vaut partir de là
 

maguie

XLDnaute Junior
re
et ben dis donc, je ne sais pas comment tu les a récupéré ces txt mais ça va être rigolo
a la base je soupçonne fortement un copier coller (xml/html) vers text qui bien sur enlève le balisage
ben si cette idée si tu l'avais pas eu ça aurait été bien ;) 🤣
peut être en jouant du replace sur les tabulation histoire de retrouver une cohérence au niveau des colonnes
mais bon ca va etre cotton

Regarde la pièce jointe 1096983mais je garantie rien les headers de colonnes se sont entrecroisés sur 2 lignes lors du paste dans ce fichier text
je suppose qu'une balise "div" était dans la structure de la source de cette table

peut être devrait on réorienter la manœuvre depuis le début car en l’état il sera très compliqué de cibler la bonne donnée a chaque fois pour chaque fichier
si tu a accès a la source mieux vaut partir de là
Merci pour ton aide. Je vais continuer avec le XML
Très bonne journée
Et encore merci
 

Discussions similaires

Statistiques des forums

Discussions
312 177
Messages
2 085 977
Membres
103 078
dernier inscrit
diomy