Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

XL 2013 RECHERCHE AGENCE LA PLUS PROCHE D'UNE COMMUNE

  • Initiateur de la discussion Initiateur de la discussion CARO13
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

CARO13

XLDnaute Nouveau
Bonjour
J'ai besoin d'integrer dans un tableau de suivi l'agence la plus proche de chq Commune de France.
Je n'arrive pas à trouver la meilleure solution : VBA / QUERY ou formule XLS ???

Je vous joints mon tableau d'exemple avec en feuille 1 la liste des communes avec leur coordonnée GPS et en 2 la liste des agences

Je n'ai pas mis toutes les communes pour limiter la taille de mon fichier

Merci d'avance pour votre aide !
 

Pièces jointes

Bonjour,

Autre proposition
VB:
Option Explicit

Sub Recherche_Agence()
    Dim f1 As Worksheet, f2 As Worksheet
    Dim DerLig_f1 As Long, DerLig_f2 As Long, i As Long, k As Long
    Dim Dif_Lat As Long, Dif_Lon As Long
    Dim Agence As String, Result As String, Result_Inter As String
    Dim Lon_Com As String, Lat_Com As String
    Dim Lon_Ag As String, Lat_Ag As String
    Dim Deb As Double
    
    Application.ScreenUpdating = False
    Deb = Timer
    Set f1 = Sheets("COMMUNE")
    Set f2 = Sheets("AGENCES")
    DerLig_f1 = f1.Range("A" & Rows.Count).End(xlUp).Row
    DerLig_f2 = f2.Range("A" & Rows.Count).End(xlUp).Row
    f1.Range("M2:M" & DerLig_f1).ClearContents
    For i = 2 To DerLig_f1
        Lat_Com = Val(f1.Cells(i, "C"))
        Lon_Com = Val(f1.Cells(i, "D"))
        Result = 1000
        For k = 2 To DerLig_f2
            Lat_Ag = Val(f2.Cells(k, "K"))
            Lon_Ag = Val(f2.Cells(k, "L"))
            Dif_Lat = Abs(Lat_Ag - Lat_Com) * 1
            Dif_Lon = Abs(Lon_Ag - Lon_Com) * 1
            
            Result_Inter = Sqr(Dif_Lat * Dif_Lat + Dif_Lon * Dif_Lon)
            If Result_Inter < Result Then
                Result = Result_Inter
                Agence = f2.Cells(k, "A")
            End If
        Next k
        f1.Cells(i, "M") = Agence
    Next i
    
    MsgBox "Temps d'exécution: " & Round(Timer - Deb, 2) & "Sec"
    Set f1 = Nothing
    Set f2 = Nothing
End Sub
 

Pièces jointes

Bonjour Rouge
c'est exactement ce qu'il me fallait et en effet avoir le choix de 3 agences c'est encore mieux - MERCI

par contre lorsque je copie ta macro sur mon fichier j'ai un débogage sur
Result_Inter = Sqr(Dif_Lat * Dif_Lat + Dif_Lon * Dif_Lon)

et je n'arrive pas à comprendre pourquoi 🙁

le seul changement entre le fichier envoyé et mon fichier c'est le nombre de ligne aussi bien au niveau des communes qu'au niveau des agences

Peux tu m'orienter ?

Encore merci !
 
Remplacez cette ligne:
Dim Result_Inter As String, Result1 As String, Result2 As String, Result3 As String

par celle-ci:
Dim Result_Inter As Double, Result1 As Double, Result2 As Double, Result3 As Double
 
Super ca fonctionne … un énorme merci ! ca m'enlève une belle épine du pied !

Encore petite demande, où je pense que tu passeras beaucoup moins de temps que moi à le faire 🙂, possible d'ajouter les KMs qui séparent les communes à l'agence ?

MERCI !
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
1
Affichages
668
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…