Recherche d'un mot variable dans une chaîne de caractères
Fermé
PhenlKs
Messages postés
16
Date d'inscription
lundi 25 avril 2016
Statut
Membre
Dernière intervention
6 mars 2018
-
25 avril 2016 à 10:27
PhenlKs Messages postés 16 Date d'inscription lundi 25 avril 2016 Statut Membre Dernière intervention 6 mars 2018 - 26 avril 2016 à 09:52
PhenlKs Messages postés 16 Date d'inscription lundi 25 avril 2016 Statut Membre Dernière intervention 6 mars 2018 - 26 avril 2016 à 09:52
A voir également:
- Recherche d'un mot variable dans une chaîne de caractères
- Recherche automatique des chaînes ne fonctionne pas - Guide
- Caractères ascii - Guide
- Trousseau mot de passe iphone - Guide
- Exemple de mot de passe à 8 caractères - Guide
- Voir mot de passe wifi android - Guide
1 réponse
ThauTheme
Messages postés
1442
Date d'inscription
mardi 21 octobre 2014
Statut
Membre
Dernière intervention
29 juillet 2022
160
25 avril 2016 à 21:40
25 avril 2016 à 21:40
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 :
26 avril 2016 à 09:52
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