Macro pour calculer la distance entre deux villes via google maps

micou

XLDnaute Nouveau
Bonjour @tatiak

Tout d'abord merci pour ce partage.
Je rencontre des difficultés avec certains calculs de distance. Les résultats sont erronnés et je n'arrive pas à savoir pourquoi

Ex :
Adresse de départ : 36 avenue Jean Jaurès 63400 CHAMALIERES
Ville d'arrivée : 30 Rue Pierre le Vénérable 63000 CLERMONT FERRAND

Résultat : 596.4km (or sur google maps directement cela représente 3,5km)

Par contre ce deuxième exemple fonctionne :
Adresse de départ : 36 avenue Jean Jaurès 63400 CHAMALIERES
Ville d'arrivée : Rue du 8 mai 63000 CLERMONT FERRAND

Résultat : 0.9km(et sur google maps directement c'est pareil)

Auriez-vous une idée ?

Merci par avance

Micou
 

micou

XLDnaute Nouveau
Bonjour

Merci pour la rapidité de votre réponse.
Je constate que cela marche chez vous, mais malheureusement même avec votre fichier cela ne marche pas chez moi (Voir PJ)

Je ne vois pas du tout pourquoi
 

Fichiers joints

poilamonnez

XLDnaute Junior
Bonjour,
Est-il possible avec le fichier "Distance_Json_Jserie.xlsm" d'obtenir les colonnes "N°Département départ" et "N° département arrivée" ?
Au moins pour les villes en france.
Merci d'avance
Cordialement
 

tatiak

XLDnaute Barbatruc
Bonjour,
Pour des saisies d'adresses complètes (rue ville par ex : Bd de l'Europe Dinan), il suffit de modifier le code de la procédure "sub Série" de la façon suivante, pour obtenir le code postal en E et F :

VB:
Tdata(i, 5) = Left(Split(Trajet.ptA, ",")(1), 6) 'Tdata(i, 5) = Trajet.ptA
Tdata(i, 6) = Left(Split(Trajet.ptB, ",")(1), 6) 'Tdata(i, 6) = Trajet.ptB
 

poilamonnez

XLDnaute Junior
Merci Tatiak,
ça réponds plus ou moins à ma demande, mais des fois ça répond "Franc" au lieu du code postal. c'est certainement dû à Google !
Personnellement j'ai juste besoin du kilométrage entre 2 villes en France Corse incluse et que la requête me donne juste les n° de département ainsi que la durée du trajet.
En fait tel quel c'est presque bon mais pas idéal.
Si quelqu'un a un peu de temps ....
Bonne soirée
 

tatiak

XLDnaute Barbatruc
Salut,

Pour mieux comprendre ce que l'on peut retirer de l'API de Google, ci-joint le résultat Json brut d'une requête prise au hasard :

Requête :
Code:
https://maps.googleapis.com/maps/api/distancematrix/json?origins=Nantes,%20France&destinations=2%20Bd%20de%20l%20Europe,%2022100%20Dinan,%20France&mode=driving&language=fr-FR
Résulat :
Code:
{
   "destination_addresses" : [ "2 Bd de l'Europe, 22100 Dinan, France" ],
   "origin_addresses" : [ "Nantes, France" ],
   "rows" : [
      {
         "elements" : [
            {
               "distance" : {
                  "text" : "164 km",
                  "value" : 163871
               },
               "duration" : {
                  "text" : "1 heure 58 min",
                  "value" : 7080
               },
               "status" : "OK"
            }
         ]
      }
   ],
   "status" : "OK"
}
Avec ces éléments, on peut donc extraire :
* les adresses (d'arrivée et départ) ou partie de ces adresses,
* la distance,
* la durée estimée.

Et c'est tout.

A noter dans cet exemple : ici l'adresse du point de départ est simplement 'Nantes, France' => on ne récupère pas le code postal, on ne pourra donc pas l'afficher.

Même si quelqu'un a un peu de temps.
 

Couture

XLDnaute Nouveau
Bonjour à tous !
J'ai voulu intégrer en simplifiant par rapport à mes besoins le code du dernier fichier Excel. D'avance je m'excuse cela faisait longtemps que je n'avais pas touché à VBA du coup je n'ai plus en tête le nom des procédures etc.

Mon problème :
1/ Si je copie/colle le code "simplifié" en fonction de mes besoins dans le fichier sur lequel je suis en train de travailler, celui-là ne fonctionne pas.
2/A l'inverse, si je copie/colle ce que j'avais déjà créé sur mon fichier de travail sur le fichier téléchargé du forum et que je simplifie le code "calcul des distances" en fonction de mes besoins tout fonctionne :/
==> j'ai pourtant exactement les deux mêmes codes sur toutes les feuilles/modules etc. Donc j'ai vraiment du mal à voir d'où peut venir mon pb.

J'ai fait un pas à pas détaillé sur chacun des classeurs et j'ai identifié le problème (enfin je crois) mais ne sais pas le résoudre.

Dans le code de "Get_Trajet" à un moment on fait appel aux éléments contenus dans "Json.rows" --> dans le cas du fichier téléchargé, ces éléments se lient aux "Elem" et "Elem1" alors que dans mon second fichier, "Elem" et "Elem1" restent vide (pourtant Json.rows ne l'est pas...).

Je ne sais pas si je suis claire... désolée !
 

Couture

XLDnaute Nouveau
Personne ?
C'est cette partie là qui bug :
Code:
'Debug.Print Site
       For Each Elem In Json.Rows
            For Each Elem1 In Elem.elements
                Debug.Print Elem1.distance.Value
                ok = Not (Elem1.Status = "ZERO_RESULTS")
                .Cells(Lg, 4).Value = Format(Elem1.distance.Value / 1000, "# ###.00") * 1
               
            Next Elem1
        Next Elem
 

Couture

XLDnaute Nouveau
J'ai compris mon problème mais je ne sais le résoudre

==> mon ".Rows" devrait être ".rows" idem pour mon ".Value"... mais VBA me le corrige automatiquement pour remettre des majuscules ! comment faire ? Merci !
 

tatiak

XLDnaute Barbatruc
Dans ce cas utilise la méthode CallByName, dans le genre :
VB:
    For Each Elem In VBA.CallByName(Json, "rows", VbGet)
        For Each Elem1 In Elem.elements
            ok = Not (Elem1.status = "ZERO_RESULTS")
            AversB.dist = VBA.CallByName(Elem1.distance, "value", VbGet) / 1000
            AversB.duree = VBA.CallByName(Elem1.duration, "value", VbGet) / 24 / 60 / 60
        Next Elem1
    Next Elem
 

Neileru4

XLDnaute Junior
Bonjour Laure,
Juste en passant, ci-joint 2 propositions pour calculer un trajet entre 2 adresses (utilisant les api de google) :
* une démo utilisant 2 formules
* une démo utilisant une sortie json (le calcul se fait après saisie ou modif du départ et/ou arrivée) donnant un trajet google (distance + temps estimé) + un calcul selon points GPS (donc en ligne droite)
Pierre
Y a t-il possibilité de mettre la distance km en temps en minutes?
 

Neileru4

XLDnaute Junior
Bon finalement, j'ai fini par trouver... !
Il suffit dans la 2ème formule de substituer "distance" par "duration" et de remplacer 1000 par 3600 pour obtenir le temps en heures

moi sa ne marche pas
j'ai modifier ce que tu as dit sa me mets en 24:00 alors que sa devrait me faire 12min
 

Neileru4

XLDnaute Junior
Bon finalement, j'ai fini par trouver... !
Il suffit dans la 2ème formule de substituer "distance" par "duration" et de remplacer 1000 par 3600 pour obtenir le temps en heures
avec ta formule que je mets en place pour moi 3,8 km me fait 24min ce n'est pas possible ou est mon erreur
 

tatiak

XLDnaute Barbatruc
Bonjour,

C'est très simple. Les conditions d'utilisation des données de GoogleMap ayant été modifiées, les propositions données plus haut ne sont plus du tout fonctionnelles.

Pour accéder à ces données avec une méthode similaire, il faut maintenant passer à la caisse ... merci Google ... fini la gratuité.

Pierre
 

Discussions similaires


Haut Bas