Bonjour à tous,
J'ai depuis quelques temps un pb avec vba. Je crée une fonction qui m'affiche la ligne où est écrit azerty par ex. dans ma feuille excel

La fonction est la suivante: Elle s'appelle toto(). Elle affiche d'abord un msgbox en affichant le texte cell1. Cela sert à vérifier que la fonction lit bien le texte que je lui passe en paramètre.

Le code de la fonction est le suivant:

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
Public Function toto(cell1 As String)
Dim ws As Worksheet
Set ws = ThisWorkbook.Sheets("Feuil1")
ws.Select
Cells.Select
 
If (cell1 = "azerty") Then
MsgBox "string ok"
End If
 
Selection.Find(What:=cell1, After:=ActiveCell, LookIn:= _
        xlFormulas, LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:= _
        xlNext, MatchCase:=False, SearchFormat:=False).Activate
        toto = ActiveCell.Row
End Function
Le problème est le suivant:
Si j'écris dans une cellule de Feuil1: =toto(C3) avec le texte azerty dans la cellule C3 ma fonction affiche bien le msgbox "string ok" mais ne me retourne pas la ligne. Il y a #VALEURS! qui est écrit.

Si je lance la fonction par une sub par contre je retrouve bien le numéro de la ligne. La sub est la suivante:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
Public Sub totosub()
MsgBox (toto("azerty"))
End Sub
Je ne comprends absolument pas le bug dans la fonction. Il est situé au niveau de la fonction Find. J'ai pensé que c'était du au fait que la function ne récupère pas azerty, c'est pour cela que j'ai le test sur "azerty" dans toto(). Mais le problème n'est pas du à ça!

Merci de votre aide
Nicolas