Suite à un post, j'ai proposé cette solution pour alimenter des listes déroulantes.
Pour illustrer l’explication, un exemple est téléchargeable.
Il faut créer des requêtes stockées paramétrées qui seront affectées dynamiquement à la liste sur l’événement CHANGE de la liste déroulante précédente.
SELECT THE_MOD.MOD_COD, StrConv([MOD_LIB],3) AS PAY FROM (TBL_ETU INNER JOIN TBL_PRO ON TBL_ETU.ETU_CLE = TBL_PRO.ETU_CLE) INNER JOIN ((TBL_PRO_STR INNER JOIN THE_MOD ON TBL_PRO_STR.PRO_STR_PAY = THE_MOD.MOD_COD) INNER JOIN TBL_PRO_STR_CEN ON TBL_PRO_STR.PRO_STR_CLE = TBL_PRO_STR_CEN.PRO_STR_CLE) ON TBL_PRO.PRO_CLE = TBL_PRO_STR.PRO_CLE WHERE (((TBL_ETU.ETU_CLE)=Forms!FRM_PRO_STR_CEN!ETU) And ((THE_MOD.VAR_CLE)=6)) GROUP BY THE_MOD.MOD_COD, StrConv([MOD_LIB],3);
On crée une requête stockée paramétrée qryPays dont le code est :
PARAMETERS pETUDE Long;
SELECT THE_MOD.MOD_COD, StrConv([MOD_LIB],3) AS PAY
FROM (TBL_ETU INNER JOIN TBL_PRO ON TBL_ETU.ETU_CLE = TBL_PRO.ETU_CLE) INNER JOIN ((TBL_PRO_STR INNER JOIN THE_MOD ON TBL_PRO_STR.PRO_STR_PAY = THE_MOD.MOD_COD) INNER JOIN TBL_PRO_STR_CEN ON TBL_PRO_STR.PRO_STR_CLE = TBL_PRO_STR_CEN.PRO_STR_CLE) ON TBL_PRO.PRO_CLE = TBL_PRO_STR.PRO_CLE
WHERE (((TBL_ETU.ETU_CLE)=pETUDE) And ((THE_MOD.VAR_CLE)=6))
GROUP BY THE_MOD.MOD_COD, StrConv([MOD_LIB],3);
Puis sous l'événement CHANGE de la liste déroulante Etude (dans mon exemple lstEtude), on écrit
Private Sub lstEtude_Change()
With CurrentDb.QueryDefs("qryPays")
.Parameters("pETUDE") = Me.lstEtude.Value
Set Me.lstPays.Recordset = .OpenRecordset
.Close
End With
On Error Resume Next ´——> pour éviter le message d’erreur si pas d’items dans la liste
With Me.lstPays
.SetFocus
.ListIndex = 0
End With
End Sub
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité,
merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.