IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

[Version 2304] Macro excel > génération d'un fichier xml cible


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Consultant santé
    Inscrit en
    Mai 2023
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant santé
    Secteur : Santé

    Informations forums :
    Inscription : Mai 2023
    Messages : 4
    Points : 1
    Points
    1
    Par défaut [Version 2304] Macro excel > génération d'un fichier xml cible
    Bonjour à tous,

    Je me permets de poster ici pour essayer de simplifier au maximum un tâche que je rencontre dans mon quotidien.
    Je dois régulièrement intégrer des flux xml dans un outil afin d’en vérifier le bon fonctionnement. Je crée donc « à la main » ce fichier xml en complétant les différentes balises qui m’intéressent avant de l’intégrer. J’aimerais pouvoir un peu automatiser la chose car c’est assez fastidieux de systématiquement reprendre manuellement un xml avant intégration.

    J’ai donc cherché de mon côté si une macro était possible afin de créer directement cet xml à partir d’un fichier excel où les données que je souhaite vérifier seraient complétées. N’étant pas du tout calé sur le sujet, ce fut un échec.
    Je me tourne donc vers vous pour m’aider dans cette tâche.

    Je souhaiterais obtenir une macro qui génère un fichier xml (au format souhaité) avec les données du fichier excel directement complétées dans les balises afin qu’il soit intégrable sans même avoir à le vérifier manuellement avant.

    A cette fin, :

    • Voici la structure du fichier excel avec les données qui m’intéressent. L’objectif étant que ce soit le fichier de travail que je complète en amont pour générer le xml. Je peux joindre le fichier directement si nécessaire (ayant vu que ce n'était pas recommandé de base, je mets une capture d'écran à la place).
    Nom : 343288457_755832575994089_4032988624933852820_n.png
Affichages : 440
Taille : 21,4 Ko
    • Je joins le fichier xml cible dont le format est à respecter. Ce fichier contient les données du fichier excel + d’autres données supplémentaires qui doivent apparaitre aussi bien évidemment mais qui n’ont aucun impact sur mes intégrations et peuvent donc rester telles quelles.

    A noter :

    • Il est tout à fait possible de toucher le fichier excel source en modifiant, déplaçant, ajoutant une ou plusieurs colonne(s) etc. si cela rend plus facile la génération de l’xml derrière (par exemple en ajoutant toutes les colonnes des données non essentielles ou autre).
    • Chaque section de l’xml se compose d’un « cumul » qui fait la somme des montants de chaque sous-section qu’elle intègre. Cela n’apparait pas dans l’excel fourni mais ces cumuls sont importants et font partie des données à vérifier.
    • Il est bien évidemment possible d’avoir des lignes avec des valeurs différentes dans le fichier excel (le cas excel/xml présenté est volontairement simpliste). Je peux fournir si nécessaire un fichier xml plus « complexe » pour illustrer la cible avec de multiples NIR notamment.

    J’espère avoir été le plus exhaustif possible et je reste à disposition si jamais quelque chose n’était pas clair.
    Je vous remercie par avance de me sortir de cette galère.

    Bonne journée à tous.
    Fichiers attachés Fichiers attachés

  2. #2
    Expert éminent
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    3 952
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 3 952
    Points : 9 281
    Points
    9 281
    Par défaut
    Hello,
    ,Houla il a pas l'air simple ton xml,(en plus que c'est un cas simple d'après toi) et le générer par code VBA avec Msxml2 risque de prendre du temps à coder (voir ici comment faire par exemple). Sinon il faut essayer d'utiliser un schema (fichier xsd genre de modèle) voir ici par exemple. On peut générer un xsd à partir d'un xml.
    Ami calmant, J.P
    Jurassic computer : Sinclair ZX81 - Zilog Z80A à 3,25 MHz - RAM 1 Ko - ROM 8 Ko

  3. #3
    Rédacteur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2013
    Messages
    947
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Août 2013
    Messages : 947
    Points : 4 058
    Points
    4 058
    Par défaut
    Par contre c'est très facile de convertir une plage ou un tableau structuré (comme ci-dessous) en format HTML.
    Est-ce plus simple après pour convertir en xml ?

    Code VBA : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Sub test()
    Dim PlageExcel As Range
    Set PlageExcel = Range("Tableau7")
    ActiveWorkbook.PublishObjects.Add(xlSourceRange, "C:\Test\Test.html", PlageExcel.Parent.Name, _
                                      PlageExcel.Address, 0, "DivID", "").Publish True
    End Sub

  4. #4
    Nouveau Candidat au Club
    Homme Profil pro
    Consultant santé
    Inscrit en
    Mai 2023
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant santé
    Secteur : Santé

    Informations forums :
    Inscription : Mai 2023
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    Je suis ouvert à toute solution qui pourrait un peu automatiser le processus de création du xml avec les données complétées, que ce soit via macro ou via une autre méthode pratique. Je suis, à mon faible niveau, incapable d'appliquer une solution malgré mes tentatives. Je reste disponible si vous avez besoin de quelque chose.

    Je vous remercie pour le temps que vous passez sur mon souci.

  5. #5
    Expert éminent
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    3 952
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 3 952
    Points : 9 281
    Points
    9 281
    Par défaut
    Hello,
    Finalement ce que tu veux faire existe dans Excel, cela s'appelle le mappage xml. Voir ici dans les Faqs de Developpez et ici la présentation Microsoft.
    J'ai testé vite fait avec ton fichier xml (dans Excel Fichier/Ouvrir/Fichier xml) . Voici ce que j'obtiens après un mappage express à quelques champs d'une feuille excel :
    Nom : MappageXmlExcel.png
Affichages : 405
Taille : 48,1 Ko

    et en sortie (enregistrer sous données xml - Les données sont limitées aux quelques champs qui sont dans ma feuille) :
    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <ns1:BPIJ xmlns:ns1="www.cnamts.fr/tlsemp/IJ" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
        <ns1:Identification>669</ns1:Identification>
        <ns1:Temps>2022-11-01T00:00:00.000</ns1:Temps>
        <ns1:Declarant>
            <ns1:Identite R="800">780</ns1:Identite>
        </ns1:Declarant>
    </ns1:BPIJ>

    Ami calmant, J.P
    Jurassic computer : Sinclair ZX81 - Zilog Z80A à 3,25 MHz - RAM 1 Ko - ROM 8 Ko

  6. #6
    Rédacteur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2013
    Messages
    947
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Août 2013
    Messages : 947
    Points : 4 058
    Points
    4 058
    Par défaut
    Pour compléter les informations de jurassic pork j'ai trouvé une documentation en français qui explique cela très bien : https://www.excel-exercice.com/creer...ml-avec-excel/

    Je me suis amusé à faire une fonction pour générer automatiquement le fichier de mappage qu'il faudra utiliser, à partir des données située en A1 de la feuille active.
    Par sécurité les accents et les espaces des noms des en-têtes sont supprimés mais je ne sais pas si c'est nécessaire.
    Le fichier est généré dans la dossier de l'application et porte le nom de la feuille.
    Ensuite il suffit de continuer la procédure indiquée dans la documentation précitée.


    Code VBA : 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
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    '------------------------------------------------------------------------------------------------------
    Public Function Mapper_XLM()
    '------------------------------------------------------------------------------------------------------
    ' Permet de générer un fichier de mappage d'une plage Excel pour l'exporter au format XLM.
    ' La plage doit commencer en cellule A1 de la feuille active.
    ' Voir cette documentation: https://www.excel-exercice.com/creer-un-fichier-xml-avec-excel/
    ' Par sécurité les accents et les espaces des noms des en-têtes sont supprimés.
    '------------------------------------------------------------------------------------------------------
    Dim FileName As String
    Dim FileNumber As Long
    Dim C1 As String
    Dim C2 As String
    Dim Feuille As String
    Dim i As Integer, k As Integer
    C1 = " éèêàîïêôö"
    C2 = "-eeeaiieoo"
     
    ' Contrôle la cohérence des en-têtes:
    i = 1
    While Cells(1, i) <> ""
        ' Remplace les accent et les espaces:
        For k = 1 To Len(C1)
            Cells(1, i) = Replace(Cells(1, i), Mid(C1, k, 1), Mid(C2, k, 1))
        Next k
        ' Supprime les caractères spéciaux:
        For k = 1 To Len(Cells(1, i))
            If Mid(Cells(1, i), k, 1) Like "[a-zA-Z-]" = False Then
                Cells(1, i) = Replace(Cells(1, i), Mid(Cells(1, i), k, 1), "-")
            End If
        Next k
        i = i + 1
    Wend
     
    ' Remplace les accents dans le nom de la feuille et supprime les caractères spéciaux:
    Feuille = ActiveSheet.Name
    For k = 1 To Len(C1)
        Feuille = Replace(Feuille, Mid(C1, k, 1), Mid(C2, k, 1))
    Next k
    For k = 1 To Len(Feuille)
        If Mid(Feuille, k, 1) Like "[a-zA-Z0-9-]" = False Then
            Feuille = Replace(Feuille, Mid(Feuille, k, 1), "-")
        End If
    Next k
     
    ' Création d'un fichier de mappage .XML dans le dossier du l'application:
    FileNumber = FreeFile
    FileName = ThisWorkbook.Path & "\Mapper_" & Feuille & ".xml"
     
    Open FileName For Output As #FileNumber
    Print #FileNumber, "<?xml version=""1.0"" encoding=""UTF-8"" standalone=""yes""?>"
    Print #FileNumber, "<" & Feuille & ">"
    Print #FileNumber, "<record>"
    i = 1
    While Cells(1, i) <> ""
        Print #FileNumber, "<" & Cells(1, i) & ">x</" & Cells(1, i) & ">"
        i = i + 1
    Wend
    Print #FileNumber, "</record>"
    Print #FileNumber, "<record>"
    i = 1
    While Cells(1, i) <> ""
        Print #FileNumber, "<" & Cells(1, i) & ">x</" & Cells(1, i) & ">"
        i = i + 1
    Wend
    Print #FileNumber, "</record>"
    Print #FileNumber, "</" & Feuille & ">"
    Close #FileNumber
     
    End Function
    '------------------------------------------------------------------------------------------------------
    '------------------------------------------------------------------------------------------------------

    [Edit] Reste à vérifier si le résultat correspond au besoin.

    Bonne continuation.

  7. #7
    Nouveau Candidat au Club
    Homme Profil pro
    Consultant santé
    Inscrit en
    Mai 2023
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant santé
    Secteur : Santé

    Informations forums :
    Inscription : Mai 2023
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    Bonjour à vous deux,

    J'ai tenté de faire le mapping comme montré par jurassic pork et le tuto de laurent_ott (je n'avais jamais fait ça auparavant) afin de pouvoir avoir une première idée de l'xml que ça me génèrerait et le comparer à mon attendu mais je rencontre ce message d'erreur lors de ma tentative d'export de l'xml :
    Nom : 343285823_1353012558963272_9070718470309696774_n.png
Affichages : 390
Taille : 9,1 Ko

    Je joins le fichier excel pour que vous puissiez regarder ce qui ne va pas si vous le souhaitez.

    Merci par avance à vous.
    Fichiers attachés Fichiers attachés

  8. #8
    Expert éminent
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    3 952
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 3 952
    Points : 9 281
    Points
    9 281
    Par défaut
    J'ai généré un classeur de mappage qui me semble plus complet que le tien :
    Nom : CasSimpleXML.png
Affichages : 392
Taille : 91,4 Ko

    mais quand je clique sur le lien vérifier le mappage à exporter dans Développeur/Source/Source XML j'ai cette erreur :
    Nom : ErreurExportXML.png
Affichages : 381
Taille : 7,8 Ko

    Effectivement dans ton XML il y a des listes de listes et dans un classeur excel, je ne sais pas trop comment cela peut être représenté
    Fichiers attachés Fichiers attachés
    Jurassic computer : Sinclair ZX81 - Zilog Z80A à 3,25 MHz - RAM 1 Ko - ROM 8 Ko

  9. #9
    Rédacteur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2013
    Messages
    947
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Août 2013
    Messages : 947
    Points : 4 058
    Points
    4 058
    Par défaut
    Bonjour,
    J'ai repris le fichier joint à la discussion : mappage_test.xlsx
    Je l'ai transformé en plage classique et copié en valeurs.
    cela donne le mappage suivant à utiliser : Mapper_agent-platypus.xml
    Est-ce que ça marche ?

  10. #10
    Expert éminent
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    3 952
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 3 952
    Points : 9 281
    Points
    9 281
    Par défaut
    Hello,
    bon je crois que j'ai trouvé un moyen d'utiliser ton fichier source xml cas simple.xml
    Dans celui-ci il y a plusieurs enregistrements dans les listes Caisse et Prestation. Il faut réduire le fichier xml pour qu'il n'y ait plus qu'un seul enregistrement pour caisse et un seul enregistrement pour Prestation (cas_simpleJP.xml en pièce jointe). Si on importe ce fichier en xml dans Excel, on n'a plus qu'une seule ligne d'enregistrements(fichier cas_simpleJP.xlsx en pièce jointe) et maintenant on peut exporter en xml (fichier cas_simpleJP_export.xml en pièce jointe) :

    Nom : cas_SimpleJP.png
Affichages : 376
Taille : 82,1 Ko

    Je ne sais pas si cela te convient (y-a-t-il tous les champs que tu veux ?) mais cela permet de fonctionner avec des listes de listes.

    Ami calmant, J.P
    Fichiers attachés Fichiers attachés
    Jurassic computer : Sinclair ZX81 - Zilog Z80A à 3,25 MHz - RAM 1 Ko - ROM 8 Ko

  11. #11
    Nouveau Candidat au Club
    Homme Profil pro
    Consultant santé
    Inscrit en
    Mai 2023
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant santé
    Secteur : Santé

    Informations forums :
    Inscription : Mai 2023
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    Bonjour jurassic pork,

    Pardonnez-moi pour le temps de réponse, des soucis de santé m'ont éloigné du travail plusieurs semaines. Je vous remercie grandement pour votre retour.

    Si je comprends bien, il n'est donc possible d'exporter un xml que pour un "cas simple du cas simple" ? En d'autres termes, je ne peux avoir qu'une seule ligne d'un tableau excel par xml ? Impossible d'avoir plusieurs prestations à la même date comptable ? Des prestations à d'autres dates comptables ? (= plusieurs lignes dans le tableau qui s'intègreraient dans le xml lors de l'export). Je ne sais pas si je suis clair.

Discussions similaires

  1. [Toutes versions] Code vba macro excel 2010 import de plusieurs fichiers texte
    Par Eagle-I dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 09/12/2011, 12h25
  2. [PPT-2003] lancer une macro excel a partir d'un fichier powerpoint
    Par yvespi dans le forum VBA PowerPoint
    Réponses: 10
    Dernier message: 15/06/2010, 15h48
  3. [VBA]macro excel ouverture et transformation de fichier
    Par astrolane dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 02/05/2007, 11h19
  4. génération automatique de fichier xml vide
    Par ecdxml dans le forum Format d'échange (XML, JSON...)
    Réponses: 1
    Dernier message: 03/07/2006, 10h57
  5. Macro excel qui ferme tous les fichiers .xls
    Par max2245 dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 10/01/2006, 20h21

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo