Problème de calcul de distance entre deux coordonnées géographiq

Signaler
Messages postés
2
Date d'inscription
vendredi 26 juin 2015
Statut
Membre
Dernière intervention
29 juin 2015
-
Messages postés
2
Date d'inscription
vendredi 26 juin 2015
Statut
Membre
Dernière intervention
29 juin 2015
-
Bonjour
J'ai essayé d'utiliser le code de cs_Jack :
[vba excel] calculer la distance entre deux coordonnées géographiques.
Mon but étant de calculer la distance qui sépare un point donné sur la carte, d'une ville de l'Indre (distance en vol d'oiseau).
Exemple :




Le souci est que mon résultat (Distance) est NÉGATIF. Le bon résultat serait 89 Km entre Civaux et Aigurande.
Je ne trouve pas le hic.
Si j'arrive à comprendre et donc rectifier ce résultat. L'étape suivante est de boucler le calcul pour chaque point d'arrivée.

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("LAT_ORIGINE")) Or _
            IsEmpty(Range("LNG_ORIGINE")) Or _
            IsEmpty(Range("LAT")) Or _
            IsEmpty(Range("LNG"))) Then
        If Range("LAT_ORIGINE").Value = Range("LAT").Value And _
           Range("LNG_ORIGINE").Value = Range("LNG").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("LAT_ORIGINE").Value / 180 * gPi
            gLongitude1 = Range("LNG_ORIGINE").Value / 180 * gPi
            gLatitude2 = Range("LAT").Value / 180 * gPi
            gLongitude2 = Range("LNG").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



Toute ma gratitude à celui ou celle qui consacrera un peu de temps pour m'aider.
Un grand MERCI

PS: mon niveau en programmation est bas.

2 réponses

Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
239
Bonjour,
1) moi, c'est 98 km et non 89 km, que je calcule
2) il est probable que tu t'es emmêlé les pinceaux entre les coordonnées
3) tu dis être d'un "niveau très bas en programmation".
Pourquoi alors utiliser VBA ? Une formule Excel suffit ===>>> regarde ===>>>



Et si tu tiens à utiliser VBA1 ===>>> utilise donc, depuis VBA, la propriété Formula !
Messages postés
2
Date d'inscription
vendredi 26 juin 2015
Statut
Membre
Dernière intervention
29 juin 2015

Merci de ton aide ucfoutu,
Je vais pour l'instant utiliser la formule.
Mais je cherche tout de même à trouver mon erreur sur le code.
Encore merci de t'être penché sur ma question.
Et merci pour ta solution
Bonne journée à toi.