fonction recherche valeur proche en vba

taupivin

XLDnaute Junior
Bonjour à tous,

Je cherche à réaliser la fonction : =recherche(valeur_cherchée ; vecteur_recherche ; vecteur_résultat).
Pour mes données cela donne : =RECHERCHE(B4;valeurs!$C$2:$C$32;valeurs!$B$2:$B$32)

J'ai pu reproduire cette formule en vba via :
Code:
Cells(i, j) = WorksheetFunction.Lookup(Rnd(), range1, range2)
mais est-il possible de réaliser cette fonction via des dictionnaires et/ou tableaux ?
J'essaie d'utiliser la fonction qui a été développée par M boisgontier.
Code:
Function RechxM(clé As Range, champRech As Range, ChampResult, messageErreur)

  Application.Volatile
  Set d = CreateObject("Scripting.Dictionary")
  a = champRech.Value
  b = clé.Value
  c = ChampResult.Value
  For i = LBound(a) To UBound(a)
    d(a(i, 1)) = c(i, 1)
  Next i
  Dim temp()
  ReDim temp(LBound(b) To UBound(b), 1 To 1)
  For i = LBound(b) To UBound(b)
    If d(b(i, 1)) <> "" Then temp(i, 1) = d(b(i, 1)) Else temp(i, 1) = messageErreur
  Next i

  RechxM = temp

End Function
sur mes données. (fichier en pièce jointe)

mais je n'arrive pas à adapter le code de façon à ce que la fonction sélectionne la valeur inférieure proche du nombre recherché (comme dans =recherche(valeur_cherchée ; vecteur_recherche ; vecteur_résultat) .

Merci à tous ceux qui s'attarderons sur ce problème.

Bonne journée à tous :)
 

Pièces jointes

  • pb tableaux.xlsm
    27.7 KB · Affichages: 13
Dernière édition:

NyAfy

XLDnaute Nouveau
Bonjour à tous,

Je cherche à réaliser la fonction : =recherche(valeur_cherchée ; vecteur_recherche ; vecteur_résultat).
Pour mes données cela donne : =RECHERCHE(B4;valeurs!$C$2:$C$32;valeurs!$B$2:$B$32)

J'ai pu reproduire cette formule en vba via :
Code:
Cells(i, j) = WorksheetFunction.Lookup(Rnd(), range1, range2)
mais est-il possible de réaliser cette fonction via des dictionnaires et/ou tableaux ?
J'essaie d'utiliser la fonction qui a été développée par M boisgontier.
Code:
Function RechxM(clé As Range, champRech As Range, ChampResult, messageErreur)

  Application.Volatile
  Set d = CreateObject("Scripting.Dictionary")
  a = champRech.Value
  b = clé.Value
  c = ChampResult.Value
  For i = LBound(a) To UBound(a)
    d(a(i, 1)) = c(i, 1)
  Next i
  Dim temp()
  ReDim temp(LBound(b) To UBound(b), 1 To 1)
  For i = LBound(b) To UBound(b)
    If d(b(i, 1)) <> "" Then temp(i, 1) = d(b(i, 1)) Else temp(i, 1) = messageErreur
  Next i

  RechxM = temp

End Function
sur mes données. (fichier en pièce jointe)

mais je n'arrive pas à adapter le code de façon à ce que la fonction sélectionne la valeur inférieure proche du nombre recherché (comme dans =recherche(valeur_cherchée ; vecteur_recherche ; vecteur_résultat) .

Merci à tous ceux qui s'attarderons sur ce problème.

Bonne journée à tous :)
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonjour Taupivin,
En s'écartant un peu de la macro proposée ...
Un essai en PJ avec une syntaxe =Recherche2(Valeur;Plage)
VB:
Function Recherche2(clé, champ As Range)
Dim tablo(), i As Integer, Ecart, Ind As Integer
tablo = champ
Ecart = -9 ^ 9
Ind = 1
For i = 1 To UBound(tablo)
    diff = tablo(i, 2) - clé
    If diff < 0 And diff > Ecart Then
        Ind = i
    End If
Next i
Recherche2 = tablo(Ind, 1)
End Function
 

Pièces jointes

  • pb tableaux.xlsm
    29.1 KB · Affichages: 8

Discussions similaires

Réponses
12
Affichages
242
Réponses
14
Affichages
638

Statistiques des forums

Discussions
312 106
Messages
2 085 351
Membres
102 871
dernier inscrit
Maïmanko