Bonjour à tout le monde,

J'ai un problème avec une fonction que j'utilise comme formule dans une feuille de calcul. J'ai fait une recherche sur le forum mais je ne trouve pas de sujet relatif à mon problème.

J'ai une feuille "Data" avec 3 colonnes.
La première colonne est code1, les cellules de cette colonne contiennent un caractère: A, B, C, D, ...
La deuxième colonne est code2, les cellules de cette colonne contiennent un caractère: a, b, c, d, ...
La troisième colonne est valeur, il s'agit d'une valeur numérique.

Les combinaisons code1 + code2 sont uniques.

Sur une autre feuille, j'introduis dans une cellule la valeur "A" pour code1 et dans une autre cellule "c" pour code2, j'aimerai que ma fonction me retourne la valeur qui correspond à la combinaison A c qui est définie dans la feuille "data".

Ci-dessous, mon code:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
Function Rchval(Texte1, Texte2)
 
Dim CelluleTrv As Range         'Cellule trouvé lors de la recherche
Dim FirstAddress As String      'Adresse de la première cellule trouvée
Dim Plage As Range
 
Set Plage = Worksheets("Data").Columns(1)
Set CelluleTrv = Plage.Find(Texte1)
 
If Not CelluleTrv Is Nothing Then
    FirstAddress = CelluleTrv.Address 'Initialisation de l'adresse de la première cellule trouvée
    Do 'Boucle pour analyser les autres résultats trouvés
        If Worksheets("Data").Cells(CelluleTrv.Row, 2).Value = Texte2 Then
            Valeur = Worksheets("Data").Cells(CelluleTrv.Row, 3).Value 'Valeur de la cellule trouvée
        End If
 
        Set CelluleTrv = Plage.FindNext(CelluleTrv) 'Recherche les autres résultats
    Loop While CelluleTrv.Address <> FirstAddress 'Continue la boucle tant que l'adresse est différent de la première adresse trouvée
End If
 
Rchval = Valeur
 
End Function
Si j'utilise, par exemple, la formule =RCHVAL(A1;B1) dans n'importe quelle cellule, j'ai le message d'erreur #valeur!
Si j'utilise la fonction dans une procédure sub, j'obtiens le bon résultat.

Pour info, la fonction est bien définie dans un module et non pas dans le code d'une feuille de calcul ou dans ThisWorkbook.

J'ai essayé de Debugger, j'ai mis des points d'arrêt dans le code.
Il semble que ça coince au niveau du Set CelluleTrv = Plage.FindNext(CelluleTrv) , CelluleTrv devient Nothing , alors qu'une même valeur est présente plusieurs fois dans la colonne1.

Je ne comprends pas ce qui se passe. Je commets peut-être une grossière erreur! Bref, je suis coincé et je sollicite votre assistance.

Merci d'avance pour vos réponses.