Écrit par : m00n 16 Jun 2019, 10:02
Hello tout le monde,
J'ai trouvé une fonction en vba sur le net qui calcule grâce à Google Maps la distance entre deux villes. Mais, elle requiert Microsoft XML v6.0 qui ne peut pas être installé sur un Mac. Voici la fonction :
Code
Function G_DISTANCE(Origin As String, Destination As String) As Double
' Requires a reference to Microsoft XML, v6.0
' Draws on the stackoverflow answer at bit.ly/parseXML
Dim myRequest As XMLHTTP60
Dim myDomDoc As DOMDocument60
Dim distanceNode As IXMLDOMNode
G_DISTANCE = 0
' Check and clean inputs
On Error GoTo exitRoute
Origin = WorksheetFunction.EncodeURL(Origin)
Destination = WorksheetFunction.EncodeURL(Destination)
' Read the XML data from the Google Maps API
Set myRequest = New XMLHTTP60
myRequest.Open "GET", "http://maps.googleapis.com/maps/api/directions/xml?origin=" _
& Origin & "&destination=" & Destination & "&sensor=false", False
myRequest.send
' Make the XML readable usign XPath
Set myDomDoc = New DOMDocument60
myDomDoc.LoadXML myRequest.responseText
' Get the distance node value
Set distanceNode = myDomDoc.SelectSingleNode("//leg/distance/value")
If Not distanceNode Is Nothing Then G_DISTANCE = distanceNode.Text / 1000
exitRoute:
' Tidy up
Set distanceNode = Nothing
Set myDomDoc = Nothing
Set myRequest = Nothing
End Function
Est-ce que l'un d'entre vous, doué en vba, pourrait convertir cette fonction pour qu'elle tourne sous excel Mac (office 2011 ou 2016) ?
Merci d'avance.
m00n
Écrit par : Aliboron 16 Jun 2019, 10:46
Vu que la macro fait appel à des fonctions absentes de la version pour Mac (ENCODEURL(), par ex.) et que cela nécessite des appels à des API Google, il y a peu de chances que cette fonction soit adaptable à une version pour Mac. De plus, les requêtes internet, ce n'est certainement pas un point fort des versions pour Mac d'Excel.
Déjà, telle quelle, la fonction ne tourne pas dans Office sous Windows 10, il doit donc manquer pas mal de données pour qu'on puisse envisager de l'utiliser...
Écrit par : m00n 16 Jun 2019, 16:37
Ok merci Aliboron.
Si ce n'est pas trop te demander, puisqu'il semble que tu aies windows 10, pourrais-tu tester la fonction ci-dessous, qui normalement fait la même chose que celle de mon premier post. Fonctionne-t-elle ? Est-elle adaptable ? Merci beaucoup.
Code
Function distancier_google(start, dest)
'creation d'un object xmldoc en memoire
Set xmldoc = CreateObject("Microsoft.XMLDOM")
xmldoc.Async = "false"
'creation de l'url avec les arguments
URL = "https://maps.googleapis.com/maps/api/distancematrix/xml?origins=" & start & "&destinations=" & dest & "&language=fr-FR"
xmldoc.Load (URL) 'load de l'url dans le xmldoc
'Debug.Print xmldoc.XML
'examen du fichier en DOM
For Each Distances In xmldoc.SelectNodes("/DistanceMatrixResponse")
Status = Distances.SelectSingleNode("status").Text
If Status = "OK" Then
depart = Distances.SelectSingleNode("origin_address").Text
Debug.Print depart
Arrivee = Distances.SelectSingleNode("destination_address").Text
Debug.Print Arrivee
For Each Row In xmldoc.SelectNodes("/DistanceMatrixResponse/row/element")
Status = Row.SelectSingleNode("status").Text
If Status = "OK" Then
'on imbrique 2 boucles "la distance" et le "temps"
For Each Distance In xmldoc.SelectNodes("/DistanceMatrixResponse/row/element/distance")
En_M = Distance.SelectSingleNode("value").Text
Debug.Print En_M & " metres"
En_KM = Distance.SelectSingleNode("text").Text
Debug.Print En_KM & " kilomètres"
For Each Duration In xmldoc.SelectNodes("/DistanceMatrixResponse/row/element/duration")
En_SS = Duration.SelectSingleNode("value").Text
Debug.Print En_SS; " secondes"
En_MM = Duration.SelectSingleNode("text").Text
Debug.Print En_MM
Next
Next
Else
End If
Next
Else
End If
Next
Set xmldoc = Nothing
End Function
Écrit par : Aliboron 16 Jun 2019, 18:00
Citation (m00n @ 16 Jun 2019, 16:37)
puisqu'il semble que tu aies windows 10,
Eh oui, grâce à Parallels Desktop, je peux sans souci faire des vérins sous Windows !
Citation (m00n @ 16 Jun 2019, 16:37)
pourrais-tu tester la fonction ci-dessous, qui normalement fait la même chose que celle de mon premier post.
Je n'arrive pas à la faire fonctionner, déjà pour une raison simple : je n'ai aucune idée de ce qu'il faut mettre comme paramètres départ et arrivée (des coordonnées GPS, des noms de ville,...)
Pour ce qui est de l'adapter au Mac, on risque bien de se trouver confrontés aux mêmes soucis que précédemment. Déjà ça commence fort avec un ActiveX (fonctionnalité totalement incompatible sur Mac)...
Écrit par : baron 16 Jun 2019, 18:37
Des vérins ou des vérifs ?…
Écrit par : Aliboron 16 Jun 2019, 18:52
Citation (baron @ 16 Jun 2019, 18:37)
Des vérins ou des vérifs ?…
:coucou:
Écrit par : baron 16 Jun 2019, 19:25
Citation (Aliboron @ 16 Jun 2019, 19:00)
je peux sans souci faire des vérins sous Windows !
Un truc de ce genre-là ?
Écrit par : hellomorld 17 Jun 2019, 05:19
C'est pour calculer la distance à vol d'oiseau ou par la route ?
Dans le premier cas pas besoin de google il suffit d'utiliser la formule d'Havershine
http://www.ordinateur.cc/Logiciel/Microsoft-Access/135119.html
Écrit par : m00n 18 Jun 2019, 09:59
hello,
Merci à tous pour vos réponses (sérieuses ou pas ).
Dans le cadre de mon travail, je dois comptabiliser mes déplacements journaliers. Pas à la centaine de mètres près quand même. Donc j'aurais voulu faire un tableau dans excel dans lequel je mets ma ville de départ et ma ville d'arrivée et qu'à l'aide d'une fonction, il me calcule le total des km réalisés. L'équation Haversine n'est donc pas utilisable dans mon cas.