VBA utiliser TextBox.Value ds un Cells.Find

Antoine -  
michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   -
Bonjour à tous !

Je cherche à utiliser une valeur entrée dans le TextBox d'un Userform pour faire une recherche dans la feuille.
En gros ça devrait donner ça mais ça ne fonctionne pas ! :

Cells.Find(What:=TextBox2.Value, After:=ActiveCell, LookIn:=xlFormulas, _
LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
MatchCase:=False, SearchFormat:=False)

Par ailleurs je cherche à utiliser aussi la valeur d'un TextBox dans un Cells(i,j).FormulaLocal,

par exemple :

Cells(DateRow, 1).FormulaLocal = "=SOMME(""A"" & TextBox1.Value:""A99"")

mais je ne sais pas comment le coder exactement !

Merci beaucoup pour votre aide

3 réponses

  1. chossette9 Messages postés 6855 Date d'inscription   Statut Contributeur Dernière intervention   1 313
     
    Bonjour,

    pour pouvoir chercher dans la feuille une cellule contenant la valeur de ta TextBox, il faut rajouter ".Activate à la fin de la recherche :

    Cells.Find(What:=TextBox2.Value, After:=ActiveCell, LookIn:=xlFormulas, _
    LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
    MatchCase:=False, SearchFormat:=False).Activate


    En ce qui concerne la somme, vu que le VBA est un langage anglais, peut être que tu devrais mettre "=SUM(...)"

    Cordialement.
    0
    1. chossette9 Messages postés 6855 Date d'inscription   Statut Contributeur Dernière intervention   1 313
       
      Oups, autant pour moi, je suis allé trop vite, le formulalocal permet de mettre =SOMME.
      L'erreur vient donc d'autre part.
      Cordialement.
      0
    2. Antoine
       
      Merci pour ta réponse, en fait je n'ai pas été assez complet dans ma question parce que j'utilise cette recherche dans la feuille pour mettre en mémoire un numéro de ligne, donc j'ai fait :


      MaLigne = Cells.Find(What:=TextBox2.Value, After:=ActiveCell, LookIn:=xlFormulas, _
      LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
      MatchCase:=False, SearchFormat:=False).Activate.Row



      Mais ça ne fonctionne pas !
      0
    3. chossette9 Messages postés 6855 Date d'inscription   Statut Contributeur Dernière intervention   1 313
       
      Bonjour,

      tu ne peux pas le faire en une seule fois !

      Tu dois d'abord faire ta recherche :
      Cells.Find(...).Activate

      et à la ligne d'en dessous, récupérer le numéro de ligne :
      MaLigne=ActiveCell.Row
      0
    4. Antoine
       
      Thx ! J'ai fait ça mais j'ai cette erreure qui apparait sur la ligne du Cells.Find :

      "Erreur d'exécution '424'
      Objet requis "
      0
  2. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
     
    bonjour,

    ton code marche si ton bout de macro est dans l'userform
    par exemple ci dessous, la recherche est lancée par appui sur un bouton de l'userform
    (je n'ai pas tenu compte de xlpart, excuse moi)

    Private Sub CommandButton1_Click() 
    'test = TextBox1 
    On Error Resume Next 
    laligne = Cells.Find(TextBox1, , xlValues).Row 
    If Err.Number > 0 Then 
    MsgBox "valeur inconnue" 
    Else 
    MsgBox "ligne: " & laligne 
    End If 
    End Sub


    regarde cette petite démo:
    https://www.cjoint.com/?ehlVkJW6eu

    edit:
    avec xlpart
    laligne = Cells.Find(TextBox1, , xlValues, xlpart).Row
    :-x
    0
  3. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
     
    concernant le pb sur la somme, tuu pourrais laisser VBA faire le calcul puisque c'est ton code qui détermine la plage (attention texbox dans le code du formulaire)

    Cells(DateRow, 1)=application.sum(range("A" & TextBox1.Value & ":A99") 
    0