Vba et excel (débutant en galère)

LUSTRUCRU Messages postés 91 Date d'inscription mardi 8 avril 2003 Statut Membre Dernière intervention 15 mars 2013 - 29 juin 2006 à 18:21
jrivet Messages postés 7392 Date d'inscription mercredi 23 avril 2003 Statut Membre Derniè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

5 réponses

jrivet Messages postés 7392 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 6 avril 2012 60
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és 91 Date d'inscription mardi 8 avril 2003 Statut Membre Dernière intervention 15 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.

merci d'avance
jrivet Messages postés 7392 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 6 avril 2012 60
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 

 

<small> Coloration syntaxique automatique [AFCK]</small>
       

@+, Julien
Pensez: Moteur de Recherche, Réponse Acceptée
Mais Surtout: Règlement/STRONG> 
LUSTRUCRU Messages postés 91 Date d'inscription mardi 8 avril 2003 Statut Membre Dernière intervention 15 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 ?

Posez votre question
jrivet Messages postés 7392 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 6 avril 2012 60
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 

 

<small> Coloration syntaxique automatique [AFCK]</small>
       

@+, Julien
Pensez: Moteur de Recherche, Réponse Acceptée
Mais Surtout: Règlement/STRONG> 
Rejoignez-nous