Utilisation TextBox ListBox VBA

Fermé
AbouD - 20 juil. 2017 à 14:24
yg_be Messages postés 22720 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 23 avril 2024 - 21 juil. 2017 à 10:32
Bonjour,

Bonjour,

J'ai adapté un programme selon mes besoins. Par contre ce que j'ai fait n'est pas forcément l'idéal 8O et je souhaite rendre mon programme efficace. Je m'explique, j'ai une base de données que je remplie au fur et à mesure et ce que je veux c'est faire une recherche avec une textbox et afficher le résultat de la recherche dans une listbox. J'y arrive lorsque les box sont dans la même feuille. Par contre je veux effectuer cette recherche dans une feuille différente. J'ai essayé différentes solutions sans succès :aie: quelqu'un pourrait-il m'aider ? je mets le programme en dessous :

Private O As Worksheet 'déclare la variable O (Onglet)
Private TC As Variant 'déclare la variable TC (Tableau de Cellules)
Private NL As Integer 'déclare la variable NL (Nombre de Lignes)
Private NC As Byte 'déclare la variable NC (Nombre de colonnes)

Private Sub Recherche_Initialize() 'à l'initialisation de l'UserForm
Set O = Sheets("Remplissage") 'définit l'onglet O
TC = O.Range("A2").CurrentRegion 'définit le tableau de cellules TC
NL = UBound(TC, 1) 'définit le nombre de lignes de TC
NC = UBound(TC, 2) 'définit le nombre de colonnes de TC
Me.ListBox1.ColumnCount = NC + 1 'définit le nombre de colonnes de la ListBox1 (à adapter, dans cet exemple je recherche dans la ligne entière. +1 pour le numéro de ligne)
Me.ListBox1.ColumnWidths = "0 pt;" 'masque la première colonne de la ListBox1 (celle ou sera stocké le numéro de la ligne)
End Sub

Private Sub TextBox1_Change() 'au changement dans la TesxBox1
Dim I As Integer 'déclare la variable I (Incrément)
Dim J As Byte 'déclare la variable J (incrément)
Dim K As Integer 'déclare la variable K (incrément)
Dim TL() As Variant 'déclare la variable TL (Tableau des Lignes)

Me.ListBox1.Clear 'vide la ListBox1
K = 1 'initialise la variable K
For I = 2 To NL 'boucle 1 : sur toutes les lignes I du tabelau de cellules TC (en partant de la seconde)
For J = 1 To NC 'boucle 2 : sur toutes les colonnes J du tabelau de cellules TC
If InStr(1, TC(I, J), Me.TextBox1.Value, vbTextCompare) <> 0 Then 'condition : si le texte de la TextBox1 est contenu dans la donnée ligne I colonne J (sans tenir compte de la casse)
ReDim Preserve TL(NC + 1, 1 To K) 'redimensionne le tableau de lignes TL
TL(0, K) = I 'récupère dans la ligne 0, colonne K de TL le numéro de ligne (masqué)
For l = 1 To NC 'boucle sur toutes les colonnes de TC
TL(l, K) = TC(I, l) 'récupère dans la ligne L, colonne K de TC la valeur de la ligne I , colonne L de TC (transposition)
Next l 'prochaine colonne de la boucle 2
K = K + 1 'incrémente K
Exit For 'sort de la boucle 2
End If 'fin de la condition
Next J 'prochaine colonne de la boucle 2
Next I 'prochaine ligne de la boucle 1
If K > 1 Then 'condition : si K est supérieur à 1 (au moins une occurrence a été trouvé)
If K = 2 Then ReDim Preserve TL(NC + 1, 1 To 2) 'si une seule occurrence trouvée, redimensionne TL pour pouvoir transposer
Me.ListBox1.List = Application.Transpose(TL) 'alimente la ListBox1 avec le tableau TL transposé
End If 'fin de la condition
End Sub

Private Sub ListBox1_Click() 'au clic dans la ListBox1
O.Rows(Me.ListBox1.Column(0, ListIndex)).Select 'sélectionne la ligne de l'élément sélectionné
Unload Me 'vide et ferme l'UserForm
End Sub


Private Sub Recherche_Click()

End Sub

Private Sub UserForm_Click()

End Sub

1 réponse

yg_be Messages postés 22720 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 23 avril 2024 1 476
20 juil. 2017 à 22:08
bonsoir, peux-tu partager le code qui fonctionne bien lorsque les box sont dans la même feuille?
il est probablement facile à adapter.
0
AbouJustBeHappy Messages postés 13 Date d'inscription jeudi 20 juillet 2017 Statut Membre Dernière intervention 24 juillet 2017
20 juil. 2017 à 22:34
Bonsoir yg_be,
Voici le lien. Merci par avance :)
https://www.cjoint.com/c/GGupUY4VnbE
0
yg_be Messages postés 22720 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 23 avril 2024 1 476 > AbouJustBeHappy Messages postés 13 Date d'inscription jeudi 20 juillet 2017 Statut Membre Dernière intervention 24 juillet 2017
21 juil. 2017 à 10:05
comment puis-je tester que le code fonctionne bien lorsque les box sont dans la même feuille?
0
AbouJustBeHappy Messages postés 13 Date d'inscription jeudi 20 juillet 2017 Statut Membre Dernière intervention 24 juillet 2017 > yg_be Messages postés 22720 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 23 avril 2024
21 juil. 2017 à 10:17
Bonjour,

Je suis désolé mais j'avais oublié de mettre le fichier excel. Tu le trouveras avec le lien suivant : https://www.cjoint.com/c/GGviqLoSW4E
0
yg_be Messages postés 22720 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 23 avril 2024 1 476 > AbouJustBeHappy Messages postés 13 Date d'inscription jeudi 20 juillet 2017 Statut Membre Dernière intervention 24 juillet 2017
21 juil. 2017 à 10:32
comment puis-je tester que le code fonctionne bien lorsque les box sont dans la même feuille? il ne se passe rien quand je clique sur le bouton de recherche.
avant toute autre chose, peux-tu ajouter "option explicit" au début de chaque page de code, et compiler ton projet, afin de vérifier que toutes tes variables sont bien déclarées?
ensuite, partager ton fichier corrigé?
0