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)
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.
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)
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.
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