XL 2019 Recherche selon plusieurs critères

Mikael Kauzner

XLDnaute Nouveau
Bonjour la communauté,

J'ai besoin de vous, dans mon cas je fais des relevés topographique et j'ai besoin de comparer des points THEORIQUES (établis en avance) avec les points relevés après sur le terrain que j'appels LEVEES.

Mes points théoriques sont numérotés avec un ID, une valeur en X, Y et Z et je fais mon relevé sur terrain pour comparer l'étude et le réalisé.

Mon problème c'est que je ne peux pas numéroter mes points relevés mais ils ont eux même une valeur en X, Y et Z.

L'idée c'était à la base de faire une recherche du point X au plus proche et ensuite de rechercher la valeur de la deuxième colonne pour avoir le Y et la troisième colonne pour avoir le Z ... Le soucis c'est qu'avec ma fonction j'ai plein de doublons..

Je chercher donc une solution pour recherche au plus proche le X mais en même temps que le Y plus proche (Pas besoin du Z les point sont à minima espacés de 2m...)

Merci pour votre aide, je ne trouve pas de solution ...
 

Pièces jointes

  • TEST II.xlsx
    39.4 KB · Affichages: 18

Mikael Kauzner

XLDnaute Nouveau
Et qu'est ce qui est prioritaite ? le delta X ?
donne un exemple de ce qu'on doit obtenir et comment tu justifie ton choix

Crdlmt
Bonjour,

Techniquement l'exemple est fait mais ne marche pas vu qu'il y a des doublons.
J'ai 108 point théoriques et 83 de levées sur le terrain avec quelques doublons (dont la valeur variera de 0.xx)

Il faudrait une fonction que v chercher la valeur la plus proche des X puis qui aille chercher sur la deuxième colonne pour les Y la valeur la plus proche.

Le Delta c'est pour connaitre la différence entre mon point théorique (plan autocad) et le relevé sur le terrain. Cette différence doit être de quelques centimètre tout au plus 10CM.

Cdlt
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonjour Mikael, Djidji,
Un essai en PJ avec cette macro :
VB:
Option Explicit: Option Base 1
Sub ChercheProche()
    Dim DL%, T, L%, Pointeur%, i%, Xthéo, ErrX
    Application.ScreenUpdating = False
    DL = Sheets("LEVEE").[A65500].End(xlUp).Row
    T = Sheets("LEVEE").Range("B2:D" & DL)      ' Tranfert Levée dans array
    DL = [A65500].End(xlUp).Row
    Range("C3:C" & DL).ClearContents: Range("F3:F" & DL).ClearContents: Range("I3:I" & DL).ClearContents
    For L = 3 To DL
        Pointeur = 0: ErrX = 9 ^ 9: ErrY = 9 ^ 9
        Xthéo = Cells(L, "B"): Ythéo = Cells(L, "E")
        For i = 1 To UBound(T)
            If Abs(T(i, 1) - Xthéo) < ErrX Then
                ErrX = Abs(T(i, 1) - Xthéo)
                Pointeur = i
            End If
        Next i
        If Pointeur <> 0 Then
            Cells(L, "C") = T(Pointeur, 1)  ' Actualisations valeurs
            Cells(L, "F") = T(Pointeur, 2)
            Cells(L, "I") = T(Pointeur, 3)
        End If
    Next L
End Sub
 

Pièces jointes

  • TEST II (1).xlsm
    63.1 KB · Affichages: 4

sylvanu

XLDnaute Barbatruc
Supporter XLD
Re,
En PJ une autre approche, calculer pour chaque point la distance XY Théo vs XY Levée et retenir la distance minimale.
En colonne K cette distance.
Les calculs montrent que cette version donnent des distances inférieures à la première version.
VB:
Option Explicit: Option Base 1
Sub ChercheProche()
    Dim DL%, T, L%, Pointeur%, i%, Xthéo, Erreur, Distance
    Application.ScreenUpdating = False
    DL = Sheets("LEVEE").[A65500].End(xlUp).Row
    T = Sheets("LEVEE").Range("B2:D" & DL)      ' Tranfert Levée dans array
    DL = [A65500].End(xlUp).Row
    Range("C3:C" & DL).ClearContents: Range("F3:F" & DL).ClearContents: Range("I3:I" & DL).ClearContents
    For L = 3 To DL
        Pointeur = 0: Erreur = 9 ^ 9
        Xthéo = Cells(L, "B"): Ythéo = Cells(L, "E")
        For i = 1 To UBound(T)
            Distance = Sqr(Abs(T(i, 1) - Xthéo) ^ 2 + Abs(T(i, 2) - Ythéo) ^ 2)
            If Distance < Erreur Then
                Erreur = Distance
                Pointeur = i
            End If
        Next i
        If Pointeur <> 0 Then
            Cells(L, "C") = T(Pointeur, 1)  ' Actualisations valeurs
            Cells(L, "F") = T(Pointeur, 2)
            Cells(L, "I") = T(Pointeur, 3)
        End If
    Next L
End Sub
 

Pièces jointes

  • TEST II (2).xlsm
    66 KB · Affichages: 6

Mikael Kauzner

XLDnaute Nouveau
Re,
En PJ une autre approche, calculer pour chaque point la distance XY Théo vs XY Levée et retenir la distance minimale.
En colonne K cette distance.
Les calculs montrent que cette version donnent des distances inférieures à la première version.
VB:
Option Explicit: Option Base 1
Sub ChercheProche()
    Dim DL%, T, L%, Pointeur%, i%, Xthéo, Erreur, Distance
    Application.ScreenUpdating = False
    DL = Sheets("LEVEE").[A65500].End(xlUp).Row
    T = Sheets("LEVEE").Range("B2:D" & DL)      ' Tranfert Levée dans array
    DL = [A65500].End(xlUp).Row
    Range("C3:C" & DL).ClearContents: Range("F3:F" & DL).ClearContents: Range("I3:I" & DL).ClearContents
    For L = 3 To DL
        Pointeur = 0: Erreur = 9 ^ 9
        Xthéo = Cells(L, "B"): Ythéo = Cells(L, "E")
        For i = 1 To UBound(T)
            Distance = Sqr(Abs(T(i, 1) - Xthéo) ^ 2 + Abs(T(i, 2) - Ythéo) ^ 2)
            If Distance < Erreur Then
                Erreur = Distance
                Pointeur = i
            End If
        Next i
        If Pointeur <> 0 Then
            Cells(L, "C") = T(Pointeur, 1)  ' Actualisations valeurs
            Cells(L, "F") = T(Pointeur, 2)
            Cells(L, "I") = T(Pointeur, 3)
        End If
    Next L
End Sub
Bonjour,

Merci beaucoup pour votre version, pour avoir un document viable, est il possible de faire de la recherche la plus proche en utilisant une valeur max ? Par exemple si la valeur max de la recherche la plus proche est dans un rayon de 0.25m autour de la valeur du point recherché, il n'y aura donc plus de doublons et si il n'y a pas de correspondance le résultat peut être nul (dans le cas ou il n'y a pas de valeur levé au préalable...

De plus j'ai ce message d'erreur qui s'affiche quand je fais "actualiser", voir capture d'écran.

Encore merci pour votre aide, je suis totalement dans une impasse avec cette problématique.
 

Pièces jointes

  • CaptureII.JPG
    CaptureII.JPG
    77.6 KB · Affichages: 17

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonjour,
Pas sur d'avoir bien compris;
En PJ j'ai rajouté ErreurMax=0.25 et tenu compte des points uniquement si l'errur est < ErreurMax :
VB:
If Distance < Erreur And Distance < ErreurMax Then
L'erreur max admissible est modifiable ici :
Code:
ErreurMax = 0.25                            ' Fixation de l'erreur max admissible
et modifié les formules en K :
Code:
=SI(F3="";"";RACINE((B3-C3)^2+(E3-F3)^2))
 

Pièces jointes

  • TEST II (3).xlsm
    65.5 KB · Affichages: 4

Mikael Kauzner

XLDnaute Nouveau
Bonjour,
Pas sur d'avoir bien compris;
En PJ j'ai rajouté ErreurMax=0.25 et tenu compte des points uniquement si l'errur est < ErreurMax :
VB:
If Distance < Erreur And Distance < ErreurMax Then
L'erreur max admissible est modifiable ici :
Code:
ErreurMax = 0.25                            ' Fixation de l'erreur max admissible
et modifié les formules en K :
Code:
=SI(F3="";"";RACINE((B3-C3)^2+(E3-F3)^2))
Si vous avez compris, j'ai comparé quelques valeurs, mais ça a l'air bon, je vais le tester ce soir ou demain et vous tiendrez au courant :)

Merci
 

chris

XLDnaute Barbatruc
Bonjour à tous

Une proposition PowerQuery (intégré à Excel) : le Delta est à paramétrer (tableau orange) puis clic droit dans le tableau de résultats, Actualiser
 

Pièces jointes

  • Théo_Levées__PQ.xlsx
    63 KB · Affichages: 5

Mikael Kauzner

XLDnaute Nouveau
Bonjour à tous

Une proposition PowerQuery (intégré à Excel) : le Delta est à paramétrer (tableau orange) puis clic droit dans le tableau de résultats, Actualiser
Bonjour Chris,

Merci pour ton tableau, il me semble super bien adapté à mon usage, cependant, est-il possible de supprimer les occurrences ? dans mon exemple (et c'est normal) j'ai deux, voir trois levées de points pour un point théorique. (ex : pt 35254)

Est il possible d'avoir une fonction pour supprimer ou cacher les doublons dans le tableau PowerQuery afin de garder seulement les points correspondants les plus proches ?

Bonne journée :)
 

Pièces jointes

  • RECOLLEMENT pts .xlsx
    52.6 KB · Affichages: 3
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
312 194
Messages
2 086 070
Membres
103 110
dernier inscrit
Privé