OVH Cloud OVH Cloud

ListBox multicolonne

4 réponses
Avatar
Ol_Ge
Bonsoir,

Je souhaite pouvoir proposer dans une form une liste de choix, rempli à
partir d'une base de données. L'intitulé à choisir doit être "en clair",
et ensuite je voudrais dérouler mes procédures en fonction du code ou de
la clé correspondant à l'item sur lequel l'utilisateur à cliqué.

Pour ça, je voudrais utiliser une listbox multicolonne. Mais je ne
trouve pas le moyen de le faire, alors que sous VBA, celà est simple à
réaliser....

Comment remplir une listbox à deux colonnes ?

Comment déterminer la valeur de la deuxième colonne correspondant à
l'item de la 1ère colonne sélectionné ?

Je pense que la solution doit être simple, mais là, je sèche
lamentablement...

Pourriez vous me donner une piste ?

Merci d'avance.

Olivier

4 réponses

Avatar
jm
"Ol_Ge" wrote in message
news:45be783a$0$30954$
Bonsoir,

Je souhaite pouvoir proposer dans une form une liste de choix, rempli à
partir d'une base de données. L'intitulé à choisir doit être "en clair",
et ensuite je voudrais dérouler mes procédures en fonction du code ou de
la clé correspondant à l'item sur lequel l'utilisateur à cliqué.

Pour ça, je voudrais utiliser une listbox multicolonne. Mais je ne trouve
pas le moyen de le faire, alors que sous VBA, celà est simple à
réaliser....

Comment remplir une listbox à deux colonnes ?

Comment déterminer la valeur de la deuxième colonne correspondant à l'item
de la 1ère colonne sélectionné ?

Je pense que la solution doit être simple, mais là, je sèche
lamentablement...



Hello,

Une astue toute simple:
utiliser 2 listbox, dont une cachée.
voici par exemple (list1 pour les intitulés, list2 pour les valeurs):

Private Sub Form_Load()
List1.Visible = True
List2.Visible = False
' DB
' | TOTO | 10 |
' | TITI | 15 |
' | TATA | 23 |

List1.AddItem "TOTO": List2.AddItem 10
List1.AddItem "TITI": List2.AddItem 15
List1.AddItem "TATA": List2.AddItem 23

End Sub

Private Sub List1_Click()
Dim sztext As String
Dim lValue As Long

sztext = List1.Text
lValue = CLng(List2.List(List1.ListIndex))

MsgBox "l'utilisateur a choisi " & sztext & " valeur =>" & lValue
End Sub

Espérant que cela t'aide :-)


--
Jean-marc Noury (jean_marc_n2)
Microsoft MVP - Visual Basic
mailto: remove '_no_spam_' ;
FAQ VB: http://faq.vb.free.fr/
Avatar
Jacques93
Bonjour Ol_Ge,
Ol_Ge a écrit :
Bonsoir,

Je souhaite pouvoir proposer dans une form une liste de choix, rempli à
partir d'une base de données. L'intitulé à choisir doit être "en clair",
et ensuite je voudrais dérouler mes procédures en fonction du code ou de
la clé correspondant à l'item sur lequel l'utilisateur à cliqué.

Pour ça, je voudrais utiliser une listbox multicolonne. Mais je ne
trouve pas le moyen de le faire, alors que sous VBA, celà est simple à
réaliser....

Comment remplir une listbox à deux colonnes ?

Comment déterminer la valeur de la deuxième colonne correspondant à
l'item de la 1ère colonne sélectionné ?

Je pense que la solution doit être simple, mais là, je sèche
lamentablement...

Pourriez vous me donner une piste ?

Merci d'avance.

Olivier



Pourquoi ne pas utiliser un contrôle Listview en mode détail ?
Sauf si ta deuxième colonne n'a pas besoin d'être visible, auquel cas,
la solution de Jean-Marc est tout à fait opérationnelle.

--
Cordialement,

Jacques.
Avatar
François Picalausa
On Jan 30, 1:22 pm, "jm" wrote:
"Ol_Ge" wrote in messagenews:45be783a$0$30954$426a34cc @news.free.fr...





> Bonsoir,

> Je souhaite pouvoir proposer dans une form une liste de choix, rempli à
> partir d'une base de données. L'intitulé à choisir doit être "e n clair",
> et ensuite je voudrais dérouler mes procédures en fonction du code ou de
> la clé correspondant à l'item sur lequel l'utilisateur à cliqué.

Hello,

Une astue toute simple:
utiliser 2 listbox, dont une cachée.
voici par exemple (list1 pour les intitulés, list2 pour les valeurs):

<snip>

List1.AddItem "TOTO": List2.AddItem 10
List1.AddItem "TITI": List2.AddItem 15
List1.AddItem "TATA": List2.AddItem 23
<snip>



Hello,

Dans le cas particulier de clés numériques, la propriété ItemData p eut
souvent être mise à profit:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vb98/
html/vbproitemdata.asp

Dans l'exemple précédent, cela donnerait:
List1.AddItem "TOTO"
List1.ItemData(List1.NewIndex) = 10

(Dans le cas de données non numériques cela s'applique aussi, en
mappant l'ItemData sur un tableau d'UDT... mais alors l'approche
double listbox, peut être plus simple à implémenter pour un débutan t)

Bien entendu, comme l'indique Jacques, cela ne s'applique que si les
clés associées ne sont pas visibles!

François
Avatar
Ol_Ge
François Picalausa a écrit :

On Jan 30, 1:22 pm, "jm" wrote:

"Ol_Ge" wrote in messagenews:45be783a$0$30954$






Bonsoir,



Je souhaite pouvoir proposer dans une form une liste de choix, rempli à
partir d'une base de données. L'intitulé à choisir doit être "en clair",
et ensuite je voudrais dérouler mes procédures en fonction du code ou de
la clé correspondant à l'item sur lequel l'utilisateur à cliqué.



Hello,

Une astue toute simple:
utiliser 2 listbox, dont une cachée.
voici par exemple (list1 pour les intitulés, list2 pour les valeurs):

<snip>

List1.AddItem "TOTO": List2.AddItem 10
List1.AddItem "TITI": List2.AddItem 15
List1.AddItem "TATA": List2.AddItem 23
<snip>




Hello,

Dans le cas particulier de clés numériques, la propriété ItemData peut
souvent être mise à profit:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vb98/
html/vbproitemdata.asp

Dans l'exemple précédent, cela donnerait:
List1.AddItem "TOTO"
List1.ItemData(List1.NewIndex) = 10

(Dans le cas de données non numériques cela s'applique aussi, en
mappant l'ItemData sur un tableau d'UDT... mais alors l'approche
double listbox, peut être plus simple à implémenter pour un débutant)

Bien entendu, comme l'indique Jacques, cela ne s'applique que si les
clés associées ne sont pas visibles!

François





Merci bien ! La réponse correspond à ma demande... Ca marche comme je le
souhaitais.

Bonne soirée.

Olivier