VBA utiliser TextBox.Value ds un Cells.Find

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. Contributeur
    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. Contributeur
      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. 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. Contributeur
      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. 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. Contributeur
    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
    1. Contributeur
      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