Macro pour calculer la distance entre deux villes via google maps

platina

XLDnaute Nouveau
Bonjour !

Je souhaite créer une macro utilisant google maps pour calculer la distance (via la route, et non à vol d'oiseau) entre deux villes ;
Disons que j'ai le nom ou code postal (ce qui rend la chose la plus simple!) de la première ville en A1 et le nom ou code postal de la seconde ville en A2.
Comment faire pour afficher la distance entre les deux en A3 ?

Merci beaucoup !!
 

Gruick

XLDnaute Accro
Re : Macro pour calculer la distance entre deux villes via google maps

Bonjour aux voyageurs

@ledzepfred
Tu n'as peut-être pas vu, mais je l'avais déjà casé le batteur fou dans mon premier message.
Je vais bientôt faire les commissions pour manger, je ne peux le jeune !!!

@Catrice
Tu as raison pour les miles, aussi j'ai fait un test, voici ce que devient la fin du code (ah ! les Anglishes... mais quel bonheur)

Code:
Set Result = Sheets("Feuil2").Cells.Find("voiture")
  If Result Is Nothing Then
    X.Offset(0, 2) = "Itinéraire non trouvé !"
  Else
    X.Offset(0, 2) = Result.Offset(0, 1)
    km = InStr(Result.Offset(0, 1).Value, "k")
    If km <> 0 Then
      X.Offset(0, 3).FormulaR1C1 = "=LEFT(RC[-1],FIND("" km"",RC[-1]))*1" '
      X.Offset(0, 4).FormulaR1C1 = "=RIGHT(RC[-2],LEN(RC[-2])-FIND(""km"",RC[-2])-4)"
    Else
      X.Offset(0, 3).FormulaR1C1 = "=LEFT(RC[-1],FIND("" mi"",RC[-1]))*1.609"
      X.Offset(0, 4).FormulaR1C1 = "=RIGHT(RC[-2],LEN(RC[-2])-FIND(""mi"",RC[-2])-4)"
    End If
  End If

@Platina
France
Site extraordinaire qui regorge de base de données. (à transformer un peu des fois, pour rendre excelables)

Mais c'est un travail de romain
J'en ai fait un essai graphique partiel sur les altitudes.
Mais j'ai aussi pu y caser les 36610 communes de France métropolitaine, et donner le ou les noms de commune à chaque cellule. Attention 12 Mo !!!
Pour ce, j'ai mis en première ligne les longitudes (de -5,1 à +9,5 degrés) et en première colonne, les latitudes (de 51,1 à 41,35 degrés).
Une tite macro selon ce que l'on veut, et le tour est joué.
Magré tout, il y aura des trous et des bousculades, car certaines communes comme Chamonix, ou Nîmes, ou Fontainebleau sont très étendues, d'autres rikiki.

Bon courage

Gruick
 

Catrice

XLDnaute Barbatruc
Re : Macro pour calculer la distance entre deux villes via google maps

Bonjour,

Ci-joint un fichier qui place les villes de destination sur la carte de france.
C'est perfectible mais ça fonctionne.
L'affichage des villes est basé sur des formats nombre. Il faut que je vois pour les effacer au fur et à mesure car sinon le classeur va exploser ...

Mais on ne pourra pas mettre 7000 villes ...
A suivre ...

Il est sur Cjoint car trop gros à cause de la carte ....
http://cjoint.com/?lgoIXxJ4LN

J'ai laissé 3 villes de référence pour l'étalonage.
C'est un peu bricolé ;)
Pour bien faire il faudrait les references GPS des extremités de la carte afin de regler les echelles X et Y au mieux
 
Dernière édition:

hawkmoon

XLDnaute Nouveau
Re : Macro pour calculer la distance entre deux villes via google maps

Bonjour j'ai essayé vos fichiers excels (itinéraires, itinéraire(1) et itinéraire(2) ), cela marchait bien jusqu'à ce que j'essaye pour 90 itinéraires, il m'a calculé les 51 premiers puis j'ai eu
erreur d'exécution '1004'
Fichier inaccessible essayez l'une des opérations suivantes :
vérifiez que le dossier spécifié existe
vérifiez que le dossier ne se trouve pas en lecture seule
vérifiez que le nom du fichier ne comporte pas les caracètres suivants : <>?[] ni *

puis j'ai le choix entre fin débogage et aide

le débogage bloque à la ligne .Refresh BackgroundQuery:=False

et depuis je ne peux plus faire le moindre calcul d'itinéraire sans que cette erreur n'apparaisse.

cela est-il du à une limitation de google du nombre d'itinéraires qu'une adresse IP peut demander?
Si je fais une recherche d'itinéraire à partir de firefox directement sur le site de firefox, cela marche...
si quelqu'un a une réponse à ce problème ça m'aiderait beaucoup!
j'ai vraiment beaucoup de chance, j'ai cherché aujourd'hui comment calculer la distance route entre deux villes et je tombe sur ce topic qui a été lancé hier!

Merci d'avance!
 
Dernière édition:

hawkmoon

XLDnaute Nouveau
Re : Macro pour calculer la distance entre deux villes via google maps

au fait, j'ai adapté la macro pour via michelin mais je n'arrive pas à récupérer la partie de la page des résultats qui indique l'itinéraire
je n'ai pas réussi à l'adapter à mappy...
 

ledzepfred

XLDnaute Impliqué
Re : Macro pour calculer la distance entre deux villes via google maps

Bonsoir à tous,

ben là je dis chapeau!

J'avais bien pensé à un graphique nuage de point mais je ne voyais pas comment le superposer sur une carte (d'ailleurs j'ai pas compris comment tu as fait catrice!! mais comment-est ce que cela fonctionne-t-il?) d'où mon idée saugrenue de crée des zones de champ texte.
j'ai remarqué que dans le fichier il y avait des plages nommées coordonnes_ville, à quoi servent-elles?

Gruick : désolé j'avais pas capté ton allusion au batteur fou!

a+
 

JCGL

XLDnaute Barbatruc
Re : Macro pour calculer la distance entre deux villes via google maps

Bonjour à tous,
Salut Gruik,
Salut Catrice,

Tout comme LedZep, je dis BRAVO Catrice

Il est vrai qu'il y a un léger décalage sur les coordonnées mais est-ce vraiment important...

Tiré par les cheveux (cappilotracté...pour @Thierry) et pour LedZep :
Tu es une bonne âme de plante jaune à la page, bien que tu aies débuté vagabond

A++
A+ à tous
 

skun

XLDnaute Occasionnel
Re : Macro pour calculer la distance entre deux villes via google maps

Bonsoir à tous le fil et au forum

je viens voir le fichier de Catrice, je suis impressionné par ce travail, je ne pensait pas que excel permettait celà :eek:

vraiment c'est incroyable , félicitation !

j'aimerai savoir si ce programme pourrait etre adapter aux DOMTOM plus particulièrement l'ile de la réunion?

je vous remercie

salutation

skun
 

Catrice

XLDnaute Barbatruc
Re : Macro pour calculer la distance entre deux villes via google maps

Bonsoir,

@ skun, oui on peut surement l'adapter aux DOM.
Il faut une carte de la Reunion (facile)
Une base qui donne les coordonnées GPS des villes que tu souhaites gérer (moins facile)

@ ledzepfred, pour la carte, il suffit d'aller dans Motif/Motif et textures/Images et d'inserer.
Les plages nommées ne servent qu'à rendre le graphique dynamique. Il met autant de points (villes) qu'il y a de lignes dans DataCarte.
Pour afficher les étiquettes (c'est une astuce vue dans un fil de CB60 si je ne me trompe pas), on applique un format/nombre avec le nom de la ville et on demande à afficher les Labels X sur le graphique.
Le pb (à tester) c'est que ça va doper le fichier en formats nombres. Il faut que je vois pour les effacer au fur et à mesure.
Autre petit point, il faut rajouter des "-" sur les noms de villes composés (d'ou l'obligation de les saisir avec des espaces) http://www.galichon.com/codesgeo/ les transforme avec des "-".
Enfin, je teste le separateur decimal car http://www.galichon.com/codesgeo/ recupere les coordonnees avec des ".".
C'est un peu usine à gaz car le replace classique bug (sur XL 2002 en tous les cas) avec les nb du type 60.633333. Trop de decimales = suppression du . au lieu du remplacement :(

Voila
Y a pas grand chose en fin de compte ;)
 
Dernière édition:

Gruick

XLDnaute Accro
Re : Macro pour calculer la distance entre deux villes via google maps

Bonjour,

Je me suis amusé à rendre Macintoshable tout ça, sans le Split, et autres instructions genre CDbl qui existe mais que je ne connais pas. J'ai encore quelques surprises quand je cherche Paris, il me trouve Paris évidemment, mais me recopie Cormeilles-en-Parisis, le premier de la liste. Pas bien grave. Je vais zieuter ça.

Même aventure sur XL2004 Mac pour les décimales nombreuses, mais ça marche si on prend les "valeurs" une par une, et qu'on fait un CNUM. Ca donne un code archaïque, pas trouvé mieux, mais le temps me manque.
Code:
For Each Y In ZoneReplace
      Y.Offset(0, 2).FormulaR1C1 = "=REPLACE(RC[-2],SEARCH(""."",RC[-2]),1,"","")"
      Application.CutCopyMode = False
      Y.Offset(0, 2).Copy
      Y.Offset(0, 2).PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
      Y.FormulaR1C1 = "=VALUE(RC[2])"
      Y.Copy
      Y.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
      Y.Offset(0, 2).ClearContents
    Next
qui remplacera la boucle initiale chez moi.

En revanche, je vais vous donner le truc pour éviter de créer des formats de nombres pour faire apparaître les noms des villes sur la carte. (Parce-que ça peut être encombrant à force, et il faut nettoyer, sinon ça reste).
Voici donc le bout de macro
Code:
NbValeurs = Sheets("DataCarte").Range("A65536").End(xlUp).Row - 1
Sheets("Distances").ChartObjects("Graphique 4").Activate
Dim Etiq()
For i = 1 To NbValeurs
    ReDim Preserve Etiq(i)
    Etiq(i) = Sheets("DataCarte").Cells(i + 1, 1)
    ActiveChart.SeriesCollection(1).Points(i).DataLabel.Characters.Text = Etiq(i)
Next i

Ouf, j'ai pu servir à quelque chose...:D

Encore bravo Catrice, je suis toujours aussi admiratif.

Gruick, grand voyageur
 

Catrice

XLDnaute Barbatruc
Re : Macro pour calculer la distance entre deux villes via google maps

Hello Gruick,

Effectivement, c'est beaucoup mieux comme ça.
J'étais resté sur la solution des formats qui ne necessitait pas de macro (dans l'exemple d'origine) mais là étant donné qu'on a du code pourquoi s'en priver ...
Merci

Pour les recherche Paris, tu n'a pas un pb XlWhole et xlPart ?

Un vrai galere l'histoire du point et de la virgule ...
 
Dernière édition:

julien974

XLDnaute Occasionnel
Re : Macro pour calculer la distance entre deux villes via google maps

Bonjour,

Alors là les amis, vous avez trouvé quelque chose de vraiment intéressant!!!

J'aimerai bien appliquer cela pour les temps de conduite des chauffeurs poids lourds! Estimer combien de temps il faut pour un camion pour effectuer ses livraisons.

On a simplement besoin du nombre de km à parcourir entre deux villes, la vitesse moyenne du camion en km par heure et d'insérer dans tout ça les temps de pause obligatoires, les temps moyens de déchargement,…

Ainsi je pourrai simuler par exemple un trajet :

Rennes >> Nantes >> Bordeaux >> Agen

Vous pensez que ceci peut être possible ???

Si oui, dites le moi et je vous envoie tous les éléments,

Bien cordialement,

Julien974
 

Gruick

XLDnaute Accro
Re : Macro pour calculer la distance entre deux villes via google maps

Re,

Je viens de me rendre compte que des fois, XL me transforme les données galichonesques en nombre sans que je lui demande d'où test supplémentaire.
Code:
If IsNumeric(Y) Then GoTo re
, avec le re: juste avant le Y.Offset(0, 2).ClearContents.

Pour les traits d'union, j'ai fait l'inverse de toi, une fois les coordonnées acquises, et je compare avec le nom de la ville de la feuille "Distances", mais avec une boucle.
J'aurai pu faire avec un .find,
Code:
ville = Sheets("Req2").Cells.Find(What:=X, lookat:=xlWhole)
mais je ne sais pas quoi faire une fois repérée, je ne peux que faire un msgbox pour vérifier, mais ni copier, ni sélectionner.
C'est ça qui m'enquiquine avec le .find, rapide mais je sais à peine m'en servir.

Pour la carte, vu que les méridiens ne sont pas parallèles;), l'écart est plus étroit au nord qu'au sud, et ça me met donc Saint Jean de Luz un peu à l'intérieur des terres. Comment anamorphoser si possible légèrement la carte ?

Voilà Catrice, c'est proche du parfait, surtout grâce à toi.

Gruick
 

Catrice

XLDnaute Barbatruc
Re : Macro pour calculer la distance entre deux villes via google maps

julien974,

ci-joint une utilisation directe du fichier qui permet de faire un itineraire.
Tu peux ensuite greffer tous les calculs que tu souhaites.
Par etape, duree total, temps moyen etc ...

http://cjoint.com/?lhmHYLrGux

Gruick,
Utilise plutot
Set ville = Sheets("Req2").Cells.Find(What:=X, lookat:=xlWhole)
Ville devient un objet sur lequel tu peux faire un .Offset, un .Value, un .Address un .Select etc ...
 
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
314 496
Messages
2 110 236
Membres
110 708
dernier inscrit
novy16