[VBA EXCEL] CALCULER LA DISTANCE ENTRE DEUX COORDONNÉES GÉOGRAPHIQUES

Utilisateur anonyme - 12 sept. 2010 à 09:50
 queque - 13 janv. 2014 à 13:31
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/52278-vba-excel-calculer-la-distance-entre-deux-coordonnees-geographiques

ca ne marche pas
Cpcdos Messages postés 425 Date d'inscription samedi 11 juillet 2009 Statut Membre Dernière intervention 28 octobre 2016 1
3 mai 2011 à 22:53
Merciii
Cpcdos Messages postés 425 Date d'inscription samedi 11 juillet 2009 Statut Membre Dernière intervention 28 octobre 2016 1
3 mai 2011 à 22:52
ok
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
3 mai 2011 à 22:52
Par contre, il te manquera la base de données répertoriant les noms de ville, les codes postaux et les coordonnées géographiques - impossible de les lister là.
Cpcdos Messages postés 425 Date d'inscription samedi 11 juillet 2009 Statut Membre Dernière intervention 28 octobre 2016 1
3 mai 2011 à 22:49
oO merciii :P
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
3 mai 2011 à 22:48
Oui, voilà le code principal, il te suffira de remplacer les références aux cellule sExcel par tes valeurs numériques :
Private Sub CalculeDistance()

' Calcule la distance entre deux coordonnées géographiques
' Les coordonnées Latitude et Longitude doivent être exprimées en degrés décimaux
' (et pas en degrés, minutes, secondes)

Dim gRayonMoyen As Single
Dim gLatitude1 As Single
Dim gLongitude1 As Single
Dim gLatitude2 As Single
Dim gLongitude2 As Single
Dim gDistance As Single

If Not (IsEmpty(Range("Lat1")) Or _
IsEmpty(Range("Long1")) Or _
IsEmpty(Range("Lat2")) Or _
IsEmpty(Range("Long2"))) Then
If Range("Lat1").Value = Range("Lat2").Value And _
Range("Long1").Value = Range("Long2").Value Then
Range("Distance").Value = 0
Else
gRayonMoyen = 6371 ' de la terre, en km
gPi = 4 * Atn(1)
' Convertit les degrés en radians
gLatitude1 = Range("Lat1").Value / 180 * gPi
gLongitude1 = Range("Long1").Value / 180 * gPi
gLatitude2 = Range("Lat2").Value / 180 * gPi
gLongitude2 = Range("Long2").Value / 180 * gPi
' Calcul
gDistance = ACos((Sin(gLatitude1) * Sin(gLatitude2)) _
+ (Cos(gLatitude1) * Cos(gLatitude2) * Cos(gLongitude1 - gLongitude2))) _
* gRayonMoyen
' Affichage
Range("Distance").Value = gDistance
End If
End If

End Sub

Private Function ACos(AngleRandian As Single) As Single
' ArcCosinus
ACos = Atn((AngleRandian * (-1)) _
/ Sqr(((AngleRandian * (-1)) * AngleRandian) + 1)) _
+ (gPi / 2)
End Function
Cpcdos Messages postés 425 Date d'inscription samedi 11 juillet 2009 Statut Membre Dernière intervention 28 octobre 2016 1
3 mai 2011 à 22:17
oO Woiia ! pas mal
j'aimerai bien avoir votre programme

parcontre j'ai pas Excel & office :s

moi j'ai vb.net vb6/5 . ya t'il un moyen ?? ^^
mdegremo Messages postés 17 Date d'inscription jeudi 21 août 2008 Statut Membre Dernière intervention 10 septembre 2011
2 févr. 2011 à 14:07
Merci quand même jack,
Etant novice,je ne m'en sors pas.
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
2 févr. 2011 à 09:47
Dans la Sub CalculeDistance, tu n'as qu'à :
- remplacer
(en dessous du commentaire ' Convertit les degrés en radians )
Range("Lat1").Value par ta latitude de départ
Range("Long1").Value par ta longitude de départ
Idem pour la destination avec Lat2 et Long2
- puis à calculer gDistance (en dessous du commentaire ' Calcul

Pas compliqué.
mdegremo Messages postés 17 Date d'inscription jeudi 21 août 2008 Statut Membre Dernière intervention 10 septembre 2011
2 févr. 2011 à 07:48
Merci jack,
J'ai déjà essayé, mais comme je suis plus que débutant, j'ai vraiment du mal à voir comment faire le form
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
1 févr. 2011 à 23:37
lol, tu n'as qu'à lire et comprendre le code de cette source : tu auras la solution.
mdegremo Messages postés 17 Date d'inscription jeudi 21 août 2008 Statut Membre Dernière intervention 10 septembre 2011
1 févr. 2011 à 18:03
Bonsoir,
J'essaye de me creer un petit programme en Visual pour mon job et j'aurai besoin d'intégrer un outil de calcul de distance gps par les coordonnées Lat/long. Si vous pouvez me donner un coup de main, ce serait vraiment top.
Merci d'avance
Utilisateur anonyme
12 sept. 2010 à 18:56
Je viens de tester à nouveau et cette fois-ci ça marche parfaitement et la distance est correcte.
Je me demande si la courbure de la terre à beaucoup d'influence sur une distance de 1000 km
Merci pour la mise à jour.
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
12 sept. 2010 à 13:33
Voilà, j'ai remis à jour la liste des villes qui semblaient manquer.
Boucle infinie : c'est bizarre. Cependant, j'ai eu un problème de stabilité de VBA durant la dev (plus moyen d'afficher l'éditeur). Peut-être dû à la quantité de données.
Utilisateur anonyme
12 sept. 2010 à 09:50
Bonjour jack,
Je n'ai pas eu de chance surement ;)
Lorsque je tape mon code postal (32000) , rien ne se passe puis la cellule d'arrivée est sélectionnée automatiquement. Je tape donc 31000 (toulouse) et la feuille semble partir en boucle infinie.
Sinon avec d'autres codes postaux ca fonctionne bien.
A bientôt.
Rejoignez-nous