LUSTRUCRU
Messages postés91Date d'inscriptionmardi 8 avril 2003StatutMembreDernière intervention15 mars 2013
-
29 juin 2006 à 18:21
jrivet
Messages postés7392Date d'inscriptionmercredi 23 avril 2003StatutMembreDernière intervention 6 avril 2012
-
30 juin 2006 à 10:47
Bonjour a tous et toutes,
Une feuille excel avec 2 colonnes (A=Nom et B= Commentaires)
une userform avec 1 controle LISTBOX et 1 controle TextBox
je créer une liste de noms comme ceci :
'charge la list avec les items
TextBox1.Text = ""
Cells.Range("a1:a800").Select
l = Cells.Range("a1:a800")
ListBox1.List = l
je récupére les commentaires associés comme cela :
Private Sub ListBox1_Click()
Dim R
R = ListBox1.ListIndex + 1
TextBox1 = Cells.Range("B" & R)
End Sub
par contre à l'usage (énormément de Nom dans la liste) il me semble interressant de faire une recherche directement sur le nom (à travers un inputbox peux être ? ou à travers une saisie dans un textbox) ou partie du nom
Comment selectionner un nom dans mon controle listbox de cette manière comme si j'agissai sur la procédure Click du controle ?
Merci d'avance de vos aides éclairées ( pour ma part me rame)
JF
jrivet
Messages postés7392Date d'inscriptionmercredi 23 avril 2003StatutMembreDernière intervention 6 avril 201260 30 juin 2006 à 09:03
Salut,
Si tu veux changer l'élément choisi dans la listBox depuis le code, il te suffit de modifier la valeur de la propriété ListIndex.
Si ce n'est pas du tout cela que tu souhaitais faire, une petite explication s'impose..
@+, Julien Pensez: Moteur de Recherche, Réponse Acceptée
Mais Surtout: Règlement/FONT>
LUSTRUCRU
Messages postés91Date d'inscriptionmardi 8 avril 2003StatutMembreDernière intervention15 mars 2013 30 juin 2006 à 09:27
Bonjour,
Non ce n'est pas ce que je souhaite faire. En fait l'idée est de faire une recherche dans la liste SANS PASSER par la listbox, Exemple :
je recherche WEBER qui fait partie des 798 nom (cele pourrait être 680), ce qui implique qu'il faut que je recherche avec l'ascenceur du control, c'est long et pas très pratique donc si je saisie W (dans un control textebox par exemple) ma listebox se positionne automatiquement sur le premier nom commencant par W, si je rajoute un E,
la liste se positionne sur le premier nom commencant par WE ainsi de suite.
jrivet
Messages postés7392Date d'inscriptionmercredi 23 avril 2003StatutMembreDernière intervention 6 avril 201260 30 juin 2006 à 09:47
Salut,
essaie ceci, ce nest pas très optimisé mais cela devrait fonctionner, en revanche je n'est pas testé
Private Sub TextBox1_Change()
Dim i As Integer
For i = 1 To ListBox1.ListCount - 1
If UCase (Mid(ListBox1.List(i), 1, Len(TextBox1.Value))) = UCase(TextBox1.Value) Then
ListBox1.ListIndex = i
Exit For
End If
Next
End Sub
LUSTRUCRU
Messages postés91Date d'inscriptionmardi 8 avril 2003StatutMembreDernière intervention15 mars 2013 30 juin 2006 à 10:38
merci Julien,
Ca fonctionne (hormis que le curseur de la liste box se positionne systèmatiquement sur la deuxième ligne lors de la frappe de la première lette)
pour ma compréhension, comment cela fonctionne t'il?
Vous n’avez pas trouvé la réponse que vous recherchez ?
jrivet
Messages postés7392Date d'inscriptionmercredi 23 avril 2003StatutMembreDernière intervention 6 avril 201260 30 juin 2006 à 10:47
Re,
Il est possible qu'il est une erreur d'indice (+/- 1)
Explication du code
Private Sub TextBox1_Change()
'l'evenement TextBox1_Change survient a chaque fois qu il y a un changement dans
' le TextBox
Dim i As Integer
'Boucle pour aller du premier au dernier élément de la liste
For i = 1 To ListBox1.ListCount - 1
'Ucase:Renvoie une valeur de type Variant (String)
' contenant la chaîne indiquée, convertie en majuscules.
'Mid: Renvoie une valeur de type Variant (String)
' contenant un nombre indiqué de caractères extraits d'une chaîne de caractères.
'Mid(ChaineBase, CaractereDepart, Longueur) soit ici
' ChaineBase = L'element de la liste
' CaractereDepart = 1
' Longueur = Nombre de caractere entré dans TextBox
If UCase (Mid(ListBox1.List(i), 1, Len(TextBox1.Value))) = UCase(TextBox1.Value) Then
'Si ils sont égaux alors on séléctionne cet élémént dans la liste
ListBox1.ListIndex = i
'et on sort de la boucle car plus besoin d'aller plus loin
Exit For
End If
Next
End Sub