Petit soucis avec Find

Résolu
Bonjour le forum
je voudrais rechercher que les deux premiers caractères d'un nombre de 5 chiffres figurant dans une colonne et n' y parviens pas en utilisant la formule ci-après
If .Find(What:=comptema, LookIn:=xlValues) .. dans la procédure suivante

Dim comptema As Variant
Dim derlig As Integer
comptema = TextBox1.Value
comptema = Left(comptema, 2)

With Feuil7
derlig = .Range("D" & Rows.Count).End(xlUp).Row
With Range("D6:D" & derlig)
'If .Find(comptema, LookIn:=xlValues) Is Nothing Then
If .Find(What:=comptema, LookIn:=xlValues) Is Nothing Then
MsgBox "Sélectionner un compte", vbExclamation + vbDefaultButton2, "erreur"
TextBox1 = ""
cancel = True
Exit Sub
End If
End With

ActiveSheet.Range("$D$5:$D$" & derlig).AutoFilter Field:=1, Criteria1:=comptema

End With

qu'est ce qui ne va pas ?

merci

7 réponses

  1. Bonjour,

    utilise un masque de ce genre :
    comptema = "45*" si par exemple 45 sont les 2 premiers chiffres à rechercher.
    0
    1. Contributeur
      Bonjour

      Sur ton code, tu testes uniquement l'absence de comptema ?

      un essai
      Option Explicit
      '-----------------------------
      Sub vvv()
      Dim Comptema As String ' comptema est donné par un textbox et est donc du texte

      Comptema = Left(TextBox1.Value, 2)

      With Sheets("Feuil7")
      On Error GoTo erreur
      .Columns("D").Find(What:=Comptema, After:=Range("D5")).Select 'pour demo: on va sur la cellule trouvée contenant au moins comptema (valable si par ex "rrgggg" ou "hhhrrggg")
      End With
      'code éventuel.......
      Exit Sub
      erreur:
      MsgBox "Sélectionner un compte", vbExclamation + vbDefaultButton2, "erreur"
      'TextBox1 = ""
      'cancel = True
      End Sub


       Michel
      0
      1. Contributeur
        PS 17:16h

        si tu ne veus que les 2 lettres de comptema et seulement ces 2 lettre ajoute à find

        Find(What:=Comptema, After:=Range("D5"), XlLookAt := xlWhole ).
        0
      2. @michel_mmichel j'ai comme réponse argument introuvable
        0
    2. bonjour thev et michel
      désolé thev mais ta proposition ne fonctionne pas

      michel je teste la tienne
      0
      1. Michel
        oui je teste uniquement l'absence de comptema
        mais comment puis je avec ta solution filtrer sur toute la colonne les deux premiers caractères du nombre
        0
        1. Contributeur
          bonjour

          SI tu veux simplement tester l'absence de comptema, tu as plus simple que la fonction Find (pas la peine de se prendre la tête !) ;-)

          en résumant (comptema en 2 lettrrs)

          si les 2 lettres seulement et pas d'autres lettres ou chiffres
          If application.countif(Range("D6:D" & derlig),comptema)=0 then
          Msgbox.....
          si les 2 lettres incluses avec d'autres lettes ou chiffres
          If application.countif(Range("D6:D" & derlig),"*" & comptema & "*")=0 then
          Msgbox.....

           Michel
          0
          1. Bonjour Michel

            Tu as parfaitement raison Michel pourquoi faire compliqué quand on peut faire simple

            j'ai appliqué l'une ou l'autre de tes formules mais j'obtiens le message d'erreur methode range de l'objet global a échoué"
            j'ai certainement oublié quelque chose quelque part

            comptema = Left(TextBox1.Value, 2)
            Sheets("compte").Activate
            ' With Feuil7
            With Sheets("compte")
            derlig = Range("D" & Rows.Count).End(xlUp).Row

            With Range("D5:D" & derlig)

            If Application.CountIf(Range("D6:D") & derlig, "*" & comptema & "*") = 0 Then
            MsgBox "Sélectionner une activité réalisée", vbExclamation + vbDefaultButton2, "Activité non réalisée"
            TextBox1 = ""
            cancel = True
            Exit Sub
            End If

            End With

            ActiveSheet.Range("$D$5:$D$" & derlig).AutoFilter Field:=1, Criteria1:="=" & comptema & "*", _
            Operator:=xlAnd

            End With
            0
            1. Contributeur
              Quand tu es dans un bloc With -End with, les objets à l'intérieur du bloc doivent ^tre
              précédés d'un point

              + parenthèse mal placée

              >.Range("D" & Rows.Count).End(xlUp).Row

              With .Range("D5:D" & derlig)

              If Application.CountIf(.Range("D6:D" & derlig, "*" & comptema & "*") = 0 Then
              ...

              0
          2. Parfait Michel
            ai juste ajouter une ) après derlig

            If Application.CountIf(.Range("D6:D" & derlig, "*" & comptema & "*") = 0 Then
            ...

            merci beaucoup pour ta patience
            0