Microsoft 365 Calcul de distance et de temps de trajet entre deux villes

marloniBrando

XLDnaute Nouveau
Bonjour à tous,

Dans le cadre de mon travail et plus particulièrement afin d'optimiser le temps de trajet en voiture de mes employés, j'aimerais créer un fichier EXCEL permettant de calculer automatiquement la distance en KM et la durée de trajet en voiture et en train entre deux villes. J'ai longuement cherché sur les forums mais je n'ai pas trouvé de solution, les api ont changé depuis ce qui me complique la tâche. De plus je ne suis pas un crack en informatique et je suis incapable de programmer seul ce type de modèle. Je suis actuellement sur Excel Version 16.34 Office 365.

Je vous joint un fichier type que je souhaiterais exploiter. Pour un sujet de confidentialité j'ai mis des adresses fictives, il y en a 700 en réalité. L'idée serait donc de pouvoir recalculer brièvement le temps de trajet à chaque fois que l'on change la ville d'arrivée.

PS: SI jamais sur mac c'est trop compliqué, je possède un ordinateur avec une tour et un EXCEL 2007 que je pourrais utiliser en dernier recours.

Merci d'avance pour vos réponses, cela me serait d'une immense utilité!

Cordialement,

MARC
 

Pièces jointes

  • Point de vente Distances.xlsx
    10.7 KB · Affichages: 205

laurent3372

XLDnaute Impliqué
Bonjour,

J'ai utilisé l'API de Bing et j'ai codé des fonctions personnalisées en VBA.
VB:
Function GetDistance(adr1 As String, adr2 As String) As Variant
    Dim url As String
    Dim text As String
    Dim xhr As New MSXML2.XMLHTTP60
    Dim oRe As New RegExp
    Dim oMc As MatchCollection
    Dim repText As String
    
    oRe.Pattern = """travelDistance"":(\d+.\d+),"
    'On Error Resume Next
    Application.StatusBar = "Recherche distance en cours …"
    url = "http://dev.virtualearth.net/REST/v1/Routes/driving" & _
        "?key=AqfaTCi9xqn5pr_NHoTrpRy8g9x9VnHJqqQcCUTr8xG7kofvzNacQMEAg5GmvLII" & _
        "&Waypoint.0=" & URLCode(adr1) & _
        "&Waypoint.1=" & URLCode(adr2) & _
        "&maxSolutions=1" & _
        "&distanceUnit=km" & _
        "&routeAttributes=excludeItinerary"
    xhr.Open "GET", url, False
    xhr.send
    text = xhr.responseText
    Set oMc = oRe.Execute(text)
    If oMc.Count > 0 Then
        repText = oMc(0).SubMatches(0)
        GetDistance = CDbl(Replace(repText, ".", ","))
    Else
        GetDistance = "Non trouvé"
    End If
    Application.StatusBar = "Terminé."
End Function
Et ensuite, sur la feuille:
Code:
=GetDistance($C4;$E4)
=GetDurée($C3;$E3;"driving")
(Même principe pour les durées où mode="driving" (en voiture) ou "transit" (transports en commun)

Cordialement,
--
LR
 

Pièces jointes

  • Point de vente Distances (1).xlsm
    28.8 KB · Affichages: 572

laurent3372

XLDnaute Impliqué
S'il y a marqué #NOM, c'est que la fonction personnalisée n'a pas été trouvée. Es-tu bien sûr d'avoir ouvert mon fichier .xlsm et non pas un xlsx dans lequel tu aurais codé mes formules ? Sinon, il faudra essayer sur un PC. Je ne connais pas bien le Mac.
 

Nthierry74

XLDnaute Nouveau
Bonjour,

J'ai utilisé l'API de Bing et j'ai codé des fonctions personnalisées en VBA.
VB:
Function GetDistance(adr1 As String, adr2 As String) As Variant
    Dim url As String
    Dim text As String
    Dim xhr As New MSXML2.XMLHTTP60
    Dim oRe As New RegExp
    Dim oMc As MatchCollection
    Dim repText As String
   
    oRe.Pattern = """travelDistance"":(\d+.\d+),"
    'On Error Resume Next
    Application.StatusBar = "Recherche distance en cours …"
    url = "http://dev.virtualearth.net/REST/v1/Routes/driving" & _
        "?key=AqfaTCi9xqn5pr_NHoTrpRy8g9x9VnHJqqQcCUTr8xG7kofvzNacQMEAg5GmvLII" & _
        "&Waypoint.0=" & URLCode(adr1) & _
        "&Waypoint.1=" & URLCode(adr2) & _
        "&maxSolutions=1" & _
        "&distanceUnit=km" & _
        "&routeAttributes=excludeItinerary"
    xhr.Open "GET", url, False
    xhr.send
    text = xhr.responseText
    Set oMc = oRe.Execute(text)
    If oMc.Count > 0 Then
        repText = oMc(0).SubMatches(0)
        GetDistance = CDbl(Replace(repText, ".", ","))
    Else
        GetDistance = "Non trouvé"
    End If
    Application.StatusBar = "Terminé."
End Function
Et ensuite, sur la feuille:
Code:
=GetDistance($C4;$E4)
=GetDurée($C3;$E3;"driving")
(Même principe pour les durées où mode="driving" (en voiture) ou "transit" (transports en commun)

Cordialement,
--
LR
Bonjour

Merci pour ce fichier très intéressant
cependant depuis cette semaine il ne fonctionne plus, toutes les réponse sont "Non trouvé"
je ne suis pas très fort en informatique, mais j'ai l'impression que l'API ne répond plus

peut on m'aider?
 

Discussions similaires

Statistiques des forums

Discussions
315 093
Messages
2 116 122
Membres
112 666
dernier inscrit
Coco0505