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 :

Lecture des données de Google Maps


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    166
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 166
    Par défaut Lecture des données de Google Maps
    Bonsoir,

    J'ai réalisé une connexion avec google maps pour lire la distance et la durée avec le code suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ConnectStr = "URL;https://maps.googleapis.com/maps/api/distancematrix/json?origins=" & PointDépart & "&destinations=" & PointArrivée & "&sensor=false"
    Les informations s'affichent bien sur la feuille demandée dans la première colonne comme indiquée ci-dessous.
    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
    {
       "destination_addresses" : [ "Saint-Trivier-sur-Moignans, France" ],
       "origin_addresses" : [ "Allonzier-la-Caille, France" ],
       "rows" : [
          {
             "elements" : [
                {
                   "distance" : {
                      "text" : "143 km",
                      "value" : 143398
                   },
                   "duration" : {
                      "text" : "1 hour 40 mins",
                      "value" : 6009
                   },
                   "status" : "OK"
                }
             ]
          }
       ],
       "status" : "OK"
    }
    Pour récupérer la distance et la durée, j'ai écris cela :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     .Refresh BackgroundQuery:=False
            NEssai = NEssai + 1
        Set Result = Sheets("Calcul").Range("A1:B100").Find("duration")
            If Not Result Is Nothing Then
            Adresse = Result.Address
            Set Plage = Sheets("Calcul").Range(Adresse & ":A100")
            NEssai = 6 'On sort de la boucle quand on a un résultat
            End If
    Le problème est que le programme ne détecte pas "duration" et de même quand je fais sur la feuille directement un CTRL + F
    Avez vous une idée ?

    Cordialement,

  2. #2
    Expert éminent 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
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    .....Find("duration", LookIn:=xlValues, LookAt:=xlPart)

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    166
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 166
    Par défaut
    Merci je vais tester

    Par contre, peux tu expliquer à quoi correspond ces deux attributs, je n'ai pas trouver

    Cordialement,

  4. #4
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut heu
    bonjour
    je te propose un autre regard en utilisant un object xmlhttp en VBA

    dans la fonction tu a 2 variables qui sont des string et qui contienne les valeur que tu cherche a toi d'adpater

    il te suffit d'injecter le depart et l'arrivée dans l'appel de la fonction dans la sub test

    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
    'exemple https://maps.googleapis.com/maps/api/distancematrix/json?origins=toulon&destinations=paris&sensor=false"
    Sub test()
        donnéegooglemaps "toulon", "paris"
    End Sub
    Function donnéegooglemaps(depart, arrivée)
        Dim DemandeFichier As Object, distance As String, durrée As String,url as string 
        url = "https://maps.googleapis.com/maps/api/distancematrix/json?origins=" & depart & "&destinations=" & arrivée & "&sensor=false"
        Set DemandeFichier = CreateObject("Microsoft.XMLHTTP")  'instancie l'object
        DemandeFichier.Open "POST", url, False
        DemandeFichier.send
        'MsgBox DemandeFichier.responsetext'ce message t'affiche tout le texte en entier
     
        distance = Split(Split(DemandeFichier.responsetext, "text"" : ")(1), ",")(0)
        durrée = Split(Split(DemandeFichier.responsetext, "text"" : ")(2), ",")(0)
     
     
     MsgBox "disitance a parcourir = " & distance & vbCrLf & "durée du voyage = " & durrée
    End Function
    a mediter
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    166
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 166
    Par défaut
    Merci, cela fonctionne

    la solution de PatrickToulon fonctionne, l'autre solution émet une erreur

    Par contre, Patrick, j'obtiens une erreur quand il ne trouve pas d'information NOT_FOUND

    et cela bloque

    Cordialement,

  6. #6
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut re
    Bonjour
    c'est un code de base que je t'ai donné

    il va te falloir maintenant intégrer la gestion d'erreur

    pour cela il faut que tu VERIFIE la présence de "NOT-FOUND" dans le texte retourné du json

    la fonction INSTR fera très bien l'affaire

    simplement comme ceci:
    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
     
    'exemple https://maps.googleapis.com/maps/api/distancematrix/json?origins=toulon&destinations=paris&sensor=false"
    Sub test()
        donnéegooglemaps "trucmuche", "paris"
    End Sub
    Function donnéegooglemaps(depart, arrivée)
        Dim DemandeFichier As Object, distance As String, durrée As String, url As String, message As String
        url = "https://maps.googleapis.com/maps/api/distancematrix/json?origins=" & depart & "&destinations=" & arrivée & "&sensor=false"
        Set DemandeFichier = CreateObject("Microsoft.XMLHTTP")  'instancie l'object
        DemandeFichier.Open "POST", url, False
        DemandeFichier.send
       ' MsgBox DemandeFichier.responsetext    'ce message t'affiche tout le texte en entier
     
        If InStr(DemandeFichier.responsetext, "NOT_FOUND") > 0 Then
            message = "pas de donnée pour ce parcour " & vbCrLf & " veuillez verifier le depart ou destination"
        Else
            distance = Split(Split(DemandeFichier.responsetext, "text"" : ")(1), ",")(0)
            durrée = Split(Split(DemandeFichier.responsetext, "text"" : ")(2), ",")(0)
            message = "disitance a parcourir = " & distance & vbCrLf & "durée du voyage = " & durrée
        End If
        MsgBox message
    End Function
    rien de plus facile
    Au plaisir
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

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

Discussions similaires

  1. récuperer des données à partir des application de google map
    Par ait.belarbi dans le forum APIs Google
    Réponses: 1
    Dernier message: 26/01/2012, 22h46
  2. Réponses: 1
    Dernier message: 21/03/2007, 16h43
  3. Réponses: 1
    Dernier message: 29/11/2006, 12h00
  4. pb de lecture des données fichier .ini
    Par peppena dans le forum C
    Réponses: 5
    Dernier message: 12/06/2006, 17h45
  5. [JList] Lecture des données sauvegardées dans un fichier
    Par Myogtha dans le forum Composants
    Réponses: 7
    Dernier message: 10/06/2004, 21h05

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