Recherche d'un mot variable dans une chaîne de caractères
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 -
PhenlKs Messages postés 16 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
Je cherche depuis quelques jours, sans résultats, le moyen pour trouver un mot dans une chaîne de caractère. Le mot en question est saisi par un utilisateur via une TextBox et je voudrais qu'une fois le mot entré, toutes les lignes du classeur situé dans un autre onglet contenant ce mot s'affiche en dessous de la TextBox.
Par exemple, dans la colonne I, j'ai recensé différents types de panne sur un équipement dont les Feux. Hors si je tape ce mot il ne me sortira pas les lignes où est écris "Feu latéral" ou "Voyant température +Feu gabarit"...
Pour l'instant j'ai ça mais ça me donne que les lignes ne contenant que le mot seul :
J'espère que mon problème est clairement visible et que vous pourrez m'aider à trouver une solution.
Cordialement,
PhenlKs
Je cherche depuis quelques jours, sans résultats, le moyen pour trouver un mot dans une chaîne de caractère. Le mot en question est saisi par un utilisateur via une TextBox et je voudrais qu'une fois le mot entré, toutes les lignes du classeur situé dans un autre onglet contenant ce mot s'affiche en dessous de la TextBox.
Par exemple, dans la colonne I, j'ai recensé différents types de panne sur un équipement dont les Feux. Hors si je tape ce mot il ne me sortira pas les lignes où est écris "Feu latéral" ou "Voyant température +Feu gabarit"...
Pour l'instant j'ai ça mais ça me donne que les lignes ne contenant que le mot seul :
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 = 6 'commencer à la ligne 6 pour garder de la place
For k = 2 To 1142 'mettre la dernière ligne du tableur
If UCase(Constat.Text) Like Sheets("Extract").Range("I" & k).Value Then 'rechercher un mot dans les constats
Sheets("Sélection").Range("A" & i & ":" & "N" & i).Value = Sheets("Extract").Range("A" & k & ":" & "N" & k).Value
i = i + 1
End If
Next
End Sub
J'espère que mon problème est clairement visible et que vous pourrez m'aider à trouver une solution.
Cordialement,
PhenlKs
A voir également:
- Recherche d'un mot variable dans une chaîne de caractères
- Recherche automatique des chaînes ne fonctionne pas - Guide
- Trousseau mot de passe iphone - Guide
- Mot de passe - Guide
- Mot de passe administrateur - Guide
- Exemple de mot de passe à 8 caractères - Guide
1 réponse
Bonsoir Pheniks, bonsoir le forum,
Comme tu n'as pas joint un fichier exemple j'ai créé en me basant sur ton code mais il te faudra certainement adapter à ton fichier.
Dans l'onglet Sélection, clique sur le bouton Extraire. Dans l'Userform, édite le texte recherché. Au fur et à mesure de l'édition, la ListBox1 affiche la liste des éléments correspondants, trouvés dans la colonne I de l'onglet Extract. Si la ListBox1 est vide c'est qu'il n'y a aucun élément correspondant.
Si la ListBox1 n'est pas vide, tu peux :
• soit Extraire la liste à partir de la ligne 6 de l'onglet Sélection avec le bouton Extraire de l'UserForm
• soit sélectionner la ligne dans l'onglet Extract en cliquant sur l'élément dans la ListBox1.
Tu peux faire des tests avec les mots avant, arrière et feu
La première colonne affiche le numéro de ligne de l'élément dans l'onglet Extract.
Le Code de l'UserForm :
Le code du bouton Extraire de l'onglet Sélection :
Le Fichier :
https://www.cjoint.com/c/FDztJ22yjER
Le fichier :
Comme tu n'as pas joint un fichier exemple j'ai créé en me basant sur ton code mais il te faudra certainement adapter à ton fichier.
Dans l'onglet Sélection, clique sur le bouton Extraire. Dans l'Userform, édite le texte recherché. Au fur et à mesure de l'édition, la ListBox1 affiche la liste des éléments correspondants, trouvés dans la colonne I de l'onglet Extract. Si la ListBox1 est vide c'est qu'il n'y a aucun élément correspondant.
Si la ListBox1 n'est pas vide, tu peux :
• soit Extraire la liste à partir de la ligne 6 de l'onglet Sélection avec le bouton Extraire de l'UserForm
• soit sélectionner la ligne dans l'onglet Extract en cliquant sur l'élément dans la ListBox1.
Tu peux faire des tests avec les mots avant, arrière et feu
La première colonne affiche le numéro de ligne de l'élément dans l'onglet Extract.
Le Code de l'UserForm :
Private S As Worksheet 'déclare la variable S (onglet Sélection) Private E As Worksheet 'déclare la variable E (onglet Extract) Private TV As Variant 'déclare la variable TV (Tableau des valeurs) Private NL As Long 'déclare la variable NL (Nombre de Lignes) Private NC As Integer 'déclare la variable NC (Nombre de Colonnes) Private TL() As Variant 'déclare la variable TL (Tableau des Lignes) Private Sub UserForm_Initialize() 'à l'initialisation de l'Userorm Set S = Sheets("Sélection") 'définit l'onglet S Set E = Sheets("Extract") 'définit l'onglet E TV = E.Range("A2:N1142") 'définit le tableau des valeurs TV NL = UBound(TV, 1) 'définit le nombre de lignes NL du tableau des valeurs TV NC = UBound(TV, 2) 'définit le nombre de colonnes NC du tableau des valeurs TV Me.ListBox1.ColumnCount = NC + 1 'définit le nombre de colonnes de la ListBox1 (une de plus que TV) End Sub Private Sub Constat_Change() 'au changement dans [Constat] Dim I As Long 'déclare la variable I (Incrément) Dim J As Integer 'déclare la variable J (incrément) Dim K As Long 'déclare la variable K (incrément) Me.ListBox1.Clear 'vide la ListBox1 'si la textbox [Constat] est effacée efface la Label2, sort de la procédure If Me.Constat.Value = "" Then Exit Sub K = 1 'initialise la variable K For I = 1 To NL 'boucle 1 : sur toutes les lignes I du tableau des valeurs TV 'condition : si le texte tapé dans [Constat] est contenu dans la donnée ligne I colonne 9 (=> colonne J) de TV If InStr(1, TV(I, 9), Me.Constat, vbTextCompare) <> 0 Then ReDim Preserve TL(1 To NC + 1, 1 To K) 'redimensionne le tableau des lignes TL TL(1, K) = I + 1 'récupère dans la première ligne de TL le numéro de ligne correspondant For J = 1 To NC 'boucle 2 : sur toutes les colonnes du tableau des valeurs TV TL(J + 1, K) = TV(I, J) 'récupère dans : ligne J+1 colonne K de TL, la valeur de la données ligne I colonne J de TV (Transposition) Next J 'prochaine colonne de la boucle 2 K = K + 1 'incrémente K (rajoute une colonne au tableau des lignes TL) End If 'fin de la condition Next I 'prochaine ligne de la boucle 1 If K > 1 Then 'si K est supérieure à 1 (au moins une occurrence trouvée) If K = 2 Then ReDim Preserve TL(1 To NC + 1, 1 To 2) 'si une seule occurrence trouvée, redimensionne TL pour un affichage en ligne Me.ListBox1.List = Application.Transpose(TL) 'alimente la ListBox1 avec le trableau TL transposé 'renseigne le mnombre de lignes dans la Label 2 End If End Sub Private Sub ListBox1_Click() 'au clic dans la ListBox1 E.Select 'délectionne l'onglet E With ListBox1 'prend en compte la ListBox1 'récupère le numéro de ligne de l'élément sélectionné E.Rows(CLng(.Column(0, .ListIndex))).Select 'sélectionne la ligne de l'élément sélectionné End With 'fin de la prise en compte de la ListBox1 Unload Me 'vide et ferme l'UserFormn1 End Sub Private Sub CommandButton1_Click() 'bouton "Extraire" 'renvoie dans la celluel A6 (redimensionné) de l'onglet S le tableau TL transposé S.Range("A6").Resize(UBound(TL, 2), UBound(TL, 1)).Value = Application.Transpose(TL) Unload Me 'vide et ferme l'UserFormn1 End Sub Private Sub CommandButton2_Click() Unload Me 'vide et ferme l'UserFormn1 End Sub
Le code du bouton Extraire de l'onglet Sélection :
Private Sub CommandButton1_Click() Dim PL As Range 'déclare la variable PL Set PL = Range("A5").CurrentRegion 'définit la plage PL If Range("A6") <> "" Then Set PL = PL.Offset(1, 0).Resize(PL.Rows.Count - 1, PL.Columns.Count) 'redéfinit la plage PL (sans la première ligne PL.ClearContents 'efface d'éventuelles anciennes données End If ActiveCell.Select 'enlève le focus au bouton UserForm1.Show 'affiche l'UserForm1 End Sub
Le Fichier :
https://www.cjoint.com/c/FDztJ22yjER
Le fichier :
Par contre j'ai un autre classeur où là je n'ai qu'un critère de recherche et où je vais donc essayer d'utiliser ton code (qui est quand même bien plus présentable et peaufiné).
Et encore merci pour le temps que tu y as passé.
See u
PhenlKs