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 :

suppression d'une ligne dans un fichier XML EN VBA


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau membre du Club
    Inscrit en
    Mai 2008
    Messages
    60
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 60
    Points : 34
    Points
    34
    Par défaut suppression d'une ligne dans un fichier XML EN VBA
    Bonjour à tous,


    Je rencontre des difficultés actuellement pour ouvrir un fichier xml, mon pb est le suivant :

    je dois à partir d'excel traiter + sieurs fichiers "xml", jusqu'a présent tous se passe bien je charge mon document , je l'ouvre et je récupère les données dans les balises.
    Mais le probleme est qu' a ma 3eme ligne il y a une ligne qui fait que je n'arrive pas exploiter mon fichier xml.!!!

    si je supprime cette ligne manuellement et que j'enregistre mon fichier alors tous se passe corectement par contre si la ligne n'est pas suprimer le fichier ne peut pas etre exploiter.

    Quelqu'un aurait-il une solution pour supprimer la 3eme ligne automatiquement de mon fichier XML, pour qu'il puisse etre exploitable????
    Merci.

    En VBA

    je vous envois le code qui permet d'exploiter le fichier xml.



    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
    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
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    Sub IMPORT_XML_File()
     
    'Déclaration des  Variables et des objets  DOMXML
     
    Dim ParsDoc As MSXML2.DOMDocument
     
    Dim ListeEnfants_de_md As MSXML2.IXMLDOMNodeList
    Dim ListeEnfants_de_mi As MSXML2.IXMLDOMNodeList
    Dim ListeEnfants_de_mv As MSXML2.IXMLDOMNodeList
    Dim Liste_md As MSXML2.IXMLDOMNodeList
     
    Dim Noeud_mi As MSXML2.IXMLDOMNode
    Dim Noeud_mts As MSXML2.IXMLDOMNode
    Dim Noeud_gp As MSXML2.IXMLDOMNode
    Dim Noeud_mt As MSXML2.IXMLDOMNode
    Dim Noeud_mv As MSXML2.IXMLDOMNode
    Dim Noeud_moid As MSXML2.IXMLDOMNode
    Dim Noeud_r As MSXML2.IXMLDOMNode
    Dim Noeud_md As MSXML2.IXMLDOMNode
     
    '**********noeud de la ligne 3 à supprimer...***************
    Dim Noeud_line3   As String
    'Dim Noeud3 As MSXML2.IXMLDOMDocumentType
    Dim Noeud3 As MSXML2.IXMLDOMNotation
     
    Dim N3 As MSXML2.IXMLDOMNode
    '*****************************************
     
    Dim Enfants_de_md As MSXML2.IXMLDOMNode
    Dim Enfants_de_mi As MSXML2.IXMLDOMNode
    Dim Enfants_de_mv As MSXML2.IXMLDOMNode
     
    Dim racine_mdc As MSXML2.IXMLDOMNode
     
    Dim Objet_Erreur As MSXML2.IXMLDOMParseError
    Dim intI As Integer
    Dim Nom_moid As String
    Dim file_xml As String
    Dim objet_node As String
    Dim data As String
     
    'permet de ne pas voir se qui se passe
    Application.ScreenUpdating = False
     
    'Pour nettoyer les cellules à chaque renouvellement du programme
    'Worksheets("IMPORT_XML").Activate
    'Cells.ClearContents
     
    file_xml = Worksheets("Sheet1").Cells(15, 5).Value
    ' au dessus il y a la celluel qui donne le chemin d'acces à mon fichier xml
    ' mettre en commentaire la ligne du dessus, puis mettre en argument de la fonction.
     
    'Initialisation du Parseur
    'la fonction permet de faire la référence entre la variable et le DOC_XML
    Set ParsDoc = New MSXML2.DOMDocument
     
    'Chargement du Document de manière synchrone
    ParsDoc.async = False
     
    'on charge le document en mémoire
     
    If ParsDoc.Load(file_xml) Then
     
            MsgBox "Document XML correctement chargé"
        Else
     
    '****************************supression de la ligne 3 des XML Files...*************************
    'Noeud_line3 = ParsDoc.Xml
    'MsgBox (Noeud_line3)
    'MsgBox (objet_node)
     'data = "<!DOCTYPE mdc SYSTEM "MeasDataCollection.dtd">"
     
     'Set Noeud3 = ParsDoc.createCDATASection(<![DOCTYPE mdc SYSTEM ["MeasDataCollection.dtd"]]>)
     
     'data = Noeud3.baseName
     
     'Set Noeud3 = ParsDoc.doctype
     
      'data = Noeud3.nodeTypedValue
     
    'MsgBox (data)
    '********************************************************************************************
     
              MsgBox "Erreur de lecture du document XML"
     
    '                           ****************************
    '    ******************Partie concernant la gestion des erreurs**********************
     
       'instancier le fichier xml pour la gestion des erreurs
    Set Objet_Erreur = ParsDoc.parseError
     
    ' contient le code de l'erreur da la dernière erreur d'analyse, en lecture seule.
    code = Objet_Erreur.errorCode
    MsgBox (code)
     
    'fournit une explication à propos de l'erreur, en lecture seule.
     raison = Objet_Erreur.reason
     MsgBox (raison)
     
    'contient la position du fichier absolue où l'erreur s'est produite, en lecture seule.
    position_fichier = Objet_Erreur.filepos
    MsgBox (position)
     
    'spécifie le numéro de la ligne contenant l'erreur, en lecture seule.
     position_ligne = Objet_Erreur.Line
     MsgBox (position_ligne)
     
     'contient la position du caractère à l'intérieur de la ligne où l'erreur s'est produite, en lecture seule.
     Position_carac_ligne = Objet_Erreur.linepos
     MsgBox (Position_carac_ligne)
     
     'retourne le texte complet de la ligne contenant l'erreur, en lecture seule.
     chaine = Objet_Erreur.srcText
     MsgBox (chaine)
     
     'contient l'adresse URL du document XML contenant la dernière erreur, en lecture seule.
     adr_url = Objet_Erreur.URL
     MsgBox (adr_url)
     
     '                      ****************************************
     
        End If
     
    Application.DisplayAlerts = True
    Application.ScreenUpdating = True
     
    end sub
    debut de mon fichier XML

    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <?xml version="1.0"?>
    <?xml-stylesheet type="text/xsl" href="MeasDataCollection.xsl"?>
    <!DOCTYPE mdc SYSTEM "MeasDataCollection.dtd">
    **************la ligne a suprimer ce trouve au dessus***********

  2. #2
    Membre habitué
    Homme Profil pro
    Inscrit en
    Mars 2008
    Messages
    203
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 203
    Points : 175
    Points
    175
    Par défaut
    Une piste pour la "suppression":

    Ouvrir le fichier avec Open, puis faire un Replace de ta ligne par une chaîne vide:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Replace(expression, find, replace[, start[, count[, compare]]])

  3. #3
    Nouveau membre du Club
    Inscrit en
    Mai 2008
    Messages
    60
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 60
    Points : 34
    Points
    34
    Par défaut
    j'ai essayé avec la methode replace mai sle pb est que lorsque j'arrive a remplacé ma chaine de carac je ne peux pas l'ecrire dans le fichier.
    j'ai des erreurs

  4. #4
    Nouveau membre du Club
    Inscrit en
    Mai 2008
    Messages
    60
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 60
    Points : 34
    Points
    34
    Par défaut suprimer 1 ligne d'un fichier xml
    Bonjour quelqu'un aurait-il une idée pour suprimer une ligne d'un fichier xml en vba j'utilise le DOMXML mais je ne trouve pas comment.

    il ne s'agit pas d'un noeud mais d'une ligne qui fait référence à une dtd.

    pourtant quand je supprime manuellement la ligne j'exploite mon fichier sans pb.

    merci

  5. #5
    Membre actif
    Profil pro
    chomeur
    Inscrit en
    Août 2006
    Messages
    343
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : chomeur

    Informations forums :
    Inscription : Août 2006
    Messages : 343
    Points : 246
    Points
    246
    Par défaut
    J'aurai bien aimé répondre a ta question car étant novice en XML... mais je ne comprends pas qu'est ce qu'une dtd?

    @micalement

  6. #6
    Expert confirmé
    Avatar de zazaraignée
    Profil pro
    Étudiant
    Inscrit en
    Février 2004
    Messages
    3 174
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2004
    Messages : 3 174
    Points : 4 085
    Points
    4 085
    Par défaut
    Une DTD est un définition de type de document ou en anglais Document Type Definition. D'où le terme DTD.

    En XML, la DTD définit la structure du document. Je ne sais pas si c'est une bonne idée d'enlever la référence à la DTD, sauf si tu n'as pas cette DTD (un fichier .dtd) sur ton système.

    La DTD est la seule référence te permettant de déterminer si ton document XML est bien formé (ou, si tu préfères, conforme à la structure de données).

  7. #7
    Membre éprouvé
    Avatar de JackOuYA
    Inscrit en
    Juin 2008
    Messages
    1 040
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 1 040
    Points : 1 191
    Points
    1 191
    Par défaut
    tu nous as pas dit où tu bloquai avec ton replace.. j'ai essayé ton code mais je bute déjà sur le chargement (erreur dtd manquant...) alors dit nous où tu arrive toi ...

  8. #8
    Nouveau membre du Club
    Inscrit en
    Mai 2008
    Messages
    60
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 60
    Points : 34
    Points
    34
    Par défaut
    bonjour zazaraignée,
    effectivement je sais à quoi sert une dtd, maispour min cas de figure je n'en est pas besoin , en ce qui concerne le chargement , je suprime manuellement la ligne faisant référence à la dtd, je sauvegarde le fichier, sinon impossible de charger mon fichier.
    c'est pourquoi je suis dans l'obligation de suprimer cette ligne. sinon si il y a une autre solution je suis preneur.

  9. #9
    Membre actif
    Profil pro
    chomeur
    Inscrit en
    Août 2006
    Messages
    343
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : chomeur

    Informations forums :
    Inscription : Août 2006
    Messages : 343
    Points : 246
    Points
    246
    Par défaut
    personnellement, je ferais comme did103... Après ton erreur viens peut être du droit d'ouverture.

  10. #10
    Membre éprouvé
    Avatar de JackOuYA
    Inscrit en
    Juin 2008
    Messages
    1 040
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 1 040
    Points : 1 191
    Points
    1 191
    Par défaut
    Bonsoir

    si tu ne trouve pas ce fameux dtd .. une solution et de désactiver la validation, avant l'ouverture de l'xml :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
     ParsDoc.validateOnParse = False

  11. #11
    Nouveau membre du Club
    Inscrit en
    Mai 2008
    Messages
    60
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 60
    Points : 34
    Points
    34
    Par défaut
    Merci pour l'aide j'ai essayer la fonction


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ParsDoc.validateOnParse = False
    juste aprés que je charge mon doc en mémoire mais ça ne fonctionne toujours pas

    à cause de cette ligne 3.

    par contre je sais ou se trouve le dtd.

    j'ai bien le fichier dtd dans un répertoire mais je me demande comment faire pour l'implémenter dans mon code pour qu'il puisse faire le test.

    Si j'ai bien compris il faudrait que j'arrive à faire comprendre à mon code ou se trouve cette fameuse dtd ???

    si oui comment avec quel objet du dom XML quelqu'un aurait-il une piste????

    Parce que je sais ou se trouve cette dtd sur mon pc .....

  12. #12
    Membre éprouvé
    Avatar de JackOuYA
    Inscrit en
    Juin 2008
    Messages
    1 040
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 1 040
    Points : 1 191
    Points
    1 191
    Par défaut
    Citation Envoyé par newcodeur Voir le message
    ....

    ParsDoc.validateOnParse = False

    juste aprés que je charge mon doc en mémoire mais ça ne fonctionne toujours pas .....

    Citation Envoyé par JackOuYA Voir le message
    . une solution et de désactiver la validation, avant l'ouverture de l'xml :...
    ?

    Citation Envoyé par newcodeur Voir le message
    ...
    par contre je sais ou se trouve le dtd.

    j'ai bien le fichier dtd dans un répertoire mais je me demande comment faire pour l'implémenter dans mon code pour qu'il puisse faire le test.......
    le même répertoire que ton xml ?

  13. #13
    Nouveau membre du Club
    Inscrit en
    Mai 2008
    Messages
    60
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 60
    Points : 34
    Points
    34
    Par défaut
    YES!!!!!

    Merci JackOuYA !!!!!

    j'ai mis mon document dans le meme répertoire que mes fichiers xml j'ai bien rajoute la ligne ParsDoc.validateOnParse = False avant l'ouverture du fichier .
    Sa fonctionne maintenant.

    La programmation c'est magnifique lorsque tu est bloqué et que tu te débloque au bout d'un certain temps!!!!

    Merci.



  14. #14
    Membre éprouvé
    Avatar de JackOuYA
    Inscrit en
    Juin 2008
    Messages
    1 040
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 1 040
    Points : 1 191
    Points
    1 191
    Par défaut
    Citation Envoyé par newcodeur Voir le message
    .....
    j'ai mis mon document dans le meme répertoire que mes fichiers xml j'ai bien rajoute la ligne ParsDoc.validateOnParse = False avant l'ouverture du fichier .
    Sa fonctionne maintenant.
    ...
    et as tu essayé de faire une seule de ces 2 choses ...?


    ParsDoc.validateOnParse = False , permet de ne pas utilise le dtd...


    mettre le dtd sous le même répertoire que ton fichier xml c'est pour que ton parseur trouve plus facilement ce fichier ...

  15. #15
    Nouveau membre du Club
    Inscrit en
    Mai 2008
    Messages
    60
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 60
    Points : 34
    Points
    34
    Par défaut
    j'ai essayé dans les 2 cas mais ça n'a pas marché
    j'ai bien fait les 2 test.

    Mais bon maintenant ça marche avec le dtd dans le répertoire et aussi parsdoc...=false.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Suppression d'une ligne dans un fichier
    Par feldene dans le forum Langage
    Réponses: 9
    Dernier message: 29/07/2009, 12h26
  2. [DOM]ajouter une ligne dans un fichier xml
    Par aroua dans le forum APIs
    Réponses: 1
    Dernier message: 21/04/2008, 17h25
  3. Suppression d'une ligne dans un fichier txt
    Par EvaristeGaloisBis dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 21/07/2007, 17h58
  4. Réponses: 3
    Dernier message: 26/03/2006, 20h45
  5. [VB6]Suppression d'une ligne dans un fichier
    Par Tyrael62 dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 08/02/2006, 11h20

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