Fonction find qui ne cherche pas que le mot en entier

Fermé
PhenlKs Messages postés 16 Date d'inscription lundi 25 avril 2016 Statut Membre Dernière intervention 6 mars 2018 - Modifié par PhenlKs le 28/04/2016 à 16:32
PhenlKs Messages postés 16 Date d'inscription lundi 25 avril 2016 Statut Membre Dernière intervention 6 mars 2018 - 29 avril 2016 à 11:08
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

jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 4 650
Modifié par jordane45 le 28/04/2016 à 16:20
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 lundi 25 avril 2016 Statut Membre Dernière intervention 6 mars 2018
28 avril 2016 à 22:35
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 lundi 25 avril 2016 Statut Membre Dernière intervention 6 mars 2018
29 avril 2016 à 09:32
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 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 4 650
29 avril 2016 à 10:06
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 lundi 25 avril 2016 Statut Membre Dernière intervention 6 mars 2018
29 avril 2016 à 11:08
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 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
29 avril 2016 à 08:21
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