[VBA / ACCESS] Problème liste déroulante avec autre liste déroulante

Problème liste déroulante avec autre liste déroulante [VBA / ACCESS] - VB/VBA/VBS - Programmation

Marsh Posté le 31-05-2007 à 14:15:13    

Bonjour le forum,
 
J'ai un petit problème au niveau de la programmation sur access.
 
Je vous explique :
J'ai une liste déroulante1 "Sous_Ensemble" avec comme valeur :  
420-1
420-2  
430-1
430-2
440
450
460
470
 
J'ai une seconde liste déroulante2 "Marque" :  
Schneider
Allen Bradley
Siemens...
 
J'ai une troisième liste déroulante3 "Type"
 
En temps normal, je choisie une valeur de la liste déroulante1, puis une valeur de la liste déroulante2 (qui est en fonction de la première liste déroulante), puis je choisie une valeur de la liste déroulante3 (qui est en fontion de la première et de la seconde liste déroulante).
 
Ca ça fonctionne, mais maintenant on me demande que lorsque l'on choisira dans "Type", si la liste déroulante1 a la valeur 420-1 ou 420-2 ou 440 ou 450 ou 460, que ça nous donne les valeurs que peut avoir tous ses Sous-Ensemble.
 
Exemple:  
420-1 ; schneider ; type = 'a' ou 'b' ou 'c'
420-2 ; schneider ; type = 'd' ou 'e' ou 'f'
440 ; schneider ; type = 'g' ou 'h
450 ; schneider ; type = 'i' ou 'j
460 ; schneider ; type = 'k' ou 'l'
Ca c'est ce que j'ai fait
 
Mais maintenant on me demande ça:
420-1 ; schneider ; type = 'a' ou 'b' ou 'c' ou 'd' ou 'e' ou 'f' ou 'g' ou 'h' ou 'i' ou 'j' ou 'k' ou 'l'
 
Et exactement la meme chose avec 420-2, 440, 450, 460.
 
Voila, si vous voulez plus d'explication n'hésité pas.
 
Cordialemant, Bubut89

Reply

Marsh Posté le 31-05-2007 à 14:15:13   

Reply

Marsh Posté le 31-05-2007 à 15:33:21    

Bonjour,
 
pas tres clair ! je resume...dis moi si c'est ca !
tu as 3 listes L1, L2 et L3
Quand tu choisis une valeur dans L1 alors L2 et L3 se mettent à jour,
ensuite tu choisis une valeur dans L2 et c'est L3 qui se met à jour.
 
jusque là je suivais...maintenant je suis perdu !!!
 

Reply

Marsh Posté le 31-05-2007 à 16:31:39    

ok jusqu'à là c'est bon, accroche toi pour la suite car c'est assé compliqué à expliquer.
 
Je reprens mon exemple précédent :
 
420-1 ; schneider ; type = 'a' ou 'b' ou 'c'  
420-2 ; schneider ; type = 'd' ou 'e' ou 'f'  
440 ; schneider ; type = 'g' ou 'h  
450 ; schneider ; type = 'i' ou 'j  
460 ; schneider ; type = 'k' ou 'l'
 
Si je choisis 420-1, j'ai le choix pour la Marque entre schneider, allen bradley et siemans, je choisis schneider. Donc pour la marque Schneider, dans Type, j'ai le choix 'a' ou 'b' ou 'c'.
 
Maintenant je souhaiterai que lorsque je choisis 420-1 ou 420-2 ou 440 ou 450 ou 460 et que dans ma liste déroulante Marque, je choisis schneider. Il propose dans ma liste déroulante Type, tous les types correspondant à la marque schneider et appartenent au Sous Ensembles 420-1 et 420-2 et 440 et 450 et 460.
 
 
Ce que je souhaite, je choisis 420-1, je choisis schneider, dans ma dernière liste déroulante il me propose tous les enregistrements  "Type" appartenent au Sous Ensemble 420-1 et 420-2 et 440 et 450 et 460.  
 
420-1 ; schneider ; type = 'a' ou 'b' ou 'c' ou 'd' ou 'e' ou 'f' ou 'g' ou 'h' ou 'i' ou 'j' ou 'k' ou 'l'  
 
si je choisis 420-2, le choix du type sera la meme que pour 420-1 et que pour 440 et 450 et 460.
 
J'espère que j'ai assez bien expliqué.
 
Cordialement,  
 
Bubut89

Reply

Marsh Posté le 31-05-2007 à 17:02:25    

Il suffit de faire la sélection uniquement sur la marque et plus sur ta liste1 (420-1, etc..)
En clair (j'espere...)
Quand tu choisis dans ta liste 1, ca te donne les marques possibles dans ta liste 2.
Quand tu choisis la marque dans ta liste 2 tu dois rechercher indépendamment de la sélection de ta liste 1, tous les éléments qui ont pour marque celle que tu as choisi.
Tu ne peux pas te contenter des valeurs présentes dans tes listes mais soit de tableaux temporaires, soit d'interrogations à ta base access.
 
J'espère que ca t'aide !!

Reply

Marsh Posté le 01-06-2007 à 07:55:28    

Bonjour Paul Hood,
 
Excuse moi mais je ne te suie pas totalement.

Tu ne peux pas te contenter des valeurs présentes dans tes listes mais soit de tableaux temporaires, soit d'interrogations à ta base access.

Je ne te comprends pas.
Il faut pas oublier qu'il n'y a pas que : 420-1, 420-2, 440, 450, 460 il y a aussi le reste : 430-1, 430-2, 470.
Donc si :

Quand tu choisis la marque dans ta liste 2 tu dois rechercher indépendamment de la sélection de ta liste 1, tous les éléments qui ont pour marque celle que tu as choisi.

Alors j'aurai aussi les marque de ce que je ne désir pas.
 
Cordialement,
 
Bubut

Reply

Marsh Posté le 01-06-2007 à 08:13:54    

Donc je n'ai pas été clair où je n'ai rien compris !!!!
Dans ta liste 1 tu choisis un nombre 420-1, ca te donne en liste2 un certain nombre de marque (Schneider, Siemens, etc...).
ensuite...
Dans ta liste2 tu choisis une marque (Schneider, Siemens, etc...) parmi celles présentes. Et dans la liste3 tu dois indiquer tous les types associés à la marque (sélectionnée en liste2) quelque soit le nombre sélectionné dans ta liste1.
J'y suis ?

Reply

Marsh Posté le 01-06-2007 à 08:26:27    

ok, pour ma liste 3, elle est en fonction de ma liste 1 et de ma liste 2 (ça s'est ce que j'ai aujourd'hui).
Pour ma liste 3 ce n'est pas quelque soit le nombre sélectionné en liste 1.
 
Ce que je veux:
Si 420-ou 420-2 ou 440 ou 450 ou 460 est sélectionné, dans la liste 3 on aura la meme chose pour n'importe laquel de ses 5 valeurs.
 
Si 430-1 ou 430-2 ou 470 ets sélectionné en liste 1, ma liste 3 sera à chaque fois différente pour les 3 valeurs sélectionné en liste 1.
 
Pfff c'est compliqué à expliquer. :pt1cable:

Reply

Marsh Posté le 01-06-2007 à 18:22:59    

je me permets de m'immiscer dans votre conv ^^
 
ma méthode pour ce dont tu parles est assez simple :
- dans les tables, j'ai une clé primaire en autonumber (nommé i_nomdelatable_ID) / je prends ici un exemple de table à 2 colonnes.
- dans les listbox j'ai 2 colonnes :  1 visible, 1 invisible
- la listbox 1 a pour source ta table 1
- les listbox 2 et 3 ont une source respectivement du type "SELECT * FROM table2 WHERE Litval1();" et "SELECT * FROM table3 WHERE Litval2();"  
les fonctions litval1 et 2 récupèrent la valeur de la listbox
- j'associe à ces listbox un évènement after_update qui donne ceci

Code :
  1. listbox1_after_update()
  2. if not isnull(listbox1) then
  3.     ival1 = listbox1.value
  4.     listbox2.requery
  5. end if
  6. end


 
avec

Code :
  1. function Litval1() as Integer
  2. Litval1 = ival1
  3. end function


 
et
en variable
 

Code :
  1. Public ival as Integer


 
tu vois le raisonnement ?

Reply

Marsh Posté le 04-06-2007 à 07:49:09    

Bonjour jpcheck,
 
Oui je vois à peu près le raisonnement.
 
Donc faut que je mettes une clé primaire en NuméroAuto à chacune de mes tables, dc 2 colonnes une visible (la valeur) et la seconde invisible (le NuméroAuto).
 
Mais après comment je fais pour lui dire que tel et tel valeur doit faire tel chose??
 
Merci de ton aide jpcheck
 
Cordialement,
 
Bubut89

Reply

Marsh Posté le 04-06-2007 à 12:14:16    

pour les listbox tu peux associer une colonne. Tu prends celle de ton autonumber caché.
 
voir la propriété boundcolumn notamment.


Message édité par jpcheck le 04-06-2007 à 12:14:37
Reply

Marsh Posté le 04-06-2007 à 12:14:16   

Reply

Marsh Posté le 04-06-2007 à 14:01:52    

Donc j'a

Reply

Marsh Posté le 04-06-2007 à 14:16:46    

Faute de frappe précédement désolé.
 
Donc j'ai créé mon NuméroAuto pour ma liste déroulante Sous_Ensemble. J'ai caché les colonnes non interressantes.
Mes 2 autres zones de listes ont comme source chacunes une requête.

Code :
  1. Public ival as Integer
  2. function Litval1() as Integer
  3. Litval1 = ival1
  4. end function
  5. listbox1_after_update()
  6.   if not isnull(listbox1) then
  7.      ival1 = listbox1.value
  8.      listbox2.requery
  9.   end if
  10. end

Donc le dedans faut que je mette la propriété BoundColumn.
Comme tu dis je lui spécifie la colonne cachée, mais après je vois pas trop le rapport avec mon sujet? Moi ce dont je recherche c'est une certaine valeur de la colonne cachée.
 
Excuse j'suis nul en programmation, donc j'ai des grosses lacunes.
 
Cordialement,
 
Bubut89

Reply

Marsh Posté le 04-06-2007 à 14:32:26    

[quotemsg=1568761,8,189214]les listbox 2 et 3 ont une source respectivement du type "SELECT * FROM table2 WHERE Litval1();" et "SELECT * FROM table3 WHERE Litval2();"  
 
[quotemsg]
c'est là qu'st lié mon raisonnement à ta question :)

Reply

Marsh Posté le 04-06-2007 à 14:53:46    

Liste 2:Contenu

SELECT [R_Marque / Sous Ensemble].Marque FROM [R_Marque / Sous Ensemble];

Liste 3:Contenu

SELECT [R_Type / Marque / Sous Ensemble].Types FROM [R_Type / Marque / Sous Ensemble];

Voici ce que j'ai pour mes listes déroulantes.
 
Donc je dois faire ça :
Liste 2:Contenu

SELECT [R_Marque / Sous Ensemble].Marque FROM [R_Marque / Sous Ensemble] WHERE Litval1();

Liste 3:Contenu

SELECT [R_Type / Marque / Sous Ensemble].Types FROM [R_Type / Marque / Sous Ensemble] WHERE Litval2();

Et donc faut que je déclare Litval1() et Litval2().
Maintenant faut programmer je présume :??:  :??:  
 
Y a-t-il possibilité que tu m'aide encor point de vu programmation car je sais pas trop comment faire?
 
Cordialement,
 
Bubut89

Reply

Sujets relatifs:

Leave a Replay

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