Fonction find qui ne cherche pas que le mot en entier

PhenlKs Messages postés 16 Statut Membre -  
PhenlKs Messages postés 16 Statut Membre -
Bonjour,
J'ai actuellement un léger problème, j'ai une fonction Find qui me permet de retrouver un mot dans une chaîne de caractères et la suite de mon code me permet de récupérer les lignes où se trouvent le mot et me les envoie dans un autre classeur. Le problème est le suivant, si je tape le mot cabine (un secteur de panne), il va chercher tous les mots avec un "c" ensuite "ca" et ainsi de suite jusqu'au mot complet. Et il m'envoie TOUT dans l'autre classeur et pas seulement les lignes avec le mot terminé.. Je voudrais donc juste savoir si il existe une manip' pour régler ça où si il faut tout repenser

Le code :

Private Sub Constat_Change()
Dim i As Integer, k As Integer

Application.ScreenUpdating = False

If UCase(Constat.Text) Like "" Then         'si le champ est vide, ne rien afficher
    Exit Sub
End If


i = 7

Dim CelluleCible As Range, C As Range

For k = 2 To 2000                            'mettre la dernière ligne du tableur

    For Each C In Sheets("Hist").Range("I" & k)      'Pour toutes les cellules de la colonne concernée
    
        Set CelluleCible = C.Find(what:=UCase(Constat.Text), LookIn:=xlValues, LookAt:=xlPart)      'trouver le mot voulu dans les cellules
        
        If Not CelluleCible Is Nothing Then         'amener les lignes qui correspondent dans le classeur
            Sheets("Sélection").Range("A" & i & ":" & "N" & i).Value = Sheets("Hist").Range("A" & k & ":" & "N" & k).Value
            i = i + 1
        End If
        
    Next
    
Next
End Sub


Voilà en espérant que vous puissiez m'aider, et merci d'avance pour celui (ou celle) qui pourra m'accorder de son temps

2 réponses

  1. jordane45 Messages postés 30427 Date d'inscription   Statut Modérateur Dernière intervention   4 833
     
    Bonjour,
    Si il cherche au fur et à mesure que tu écris .... c'est que tu lances la macro Constat_Change() lors d'un keyup ou keypress sur ton champ : Constat ....
    Hors.. tu devrais ne la lancer que si tu cliques sur un bouton par exemple (et non au fur et à mesure).

    Après... si tu ne veux trouver que des mots "exacts" et non "partiels" .. tu dois modifier le
    LookAt:=xlPart
    


    par :
    LookAt:=xlWhole
    


    Cordialement, 
    Jordane                                                                 
    0
    1. PhenlKs Messages postés 16 Statut Membre
       
      Pour le LookAt, je ne peux pas changer car j'ai des cellules où il peut y voir "cabine + fuite moteur"

      Je ne vois pas comment faire cette histoire de bouton, je dois lui dire de ne lancer le find que quand j'appuie su le bouton valider de mon userform ?

      PS : oui le tout est dans un userform où il y a 2 textbox et une combo_list ainsi qu'un bouton valider. Sachant que je dois pouvoir utiliser les 3 critères en même temps (mais ça c'est ok)
      0
    2. PhenlKs Messages postés 16 Statut Membre
       
      En fait je ne vois pas où mettre mon bouton (c'est un bête unload), il faut que je l'appelle à la fin de ma textbox ? juste avant le exit ?
      0
    3. jordane45 Messages postés 30427 Date d'inscription   Statut Modérateur Dernière intervention   4 833
       
      A quel moment fais tu appel à la macro ?
      Montre nous le code utilisé pour la lancer...
      0
    4. PhenlKs Messages postés 16 Statut Membre
       
      en fait j'ai juste un bouton qui lance mon userform:

      sur la page :

      Private Sub Bouton_selection_Click()
      UserForm1.Show
      End Sub
      
      Private Sub Vider_Click()
      Range("A7:Z6000").Select
      Selection.ClearContents
      End Sub


      et dans l'userform:

      Private Sub Tracteurs_Change()
      Dim a As Integer
      
          With Tracteurs                  'Liste des tracteurs
              .AddItem "33901200003"
              .AddItem "3390996207"
              .AddItem "3390016286"
              .AddItem "3390036817"
              .AddItem "33900606840"
              .AddItem "33900706853"
          End With
      
      Call Constat_Change
      Call Secteur_Change
          
      For a = 7 To 2000                   'vide les lignes qui ne correspondent pas au tracteur sélectionné
      
          If Not Tracteurs.Value Like Sheets("Sélection").Range("E" & a).Value Then
              Sheets("Sélection").Range("A" & a).Select
              Selection.EntireRow.ClearContents
          End If
      
      Next
      Range("A7:A2000").SpecialCells(xlCellTypeBlanks).EntireRow.Delete
      End Sub
      
      Private Sub Valider_Click()
      Unload UserForm1
      End Sub
      
      
      Private Sub Constat_Change()
      Dim i As Integer, k As Integer
      
      Application.ScreenUpdating = False
      
      If UCase(Secteur.Text) Like "" Then             'si le champ est vide, ne rien afficher
          Exit Sub
      End If
      
      i = 7
      For k = 2 To 2000                            'mettre la dernière ligne du tableur
      
          If Sheets("Hist").Range("I" & k).Value Like "*" & UCase(Constat) & "*" Then
              Sheets("Sélection").Range("A" & i & ":" & "N" & i).Value = Sheets("Hist").Range("A" & k & ":" & "N" & k).Value
              i = i + 1
          End If
          
      Next
      End Sub
      
      Private Sub Secteur_Change()
      Dim i As Integer, k As Integer
      
      Application.ScreenUpdating = False
      
      If UCase(Secteur.Text) Like "" Then             'si le champ est vide, ne rien afficher
          Exit Sub
      End If
      
      i = 7
      For k = 2 To 2000                            'mettre la dernière ligne du tableur
      
          If Sheets("Hist").Range("I" & k).Value Like "*" & UCase(Secteur) & "*" Then
              Sheets("Sélection").Range("A" & i & ":" & "N" & i).Value = Sheets("Hist").Range("A" & k & ":" & "N" & k).Value
              i = i + 1
          End If
          
      Next
      End Sub
      


      sachant que ce n'est pas la même chose que dans le premier message vu que je test un peu de tout au fur et à mesure.
      0
  2. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
     
    Bonjour
    par exemple, essai sur un classeur vierge
    B2 ="bb ca gggg"
    Sub demo_like()
    If Range("B2") Like "*" & "cabine" & "*" Then MsgBox "gagné"
    End Sub

    attention sensible à la casse : mettre donnée en Ucase ou Lcase
    0