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 :

Manipuler plusieurs fichiers xml dans une macro VB


Sujet :

Macros et VBA Excel

  1. #1
    Candidat au Club
    Femme Profil pro
    Développeur COBOL
    Inscrit en
    Août 2014
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur COBOL

    Informations forums :
    Inscription : Août 2014
    Messages : 2
    Points : 3
    Points
    3
    Par défaut Manipuler plusieurs fichiers xml dans une macro VB
    Bonjour,

    Je dois récupérer des données dans plusieurs fichiers xml qui eux-mêmes se trouvent dans différents répertoires.

    Voici l'arborescence : K:\Informatique\Nom\Flux\Préfixe\2014\Extract\nomfichier\ fichier.xml

    Je souhaite parcourir tous les répertoires nomfichier pour récupérer les données des fichiers.xml

    voici un exemple d'un fichier

    Code xml : 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
    <?xml version="1.0" encoding="utf-8" ?> 
    - <FICHIER>
      <VERSIONFMT>001</VERSIONFMT> 
      <IDENT IDSYS="EVOMAN" IDC="1122" JOUR="20140706" MONNAIE="978" CENTRALE="" /> 
      <CMT>Traitement du 07/07/14 à 06:30:14</CMT> 
      <CMT>Journée du 06/07/14</CMT> 
      <INFSURFVTES>[0 - Standard] xxxxxxxxxx</INFSURFVTES> 
      <INFSURFVTES>[0 - Standard] xxxxxxxxxx</INFSURFVTES> 
    + <VTESSURFVTE CDEACT="003" NOORD="000001">
    + <VTESSURFVTE CDEACT="008" NOORD="000001">
    + <VTESSURFVTE CDEACT="078" NOORD="000001">
    + <VTESSURFVTE CDEACT="101" NOORD="000001">
    - <VTESSURFVTE CDEACT="118" NOORD="000001">
      <FREQ FRTOTSURF="51" FRPTSURF="51" /> 
    - <VTES>
      <VTE EAN="0000040883069" LIB="LIBELLE 1" DPX="1.97" QTPT="+1.000" CAPT="+1.97" FRPT="1" QTNPT="+0.000" CANPT="+0.00" FRNPT="0" CDLEC="650203011" NAC="20141780536N" CDSTRN="R:03,F:000,SF:0044" /> 
    - <AVTGES>
      <AVT EAN="0000040883069" UVC="1.000" TYPAV="TEL" NBAVPT="1" MTAVPT="0.36" NBAVNPT="0" MTAVNPT="0.00" /> 
      + <LTSHET>
      <AVTSRETAC /> 
    + <AVTSOPEMR>
      <PRDTSCREDITEDEL /> 
      </VTESSURFVTE>
    + <VTESSURFVTE CDEACT="119" NOORD="000001">
    + <VTESSURFVTE CDEACT="119" NOORD="000002">
    + <VTESSURFVTE CDEACT="119" NOORD="000003">
    + <VTESSURFVTE CDEACT="119" NOORD="000004">
    + <VTESSURFVTE CDEACT="119" NOORD="000005">
    + <LIBSBARMEDEL>
      </FICHIER>

    Voici le script que j'ai commencé à codé :


    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
    128
    129
    130
    131
    Sub Bouton1_Cliquer()
     
    Dim oFSO
    Set oFSO = CreateObject("Scripting.FileSystemObject")
    ligne = 1
    colonne = 1
    Worksheets("Feuil1").Cells.Clear
     
    'Dim xmlDoc As New DOMDocument
    '..... Initialisation du parceur
    Set xmlDoc = CreateObject("Microsoft.XMLDOM")
    xmlDoc.Async = "false"
     
    'Dim oNode As IXMLDOMElement
    'Dim oElement As IXMLDOMElement
     
     
    'Dim oChildren As IXMLDOMNodeList
    'Dim oChild As IXMLDOMNode
    'Dim oRoot As IXMLDOMNode
     
     chemin = "K:\Informatique\Nom\Flux\Prefixe\2014"
     
     
        If oFSO.FolderExists(chemin) Then
     
     
           For Each oFolder In oFSO.GetFolder(chemin).subfolders
             nomDossier = oFolder.Name
     
               If xmlDoc.Load(chemin \ " & nomDossier \ " * .XML) Then
     
                  For Each oNode In xmlDoc.getElementsByTagName("VTE EAN")
     
    '...............Compteur de lignes
     
                    intI = 6
     
    '...............Entetes de colonnes
     
    '...................Balise VTES
                    ActiveSheet.Cells(4, 1) = "VTE EAN"
                    ActiveSheet.Cells(4, 2) = "DPX"
                    ActiveSheet.Cells(4, 3) = "QTPT"
                    ActiveSheet.Cells(4, 4) = "CAPT"
                    ActiveSheet.Cells(4, 5) = "QTNPT"
                    ActiveSheet.Cells(4, 6) = "CANPT"
     
    '...................Balise AVTGES
                    ActiveSheet.Cells(4, 7) = "UVC"
                    ActiveSheet.Cells(4, 8) = "TYPAV"
                    ActiveSheet.Cells(4, 9) = "NBAVPT"
                    ActiveSheet.Cells(4, 10) = "MTAVPT"
                    ActiveSheet.Cells(4, 11) = "NBAVNPT"
                    ActiveSheet.Cells(4, 12) = "MTAVNPT"
     
     
    '.................Pour boucler dans les balises
     
                      For Each oElement In oNode.ChildNodes
     
     '.................Pour passer par tous les noeuds filles de VTE EAN
     
                        Set oChlidren = oElement.ChildNodes
     
                            If oElement.nodeMane = "VTE EAN" Then
                               ActiveSheet.Cells(intI, 1) = ochlid.nodeTypedValue
                            End If
     
                            If oElement.nodeMane = "DPX" Then
                               ActiveSheet.Cells(intI, 2) = ochlid.nodeTypedValue
                            End If
     
                            If oElement.nodeMane = "QTPT" Then
                               ActiveSheet.Cells(intI, 3) = ochlid.nodeTypedValue
                            End If
     
                            If oElement.nodeMane = "CAPT" Then
                               ActiveSheet.Cells(intI, 4) = ochlid.nodeTypedValue
                            End If
     
                            If oElement.nodeMane = "QTNPT" Then
                               ActiveSheet.Cells(intI, 5) = ochlid.nodeTypedValue
                            End If
     
                            If oElement.nodeMane = "CANPT" Then
                               ActiveSheet.Cells(intI, 6) = ochlid.nodeTypedValue
                            End If
     
                            If oElement.nodeMane = "UVC" Then
                               ActiveSheet.Cells(intI, 7) = ochlid.nodeTypedValue
                            End If
     
                            If oElement.nodeMane = "TYPAV" Then
                               ActiveSheet.Cells(intI, 8) = ochlid.nodeTypedValue
                            End If
     
                            If oElement.nodeMane = "NBAVPT" Then
                               ActiveSheet.Cells(intI, 9) = ochlid.nodeTypedValue
                            End If
     
                            If oElement.nodeMane = "MTAVPT" Then
                               ActiveSheet.Cells(intI, 10) = ochlid.nodeTypedValue
                            End If
     
                            If oElement.nodeMane = "NBAVNPT" Then
                               ActiveSheet.Cells(intI, 11) = ochlid.nodeTypedValue
                            End If
     
                            If oElement.nodeMane = "MTAVNPT" Then
                               ActiveSheet.Cells(intI, 12) = ochlid.nodeTypedValue
                            End If
     
                      Next oElement
     
                  Next oNode
     
               End If
     
               Next
     
        Else
     
          Worksheets("Feuil1").Cells(i, 11).Value = "Chemin inexistant :chemin."
     
        End If
     
    '.....Drestruction de notre objet(parceur)
         Set xmlDoc = Nothing
     
    End Sub
    Au moment de compiler j'ai l'erreur suivante : "Référence incorrecte ou non qualifiée" : elle se positionne sur la ligne de code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If xmlDoc.load(chemin \ " & nomDossier\ "*.xml)
    Then
    il n'aime pas le .xml.

    Comment puis-je faire ?

    Est-ce que la suite de mon script est correct ?

    Je vous remercie.

  2. #2
    Expert éminent sénior


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Points : 20 040
    Points
    20 040
    Par défaut
    bonjour,

    une fois les balises de codes [code] [/code] on voit bien ton erreur avec les couleurs .. les valeurs en rouge sont des constantes de chaines par exemple... et ton .xml n'est pas en rouge .... il te manque des guillemets ( toutes les parties constantes de ta chaines \, .xml ... doivent être en rouge sur le forum...

  3. #3
    Membre habitué
    Inscrit en
    Décembre 2008
    Messages
    115
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 115
    Points : 180
    Points
    180
    Par défaut Excel, c'est du XML
    Bonjour
    1)Excel aime le XML, puisque c'en est
    2) bbil l'a dit, l'erreur, c'est le placement de ces de "".

    3) Pour le reste du code. Pourquoi passer par un objet "Microsoft.XMLDOM"?
    XL contient déjà les instructions CustomXMLPart.XML et CustomXMLNode (+d'autres) pour jouer avec le XML.
    En faisant un import de fichier (Onglet Développeur,pavé XML), les données arrivent toutes seules (Merci l'enregistreur de macro)
    Il faut reconnaitre que l'aide d'Excel sur les fonctions XML est bizarre...

    Pour le XML et Excel, il y a un site pas mal

    www.developpez.com

    Cordialement

Discussions similaires

  1. import de plusieurs fichiers XML dans Access 2003
    Par frdek dans le forum Access
    Réponses: 7
    Dernier message: 09/08/2008, 19h39
  2. [HTML] Ouvrir plusieurs fichiers pdf dans une page
    Par PrinceMaster77 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 5
    Dernier message: 05/05/2006, 09h34
  3. Intégration des fichier XML dans une base de données MySQL
    Par bebemoundjou dans le forum XQUERY/SGBD
    Réponses: 8
    Dernier message: 25/11/2005, 22h41
  4. traitement de fichier XML dans une Tache planifiée
    Par marivi dans le forum XML/XSL et SOAP
    Réponses: 4
    Dernier message: 21/06/2005, 10h40
  5. Réponses: 3
    Dernier message: 13/12/2004, 13h54

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