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 -
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 :
Voilà en espérant que vous puissiez m'aider, et merci d'avance pour celui (ou celle) qui pourra m'accorder de son temps
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:
- Fonction find qui ne cherche pas que le mot en entier
- Fonction si et - Guide
- Trousseau mot de passe iphone - Guide
- Mot de passe - Guide
- Comment trouver le mot de passe wifi sur son téléphone - Guide
- Mot de passe administrateur - Guide
2 réponses
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
par :
Cordialement,
Jordane
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
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)
Montre nous le code utilisé pour la lancer...
sur la page :
Private Sub Bouton_selection_Click() UserForm1.Show End Sub Private Sub Vider_Click() Range("A7:Z6000").Select Selection.ClearContents End Subet 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 Subsachant 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.