Fonction permettant de calculer le point le plus proche

taupinambour

XLDnaute Nouveau
Bonjour,

Pardonnez mon ignorance, mais est-il possible de créer une fonction à deux arguments (tableau1 une liste de points n*3, tableau 2 un vecteur1 1*3 à sélectionner de la même manière que les fonctions de base d'excel).

Le but ici serait de calculer la distance entre le vecteur1 et tous les points du tableau1 et d'en déterminer le point le plus proche du vecteur1.

Je dois faire cette manipulation sur un grand nombre de points dans des fichiers différents, une fonction de ce type me serait d'une grande utilité.


Dans l'idée j'avais pensé à:

Function ptleplusproche(vecteur1, tableau1)

i as integer
ptleplusproche(1,3) as double
n as integer

n = nombredeligne(tableau1) 'nombre de points

for i= 1 to n 'boucle for afin de calculer toutes les distances

dist(i,1) = sqr( (vecteur1(1,1)-tableau(i,1))^2+(vecteur1(1,2)-tableau(i,2))^2+(vecteur1(1,3)-tableau(i,3))^2)


endfor

minimum=min(dist) 'calcul du minimum

numeroligne=equiv(minimum,dist(),0) 'récupération du numéro de ligne du point le plus proche

ptleplusproche(1,1)= tableau1(numeroligne,1)
ptleplusproche(1,2)= tableau1(numeroligne,2)
ptleplusproche(1,3)= tableau1(numeroligne,3)

endFunction


Evidemment, je suis conscient que toute la syntaxe est fausse, le code ci-dessus n'est écrit que dans le but d'éclaircir le problème (je l'espère). Là où j'ai du mal (malgrès mes recherches), c'est dans la déclaration des tableaux et l'utilisation de leurs valeurs.

D'avance merci.
 

Modeste

XLDnaute Barbatruc
Re : Fonction permettant de calculer le point le plus proche

Bonjour taupinambour,

Je ne peux faire que deux choses pour toi:
  • te souhaiter cordialement la bienvenue :)
  • te suggérer de joindre un petit fichier Excel avec un exemple de la manière dont seraient structurées tes données, avec -si possible- un ou deux exemples des résultats attendus. Ceci permettra aux uns de tester leur proposition de fonction personnalisée et aux autres (dont moi!) de comprendre de quoi il retourne :rolleyes: ... calculer le point le plus court, ça je comprends, mais pourquoi 3 éléments?
 

Dranreb

XLDnaute Barbatruc
Re : Fonction permettant de calculer le point le plus proche

Bonjour.

Ça devrait pouvoir s'écrire comme ça :
VB:
Function PtLePlusProche(ByVal Vecteur1, ByVal Tableau1) As Variant()
Dim X As Double, Y As Double, Z As Double, LProch As Long, _
   CarDistProch As Double, L As Long, CarDist As Double, Résu()
If TypeName(Vecteur1) = "Range" Then Vecteur1 = Vecteur1.Value
If TypeName(Tableau1) = "Range" Then Tableau1 = Tableau1.Value
X = Vecteur1(1, 1): Y = Vecteur1(1, 2): Z = Vecteur1(1, 3)
LProch = 1
CarDistProch = (Tableau1(1, 1) - X) ^ 2 + (Tableau1(1, 2) - Y) ^ 2 + (Tableau1(1, 3) - Z) ^ 2
For L = 2 To UBound(Tableau1)
   CarDist = (Tableau1(L, 1) - X) ^ 2 + (Tableau1(L, 2) - Y) ^ 2 + (Tableau1(L, 3) - Z) ^ 2
   If CarDist < CarDistProch Then LProch = L: CarDistProch = CarDist
   Next L
ReDim Résu(1 To 1, 1 To 3)
Résu(1, 1) = Tableau1(LProch, 1)
Résu(1, 2) = Tableau1(LProch, 2)
Résu(1, 3) = Tableau1(LProch, 3)
PtLePlusProche = Résu
End Function
 

taupinambour

XLDnaute Nouveau
Re : Fonction permettant de calculer le point le plus proche

Ca fonctionne parfaitement. En comprenant ce code je pense pouvoir faire beaucoup d'autres choses en adaptant.

Merci beaucoup Dranreb.

@Modeste : Les 3 éléments sont simplement le X, Y, Z.

NB: Pour ceux qui auraient besoin de ce code, je précise qu'il faut valider la formule en sélectionnant 3 cases (horizontalement) et en validant par ctrl+maj+entrée.
 

Discussions similaires

Statistiques des forums

Discussions
312 429
Messages
2 088 354
Membres
103 824
dernier inscrit
frederic.marien@proximus.