Débutant -> soucis avec Combo et ListBox [VBA] - VB/VBA/VBS - Programmation
Marsh Posté le 10-06-2002 à 16:44:58
Loom the Gloom a écrit a écrit : taCombo.value ou taCombo.text |
Pourtant quand j'affiche macombo.value il me sort le text...
Mais c p'tet parce que je ne renseigne pas l'autre champs, il pete une erreur quand j'essaie...
UserForm1.ListBox1.AddItem myRS.Fields(0), myRS.Fields(1)
C'est pas comme ca peut-être ?
Marsh Posté le 10-06-2002 à 16:49:12
spectro a écrit a écrit : Pourtant quand j'affiche macombo.value il me sort le text... Mais c p'tet parce que je ne renseigne pas l'autre champs, il pete une erreur quand j'essaie... UserForm1.ListBox1.AddItem myRS.Fields(0), myRS.Fields(1) C'est pas comme ca peut-être ? |
dans les combobox et les listbox ya un champ texte et un index numérique (optionnel), c'est tout.
Marsh Posté le 10-06-2002 à 16:51:40
mareek a écrit a écrit : dans les combobox et les listbox ya un champ texte et un index numérique (optionnel), c'est tout. |
Cet index numérique, je peux mettre ce que je veux comme chiffres ? Ce n'est pas forcement 0,1,2,3,4,... ?
Pourquoi ca ne marche pas alors ce que j'ai mis plus haut, sachant que c'est bien un nombre que je mets en second ?
Marsh Posté le 10-06-2002 à 16:53:46
Loom the Gloom a écrit a écrit : ?? pas compris |
OUi j'suis pas forcement tres clair
En fait je sors de ma base des couples ( 'identifiantnumerique', 'text' que je veux mettre dans une combo ou listbox.
Ensuite quand l'utilisateur en selectionne un ( grace au text ) je veux recupérer l'identifiant correspondant. Et la je ne vois pas comment faire !
Marsh Posté le 10-06-2002 à 16:55:24
spectro a écrit a écrit : Cet index numérique, je peux mettre ce que je veux comme chiffres ? Ce n'est pas forcement 0,1,2,3,4,... ? |
c'est un integer ou un long je crois, tu peux pas mettre de nombre à virgule.
Citation : Pourquoi ca ne marche pas alors ce que j'ai mis plus haut, sachant que c'est bien un nombre que je mets en second ? |
pour récupérer l'index de l'élément sélectionné, tu fais maListBox.listIndex
Marsh Posté le 10-06-2002 à 16:56:51
spectro a écrit a écrit : OUi j'suis pas forcement tres clair En fait je sors de ma base des couples ( 'identifiantnumerique', 'text' que je veux mettre dans une combo ou listbox. Ensuite quand l'utilisateur en selectionne un ( grace au text ) je veux recupérer l'identifiant correspondant. Et la je ne vois pas comment faire ! |
ben le plus simple serait de ne stocker que le texte correspondant, et quand il est sélectionner, de récupérer l'identifiant correspodant dans la base
Marsh Posté le 10-06-2002 à 16:59:27
mareek a écrit a écrit : c'est un integer ou un long je crois, tu peux pas mettre de nombre à virgule.
|
Je veux bien, mais quand je mets :
UserForm1.ListBox1.AddItem myRS.Fields(0), myRS.Fields(1)
il me dit : "argument non valide" alors que c'est un INT le second ...??
Marsh Posté le 10-06-2002 à 17:00:25
Loom the Gloom a écrit a écrit : ben le plus simple serait de ne stocker que le texte correspondant, et quand il est sélectionner, de récupérer l'identifiant correspodant dans la base |
Je trouve super bizarre ( et bien lourd ) qu'il n'y ait pas moyen de faire comme avec une SelectBox HTML !!!
Marsh Posté le 10-06-2002 à 17:04:21
le second argument quand tu fais le additem doit obligatoirement être inférieur ou égal au nombre d'items. il représente en fait la position de l'élément dans la liste. donc si tes numéros font 1,7,5,4,3,2 ça le fait pas !!!
tu peux tjs faire un tableau à part stockant la correpondance valeur-identifiant mais c un peu plus chiant...
Marsh Posté le 10-06-2002 à 17:11:22
spectro a écrit a écrit : Je veux bien, mais quand je mets : UserForm1.ListBox1.AddItem myRS.Fields(0), myRS.Fields(1) il me dit : "argument non valide" alors que c'est un INT le second ...?? |
essaie:
Code :
|
si ça marche pas, tu remplie ta liste d'autant d'éléments bidon que tu en as dans ton recordset et tu ajoute les éléments de ton recorset dans l'ordre que tu veux ensuite. (méthode gros bourrin, ya surement plus simple)
Marsh Posté le 10-06-2002 à 17:11:58
El Scorcho a écrit a écrit : le second argument quand tu fais le additem doit obligatoirement être inférieur ou égal au nombre d'items. il représente en fait la position de l'élément dans la liste. donc si tes numéros font 1,7,5,4,3,2 ça le fait pas !!! tu peux tjs faire un tableau à part stockant la correpondance valeur-identifiant mais c un peu plus chiant... |
C clair, c lourd de devoir gérer deux trucs pour une simple combo box, je croyais que VBA etait un peu mieux que ca, je suis deçu
Enfin, si y'a pas d'autre moyen...
Marsh Posté le 11-06-2002 à 15:08:07
spectro a écrit a écrit : C clair, c lourd de devoir gérer deux trucs pour une simple combo box, je croyais que VBA etait un peu mieux que ca, je suis deçu Enfin, si y'a pas d'autre moyen... |
chaque élément de la liste est indexé, quel que soit le nombre de colonnes. C'est fait de manière auto quand on charge la liste
si j'ai bien compris le prob, tu cherches à mettre deux données par occurence de la liste, voici une solution qui peut marcher:
dans les propriétés de la listbox / Données / Origine source = Lsite de valeurs
dans les propriétés de la listbox / Format/ Nbre colonnes = 2
dans les propriétés de la listbox / Format/ Largeurs colonnes = 1cm;1cm; (par exemple)
dim myRs as recordset
dim masource as string
myRs.findfirst
While not myRs.EOF
masource=masource & myRs.field(0) & ";" & myRs.field(1) & ";"
wend
Listbox.rowsource=masource
après ça pour accéder au premier élément tu fais
Listbox.column(0, i)
'i c'est l'index de la donnée sélectionnée par l'utilisateur, ou plus simple:
Listbox.column(0, Listbox.Listindex)
dis moi si ça correpond à ce que tu cherches à faire
Marsh Posté le 11-06-2002 à 15:23:14
Merci pour ta réponse,
Apparemment dans ton système, les deux infos seront affichées a chaque fois, non ?
Pour lemoment j'ai fait une autre méthode qui marche, mais j'aurais voulu faire comme un SELECT HTML :
<select>
<option VALUE='2145'>blablabla</option>
</select>
Voilà, merci encore
Marsh Posté le 11-06-2002 à 15:49:44
ça me parait bien lourd et bien compliqué, tout ça pour presque rien !
++
Marsh Posté le 11-06-2002 à 15:58:09
Tiens j'ai une solution bourrin mais rapide, tu mets deux listes dont une visible = false et tu fait pour l'ajout :
ListBox1.AddItem myRS.Fields(0)
ListBox2.AddItem myRS.Fields(1)
Et quand tu veux récupérer les valeurs :
valeur1 = listbox1.value
valeur2 = listbox2.list(listbox1.listindex)
Pas testé mais ça doit marcher...
Marsh Posté le 11-06-2002 à 16:01:21
El Scorcho a écrit a écrit : Tiens j'ai une solution bourrin mais rapide, tu mets deux listes dont une visible = false et tu fait pour l'ajout : ListBox1.AddItem myRS.Fields(0) ListBox2.AddItem myRS.Fields(1) Et quand tu veux récupérer les valeurs : valeur1 = listbox1.value valeur2 = listbox2.list(listbox1.listindex) Pas testé mais ça doit marcher... |
Ah oui, ca doit marcher, j'essaierai a l'occasion
Merci
Marsh Posté le 10-06-2002 à 16:34:44
J'ai réussi a les remplir depuis une BD SQL Server, mais par contre je ne sait pas comment ces trucs marchent ! C pas comme en HTML avec un couple ('identifiant', 'blabla' ? En fait je veux pouvoir recperer l'identifiant du texte selectionné par le gars dans la combo box, comment dois-je faire ??
Merci par avance,