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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    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
    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 : 838
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 confirmé
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    4 228
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 4 228
    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

  3. #3
    Rédacteur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2013
    Messages
    1 022
    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 : 1 022
    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
    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
    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 confirmé
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    4 228
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 4 228
    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 : 858
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

  6. #6
    Rédacteur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2013
    Messages
    1 022
    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 : 1 022
    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.

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