IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

bug avec Find dans une function


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai
    Inscrit en
    Décembre 2009
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Décembre 2009
    Messages : 13
    Points : 11
    Points
    11
    Par défaut bug avec Find dans une function
    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

  2. #2
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    Bonjour,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Public Function toto(ByVal cell1 As String) As Long
    Dim ws As Worksheet
    Dim c As Range
     
    If cell1 <> "" Then
        Set ws = ThisWorkbook.Sheets("Feuil1")
        Set c = ws.Cells.Find(What:=cell1, LookIn:=xlValues, LookAt:=xlWhole)
        If Not c Is Nothing Then toto = c.Row
        Set ws = Nothing
        Set c = Nothing
    End If
    End Function
    Cordialement.
    J'utilise toujours le point comme séparateur décimal dans mes tests.

  3. #3
    Membre à l'essai
    Inscrit en
    Décembre 2009
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Décembre 2009
    Messages : 13
    Points : 11
    Points
    11
    Par défaut
    merci bcp mercatog!
    Sais tu à quoi étais du mon bug? j'ai du mal à comprendre ce que change fondamentalement ta formulation.
    @+

  4. #4
    Membre émérite
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    2 130
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2 130
    Points : 2 443
    Points
    2 443
    Par défaut
    Salut paiva44 et Bonne et heureuse année à tous.
    Pas beaucoup d'infos dessus, mais le problème vient probablement de l'utilisation de Function ou Snb pour lancer du code : Function n'autorise pas les actions (comme select, activate), alors que la même fonction en sub permet de le faire. Je pense que c'est lié à la manière de lancer le code.
    A+

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [XL-2000] Utilisation de find dans une "function"
    Par bratak67 dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 26/05/2015, 19h20
  2. [VStudio 6] pb avec fonctions dans une DLL
    Par MogDeChNord dans le forum MFC
    Réponses: 8
    Dernier message: 08/01/2004, 08h57
  3. tbitmap.free dans une function
    Par portu dans le forum Langage
    Réponses: 7
    Dernier message: 19/06/2003, 22h08
  4. [VB6] Multiselection avec CTRL dans une msflexgrid
    Par Troopers dans le forum VB 6 et antérieur
    Réponses: 6
    Dernier message: 17/04/2003, 10h57
  5. PB avec "self" dans une dll
    Par DiJiRiDouS dans le forum Langage
    Réponses: 2
    Dernier message: 21/02/2003, 09h32

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo