Fonctions de calcul de temps de trajet et de distance
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 FunctionFunction 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 : mriquelyon
Mots clefs associés à cette page : trajet, function, fonction, distance
- Vous devez vous identifier ou créer un compte pour écrire des commentaires

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