Fonctions de calcul de temps de trajet et de distance

Comment calculer un temps de trajet ou la distance par la route entre deux villes ou codes postaux (google maps)

Function get_km(place_a, place_b)
 my_xml_path = "http://maps.google.fr/maps?saddr=" & place_a & "&daddr=" & place_b & "&ie=utf-8&v=2.1&cv=4.0.2744&hl=fr&output=kml"
 Set xmlDoc = CreateObject("MSXML2.DOMDocument")
 xmlDoc.async = False
 xmlDoc.Load (my_xml_path)
 Set nodelist = xmlDoc.getElementsByTagName("description")
 my_raw_string = nodelist.Item(nodelist.Length - 1).firstchild.nodevalue
 get_km = Monextract(my_raw_string, ": ", "&")
 End Function
Function get_driving_time(place_a, place_b)
 my_xml_path = "http://maps.google.fr/maps?saddr=" & place_a & "&daddr=" & place_b & "&ie=utf-8&v=2.1&cv=4.0.2744&hl=fr&output=kml"
 Set xmlDoc = CreateObject("MSXML2.DOMDocument")
 xmlDoc.async = False
 xmlDoc.Load (my_xml_path)
 Set nodelist = xmlDoc.getElementsByTagName("description")
 my_raw_string = nodelist.Item(nodelist.Length - 1).firstchild.nodevalue
 get_driving_time = Monextract(my_raw_string, "environ ", ")")
 get_driving_time = Replace(get_driving_time, "minutes", "")
 If InStr(get_driving_time, "heure") = 0 Then get_driving_time = "00:" & get_driving_time
 get_driving_time = Replace(get_driving_time, "heures", ":")
 get_driving_time = Replace(get_driving_time, "heure", ":")
 get_driving_time = get_driving_time & ":00"
 get_driving_time = Replace(get_driving_time, " ", "")
 get_driving_time = TimeValue(get_driving_time)
 End Function
Function Monextract(machaine, debut, fin)
 PosH1 = InStr(1, machaine, debut)
 PosH2 = InStr(1, machaine, fin)
 long_first = Len(debut)
 Leng = PosH2 - PosH1 - long_first
 Monextract = Mid(machaine, PosH1 + long_first, Leng)
 End Function

Auteur :

Mots clefs associés à cette page : , , ,

Petit Problème avec Get_km

Petite découverte pour moi de la manipulation de MSKML2.DOMDocument

j'ai testé la fonction Get_km, qui, bizarrement fonctionne bien tant que l'on indique deux villes dont la distance est inférieure à 1000 km

J'ai fait le test sur ?Get_mk("Brest","Strasbourg") en mode pas à pas et la variable my_raw_string contient le texte suivant : (je n'ai pris que le début)

Distance: 1 069 km (environ 10 heures 16 minutes)

Bizarre isn't it !!!

j'ai fait plusieurs test, l'erreur semble systématique dès qu'on dépasse 1000 km

Michel Allaire (de la java de la Varenne)

problème

Bonjour,

Je débute avec VBA. Mais je trouve cette fonction de calcul de temps de trajet intéressante.

J'ai essayé de la mettre en application mais cela n'a pas fonctionné. J'ai droit à un message ERREUR DE COMPILATION: End Sub attendu. En effet, dès que je saisis Function, le End Sub disparait et je ne comprends pas pourquoi.

Si quelqu'un pouvait me venir en aide. Ce serait très sympa.

Merci d'avance.

copier-coller

Bonjour,
Je ne comprends pas bien votre problème : avez vous copié-collé les fonctions ci-dessus dans votre classeur (attention il faut le faire dans un module ordinaire, par dans un module de feuille) ?
Attention, si vous avez des lignes qui apparaissent en rouge, il faut corriger et supprimer les retours à la ligne intempestifs (je corrigerai sur la page)
Quand apparait votre problème ?
Dans votre classeur vous tapez ensuite dans une cellule = get_km("Paris";"Lyon") pour avoir la réponse.
Vous pouvez poser le cas échéant la question sur le forum MPFE pour plus d'aide sur ces fonctions.

Misange

Quelles est la procédure à

Quelles est la procédure à faire pour être dans un module ordinaire et non pas de feuille?

Parce que jusqu'à présent,je faisais OUTIL/MACRO à laquelle je donnais un nom puis après CREER. Là VBE apparaissait et je collais les fonctions entre SubNom () et End Sub. J'ai compris qu'avec les fonctions, il ne fallait pas de Sub. Pour autant je n'arrive pas à faire exécuter le programme.

les bases

Bonsoir
Pour bien débuter avec les macros et les fonctions, je ne saurais que trop vous conseiller de lire cette page pas à pas ainsi que celle-ci qui décrit l'éditeur VBA et les différents types de modules.
Revenez ensuite si vela ne va pas et surtout, n'hésitez pas à aller sur le forum MPFE (il n'y en a pas sur ce site web) poser vos questions complémentaires, vous y serez toujours bien accueuillie.
Cela dit pour débuter avec les fonctions vous ne choisissez vraiment pas ce qu'il y a de plus simple !

Misange

Merci pour le conseil.

Merci pour le conseil. J'essaye en parallèle d'apprendre à utiliser le langage VBA.

J'ai trouvé la solution pour que cela fonctionne. Il faut écrire get_km("paris";"lyon") et ainsi on obtient la distance.

Par contre peut-être pourriez-vous me dire pourquoi lorsqu'on saisit une adresse complète avec un nom de rue, la fonction ne marche plus; alors que sur google maps cela est possible.

Bluffant !

Bluffant !

Mais avare de commentaires, on ne peut pas tout avoir.

Mettre dans une cellule :

=get_km("paris";"lyon")

nb : à condition d'habiter Paris et de se rendre à Lyon, bien sur. Sinon ça perd de son intérêt... 8-)

edit : et aussi =get_driving_time("paris";"lyon") puis format de cell en hh:mm

fetnat

Nouveau

1 Nouvelle page ajoutée ce mois-ci dont :

Mises à jour

3 pages modifiées ce mois-ci dont :