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 :

Extraire des données d'un fichier Xml avec des balises identiques [XL-2007]


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 39
    Points : 27
    Points
    27
    Par défaut Extraire des données d'un fichier Xml avec des balises identiques
    Bonjour à tous,

    J'ai un petit soucis d'extraction de données d'un fichier Xml.
    Avant tout je précise que je sais comment récupérer les données des balises "non-unique" et que j'ai déjà parcouru des divers post et tuto sur le Xml mais sans avoir trouver mon bonheur.

    Je m'explique :

    J'utilise actuellement le code suivant avec succès sur certaines balises dont le nom est unique:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Set oXmlDoc = CreateObject("microsoft.XMLDOM")
       With oXmlDoc
          .async = False
          .Load (Url)
     
          Adresse = .SelectSingleNode("//formatted_address").Text
     
        End With
    Dans le fichier xml suivant, le résulat pour Adresse est "52300 Joinville, France"

    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
    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
    <?xml version="1.0" encoding="UTF-8" ?> 
    <GeocodeResponse>
    <status>OK</status> 
    <result>
    <type>locality</type> 
    <type>political</type> 
    <formatted_address>52300 Joinville, France</formatted_address> 
    <address_component>
    <long_name>Joinville</long_name> 
    <short_name>Joinville</short_name> 
    <type>locality</type> 
    <type>political</type> 
    </address_component>
    <address_component>
    <long_name>Haute-Marne</long_name> 
    <short_name>52</short_name> 
    <type>administrative_area_level_2</type> 
    <type>political</type> 
    </address_component>
    <address_component>
    <long_name>Champagne-Ardenne</long_name> 
    <short_name>Champagne-Ardenne</short_name> 
    <type>administrative_area_level_1</type> 
    <type>political</type> 
    </address_component>
    <address_component>
    <long_name>France</long_name> 
    <short_name>FR</short_name> 
    <type>country</type> 
    <type>political</type> 
    </address_component>
    <address_component>
    <long_name>52300</long_name> 
    <short_name>52300</short_name> 
    <type>postal_code</type> 
    </address_component>
    <geometry>
    <location>
    <lat>48.4424793</lat> 
    <lng>5.1403491</lng> 
    </location>
    <location_type>APPROXIMATE</location_type> 
    <viewport>
    <southwest>
    <lat>48.4128631</lat> 
    <lng>5.0763194</lng> 
    </southwest>
    <northeast>
    <lat>48.4720782</lat> 
    <lng>5.2043788</lng> 
    </northeast>
    </viewport>
    <bounds>
    <southwest>
    <lat>48.4085352</lat> 
    <lng>5.0725249</lng> 
    </southwest>
    <northeast>
    <lat>48.4542442</lat> 
    <lng>5.1811448</lng> 
    </northeast>
    </bounds>
    </geometry>
    <partial_match>true</partial_match> 
    </result>
    </GeocodeResponse>

    Mon soucis est de pouvoir récupérer le code postal qui est dans la balise:

    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <address_component>
    <long_name>52300</long_name> 
    <short_name>52300</short_name> 
    <type>postal_code</type> 
    </address_component>
    Mais vu qu'il y a plusieurs balises "<address_component>" je suis un peu perdu.

    Si quelqu'un aurai des suggestion, je suis preneur !

  2. #2
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    Bonjour
    Peut être tu peux tirer le code postal à partir de l'adresse
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Set oXmlDoc = CreateObject("microsoft.XMLDOM")
    With oXmlDoc
        .async = False
        .Load (URL)
        Adresse = .SelectSingleNode("//formatted_address").Text
        CodePostal = Split(Adresse)(0)
    End With

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 39
    Points : 27
    Points
    27
    Par défaut
    J'y ai bien pensé, mais l'adresse retournée peut être sous différentes formes :

    N° de rue, Adresse, Code postal, Ville, Pays
    Adresse, Code postal, Ville, Pays
    Adresse, Ville, Pays

    C'est pourquoi j'aimerai pouvoir extraire directement la valeur depuis la source mais bon je suis ouvert à toutes propositions,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CodePostal = Split(Adresse)(0)
    ça fonctionne bien mais uniquement dans le cas du "Code postal, Ville, Pays"

  4. #4
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    Tu peux mettre ton exemple contenu dans URL?

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 39
    Points : 27
    Points
    27
    Par défaut
    oui biensûr :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Url = "http://maps.googleapis.com/maps/api/geocode/xml?address=usine+de+Bussy,+52300,+JOINVILLE,+France&sensor=false&region=FR"

  6. #6
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    Travailler le Test récupéré
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Sub TEST()
    Dim oXmlDoc As New MSXML2.DOMDocument
    Dim Url As String, CP As String
     
    Url = "http://maps.googleapis.com/maps/api/geocode/xml?address=usine+de+Bussy,+52300,+JOINVILLE,+France&sensor=false&region=FR"
    With oXmlDoc
        .async = False
        .Load Url
        CP = Left(.Text, InStr(.Text, "postal_code") - 2)
        CP = Mid(CP, InStrRev(CP, " ") + 1)
        MsgBox CP
    End With
    Set oXmlDoc = Nothing
    End Sub

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 39
    Points : 27
    Points
    27
    Par défaut
    Bonsoir,

    J'ai testé ta solution et elle fonctionne ! bien joué
    j'ai bien passer une heure à décortiquer les fonctions mid() et instr()
    mais j'ai enfin compris leur fonctionnement

    problème résolu ! merci encore

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

Discussions similaires

  1. extraire les données d'un fichier xml avec xmlspy
    Par mouna1 dans le forum XML/XSL et SOAP
    Réponses: 1
    Dernier message: 05/06/2009, 13h50
  2. Réponses: 2
    Dernier message: 20/10/2006, 10h49
  3. [XML] Integrer des données d'un fichier xml dans un autre ?
    Par vpet dans le forum XML/XSL et SOAP
    Réponses: 2
    Dernier message: 16/03/2006, 18h41
  4. [XML] stocker des données dans un fichier XML
    Par R3iTt0R dans le forum XML/XSL et SOAP
    Réponses: 5
    Dernier message: 27/05/2005, 16h51

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