Coordonnées GPS - Recherche de la ville la plus proche

Bonjour le forum,

Mon problème est le suivant : je voudrai pouvoir entrer des coordonnées GPS (latitude + longitude en décimal ou DMS) dans un tableur Excel et qu'une recherche, via une macro VBA, m'indique quelle est la ville la plus proche des coordonnées inscrites parmi celles de ma base de données (qui comporte les coordonnées de ces villes en décimal et DMS).

J'ai déjà créé toutes les conditions limites, mais il me manque "juste" la partie centrale du programme. Je pensais à un calcul du minimum de distance entre les coordonnées de la ville en question et celles de la base de données, mais en tant que novice en VBA, je n'y arrive pas...

J'espère que vous pourrez m'aider.

Merci d'avance

Bonjour

Oups, voilà la macro que je voudrai compléter :

Sub correspondance()
    Dim lat As Double
    Dim lng As Double
    Dim ville As String

    If Not IsEmpty(Range("D18")) And Not IsEmpty(Range("E18")) Then
        If IsNumeric(Range("D18")) And IsNumeric(Range("E18")) Then
            If Range("D18") >= ?? And Range("D18") <= ?? Then
                If Range("E18") >= ?? And Range("E18") <= ?? Then

    --> JE NE SAIS PAS QUOI METTRE ICI <--

                    MsgBox "La ville la plus proche est " & ville & " ."
                    Sheets("Carte").Cells(18, 2).Value = ville
                Else
                    MsgBox "Nous ne sommes plus en France."
                    Range("E18").ClearContents
                End If
            Else
                MsgBox "Nous ne sommes plus en France."
                Range("D18").ClearContents
            End If

        Else
            MsgBox "L'entrée " & Range("D18") & " et/ou " & Range("E18") & " n'est/ne sont pas valide(s) !"
            Range("D18").ClearContents
            Range("E18").ClearContents
        End If
    Else
        MsgBox "L'entrée est vide !"
        Range("D18").ClearContents
        Range("E18").ClearContents
    End If

End Sub

RE

tu notes dans ta MACRO : --> JE NE SAIS PAS QUOI METTRE ICI <--

Rassure toi, moi non plus , c'est un classeur avec des données qu'il faut

comment veux-tu que l'on puisse élaborer une MACRO sans référence de colonne, ligne, cellule, peut-être en l'an 3000

Voir le point N° 6 de ce lien https://forum.excel-pratique.com/annonces/explications-et-regles-a-respecter-t13.html

Bonjour,

je ne suis pas certain qu'il faille une macro

mais sans le fichier, difficile de répondre ...


et puis explore les réponses déjà apportées :

https://forum.excel-pratique.com/excel/coordonnees-gps-et-filtre-t37325.html

https://forum.excel-pratique.com/excel/macro-tableau-double-entree-meilleurs-choix-t37350.html

Désolé... Ci-joint le classeur en question

Et merci Steelson, je vais regarder les liens Cependant j'ai déjà fait quelques recherches sur le forum et je n'ai pour le moment pas réussi à adapter à mon problème les solutions proposées sur les autres sujets.

131recherche-gps.xlsm (20.37 Ko)

Bonjour à tous,

Il me semble aussi que pour ce besoin, il n'est pas forcement utile de passer par du vba, mais en 2 formules la ville la plus proche se trouve.

Voir fichier joint :

354ville-proche.xlsx (10.08 Ko)
  • pour chaque ville référencée on calcule la distance avec les coord saisies en D18 et E18
  • en F18 un index/equiv sur un mini affiche la ville la plus proche

Est-ce que ça peut convenir?

Pierre

Bonjour pierrep56 et merci

Depuis le début, je m'étais fixé comme contrainte de ne pas avoir à calculer la distance mais après vos remarques, je me rends compte que c'est ce qu'il y a de plus simple à faire La formule avec "=INDEX(...)" correspond tout à fait à ce que je veux obtenir ! (je l'avais déjà vu quelque part mais je voulais passer outre)

Merci également à M12 et Steelson

Les remerciements vont à Pierre, je n'ai pas fait grand chose, mais j'allais te proposer en effet une solution sans macro

Bonjour,

Nouveau sur le forum, je viens de voir ce fil d'actualité qui correspond exactement à ce que j'essai de faire depuis bientôt 3 heures. Par contre je cherche depuis tout à l'heure mais je ne vois pas comment faire. Si on imagine que je veux faire ressortir les 3 villes les plus proches, comment puis-je donc faire ?

Merci par avance pour votre retour,

Bonne réception et belle soirée à tous,

Quentin

Bonjour,

C'est simple, il suffit de classer les distances calculées par ordre croissant et un simple 'Index-Equiv' renvoie les 3 plus proches

Cf exemple joint

Pierre

pierrep56 a écrit :

Bonjour,

C'est simple, il suffit de classer les distances calculées par ordre croissant et un simple 'Index-Equiv' renvoie les 3 plus proches

Cf exemple joint

Pierre

Merci Pierre pour votre retour.

J'avais réussi à faire quelque chose comme cela en partant du fichier via la formule :

Ville 1 =RECHERCHEV(PETITE.VALEUR(G2:G12;1);tableau2;2;FAUX) >petite valeur étant la distance la plus courte

Ville 2 = =RECHERCHEV(PETITE.VALEUR(G2:G12;2);tableau2;2;FAUX) > petite valeur étant la deuxième distance la plus courte

etc.

Ce qu'il se passe c'est que je voudrai avoir cela pour chaque emplacement de ville.

Je m'explique que chaque ville ressorte les 3 villes les plus proches de celle-ci.

En pièce jointe le tableur récapitulant ma demande.

Merci par avance pour votre aide.

Je tourne en rond depuis ce matin a essayer pleins de solutions ... et impossible de trouver une solution qui pourrait correspondre.

Il faudrait que je créé autrement autant de colonne (distance) qu'il y a de ligne afin de pouvoir faire ressortir une liste de choix des villes les plus proches.

Y a t il pas une solution plus simple à mettre en oeuvre car vu la quantité de ville dont j'ai à ma disposition cela est compliqué.

Merci par avance pour votre aide,

Bah, c'est pas dur.

A partir de la proposition précédente qui affiche les 3 villes proches d'un point, il suffit de répéter le même calcul pour l'ensemble des villes. Soit le code suivant exécuté par clic sur le bouton "Go" du fichier démo des communes de l'Ain :

Sub Go()
Dim T As Variant, TR As Variant, i As Integer

    With Sheets("Feuil1")
        T = .Range("A1:G411").Value
        ReDim TR(1 To 411, 0 To 2)
        TR(1, 0) = "VILLE LA PLUS PROCHE 1"
        TR(1, 1) = "VILLE LA PLUS PROCHE 2"
        TR(1, 2) = "VILLE LA PLUS PROCHE 3"

        For i = 2 To 411
            .Range("O1") = T(i, 6)
            .Range("P1") = T(i, 7)
            TR(i, 0) = .Range("Q2")
            TR(i, 1) = .Range("Q3")
            TR(i, 2) = .Range("Q4")
        Next i
        .Range("H1").Resize(411, 3) = TR
    End With
End Sub

Bonsoir @Pierre56,

J'ai bien pris connaissance de ton fichier mais en regardant ce dernier j'ai l'impression qu'il ne calcule les distances que par rapport à des coordonnées GPS initiales (O1 et P1)

Hors de mon côté, je désire que ce calcul se fasse pour chaque ligne, c'est à dire, je m'explique :

Que pour la première ligne : AMBERIEU EN BUGEY (A2) > ils ressortent les 3 ou X villes plus proches

pour la ligne A3 > ils ressortent les 3 ou X villes plus proches

etc.

Pouvez-vous me confirmer que c'est bien ce qu'il se fait ?

Bonne réception et belle soirée,

Cordialement,

Mauvaise impression.

Le calcul se fait ligne par ligne et indique bien les 3 communes les plus proches de la commune indiquée sur cette même ligne.

Par exemple Oyonnax est bien à ~2,8 km de Bellignat, une simple vérif sur googlemap-trajet le confirme.

Si ça perturbe la lecture, les colonnes K à R peuvent être masquées, elles ne servent que pour les calculs intermédiaires.

Rechercher des sujets similaires à "coordonnees gps recherche ville proche"