Fonction find qui ne cherche pas que le mot en entier

PhenlKs Messages postés 16 Date d'inscription   Statut Membre Dernière intervention   -  
PhenlKs Messages postés 16 Date d'inscription   Statut Membre Dernière intervention   -
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

A voir également:

2 réponses

jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention   4 752
 
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
PhenlKs Messages postés 16 Date d'inscription   Statut Membre Dernière intervention  
 
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
PhenlKs Messages postés 16 Date d'inscription   Statut Membre Dernière intervention  
 
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
jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention   4 752
 
A quel moment fais tu appel à la macro ?
Montre nous le code utilisé pour la lancer...
0
PhenlKs Messages postés 16 Date d'inscription   Statut Membre Dernière intervention  
 
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
michel_m Messages postés 16602 Date d'inscription   Statut Contributeur Dernière intervention   3 314
 
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