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 :

Avoir des balises vides lors de l'export XML (VBA)


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Homme Profil pro
    Développeur VBA Excel
    Inscrit en
    Mars 2017
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Développeur VBA Excel

    Informations forums :
    Inscription : Mars 2017
    Messages : 7
    Par défaut Avoir des balises vides lors de l'export XML (VBA)
    Bonjour à tous !
    Ceci est mon premier message sur Développez.net, je vous prie donc de bien vouloir m'excuser si je ne respecte pas tous les codes

    Voici mon problème :
    à l'aide de VBA, j'importe dans un classeur toute une liste de fichier XML, afin de pouvoir les traiter plus facilement, puis je les réexporte tous dans un autre dossier.

    Le problème est que dans mes fichiers XML d'origine, certaines balises sont vides

    Exemple :
    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <Titi>TEST</Titi>
    <Toto/>
    <Tata>TEST</Tata>

    Et j'aimerai retrouver ces balises vides quand je réexporte, or actuellement le fichier XML que j'obtient a cette forme là :

    Exemple :
    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    <Titi>TEST</Titi>
    <Tata>TEST</Tata>

    Je ne trouve pas comment faire pour conserver ces balises vides à l'export depuis excel.

    Si vous avez une solution je suis preneur !

    Merci d'avance !

  2. #2
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par littlebigclem Voir le message
    Bonjour,

    Je ne sais pas si la solution de remplacer la balise vide par une chaîne de substitution pourrait faire l'affaire, mais le code ci-dessous remplace la chaine <Toto/> au moyen d'une fonction. Idem pour la réinjection du fichier au moyen d'une autre fonction.

    Code : 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
     
    Sub Essai()
     
    Dim MaChaine As String
     
           MaChaine = IdentifierUneBaliseVide("<Toto/>")
           MsgBox MaChaine
           MsgBox RecreerUneBaliseVide(MaChaine)
     
    End Sub
     
    Function IdentifierUneBaliseVide(ByVal ChaineXml As String) As String
     
    Dim MaPosition As Integer
    Dim MaBalise As String
     
        MaPosition = InStr(1, ChaineXml, "/>", vbTextCompare)
        If MaPosition > 0 Then
            MaBalise = Mid(ChaineXml, 2, MaPosition - 2)
            IdentifierUneBaliseVide = "<" & MaBalise & ">ZZZZZZZZZZZZ</" & MaBalise & ">"
        End If
     
    End Function
     
    Function RecreerUneBaliseVide(ByVal ChaineXml As String) As String
     
    Dim MaPosition As Integer
    Dim MaBalise As String
     
        MaPosition = InStr(1, ChaineXml, ">ZZZZZZZZZZZZ</", vbTextCompare)
        If MaPosition > 0 Then
            MaBalise = Mid(ChaineXml, 2, MaPosition - 2)
            RecreerUneBaliseVide = "<" & MaBalise & "/>"
        End If
     
    End Function
    Il manque la boucle pour analyser toutes les chaines.

  3. #3
    Membre à l'essai
    Homme Profil pro
    Développeur VBA Excel
    Inscrit en
    Mars 2017
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Développeur VBA Excel

    Informations forums :
    Inscription : Mars 2017
    Messages : 7
    Par défaut
    Bonjour,
    Le code ci-dessus fonctionne pour identifier la balise vide et y ajouter du texte, mais ce texte n’apparaît pas ensuite dans mon fichier Excel. La case correspondant à <Toto/> reste vide.

    Comment injecter le texte pour qu'il apparaisse dans le classeur Excel ?

    Merci d'avance !

  4. #4
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par littlebigclem Voir le message
    Bonjour,

    Il faudrait voir comment est fait votre fichier.

  5. #5
    Membre à l'essai
    Homme Profil pro
    Développeur VBA Excel
    Inscrit en
    Mars 2017
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Développeur VBA Excel

    Informations forums :
    Inscription : Mars 2017
    Messages : 7
    Par défaut
    Bonjour,
    Voici dans la pièce jointe un aperçu du fichier Excel.
    Chaque ligne correspond a un fichier XML qui a été importé avec un mappage, via une macro.

    Sauf que quand je fait un export pour obtenir à nouveau des fichier XML à partir d'Excel, les cases vides sont retirées du fichier XML final, et ne correspond donc pas exactement à la structure du fichier XML d'origine.

    Voilà, j'espère que mes explications sont compréhensibles !

    Nom : Image.jpg
Affichages : 534
Taille : 19,5 Ko

  6. #6
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par littlebigclem Voir le message
    Quel est votre code à l'import et à l'export utilisant les deux fonctions ?

Discussions similaires

  1. forme des balises vides avec XmlSerializer.
    Par dev_zou dans le forum Accès aux données
    Réponses: 0
    Dernier message: 08/11/2014, 14h17
  2. Réponses: 5
    Dernier message: 14/03/2011, 14h04
  3. Réponses: 1
    Dernier message: 25/01/2011, 14h52
  4. Réponses: 2
    Dernier message: 01/06/2007, 09h34

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