fonction recherche valeur proche en vba

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 !

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

Dernière édition:
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 🙂
 
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

- 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
12
Affichages
505
  • Question Question
Microsoft 365 VBA sur outlook
Réponses
14
Affichages
997
Retour