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:
Le problème 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
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:
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!
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 Public Sub totosub() MsgBox (toto("azerty")) End Sub
Merci de votre aide
Nicolas
Partager