[VBA] Débutant -> soucis avec Combo et ListBox

Débutant -> soucis avec Combo et ListBox [VBA] - VB/VBA/VBS - Programmation

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,

Reply

Marsh Posté le 10-06-2002 à 16:34:44   

Reply

Marsh Posté le 10-06-2002 à 16:38:29    

taCombo.value
ou
taCombo.text


---------------
Music|Market|Feed|Loom|DVD
Reply

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 ?

Reply

Marsh Posté le 10-06-2002 à 16:47:39    

??
pas compris


---------------
Music|Market|Feed|Loom|DVD
Reply

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.


Message édité par mareek le 06-10-2002 à 16:49:31

---------------
"I wonder if the internal negative pressure in self pumping toothpaste tubes is adjusted for different market altitudes." John Carmack
Reply

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 ?

Reply

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 !

Reply

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


---------------
"I wonder if the internal negative pressure in self pumping toothpaste tubes is adjusted for different market altitudes." John Carmack
Reply

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


---------------
Music|Market|Feed|Loom|DVD
Reply

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.
 

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  




 
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 ...??

Reply

Marsh Posté le 10-06-2002 à 16:59:27   

Reply

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 !!!

Reply

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...

Reply

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 :
  1. UserForm1.ListBox1.AddItem myRS.Fields(0), CInt(myRS.Fields(1))


 
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)


---------------
"I wonder if the internal negative pressure in self pumping toothpaste tubes is adjusted for different market altitudes." John Carmack
Reply

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...

Reply

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 :D


Message édité par Bolino le 06-11-2002 à 15:10:43
Reply

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   :)

Reply

Marsh Posté le 11-06-2002 à 15:49:44    

ça me parait bien lourd et bien compliqué, tout ça pour presque rien !
 
++

Reply

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...

Reply

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  :D  
Merci

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed