Salut,
alors la solution fonctionne parfaitement sur des combo indépendantes.
Mon sujet est de pouvoir les utiliser avec des combo en cascade et je ne parviens pas à faire fonctionner.
Voici mon code originel
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| Private Sub cbo_sport_Change()
Me.cbo_annee.Requery
Dim StrSport As String
Dim SQL As String
StrSport = "'" & Me.cbo_sport & "'"
SQL = "SELECT DISTINCT Year([date]) AS Annee FROM tbl_donnees WHERE sport =" & StrSport & " ORDER BY Year([date])"
' Affecte la chaîne SQL à la liste des années
cbo_annee.RowSource = SQL
' Déverrouille la liste des années
cbo_annee.Enabled = True
' Donne le focus la liste des années
cbo_annee.SetFocus
' Déroule la liste des années
cbo_annee.Dropdown
End Sub |
Voici avec l'addendum des choix Tous et Aucun ce que cela devient
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
| Private Sub cbo_sport_Change()
Me.cbo_annee.Requery
Dim StrSport As String
Dim SQL As String
Select Case Me.cbo_sport.Value
Case "Tous"
SQL = "SELECT Annee FROM (SELECT distinct Year(B.[date]) As Annee, 1 AS Position FROM tbl_donnees AS B Union SELECT * FROM tbl_zoneliste WHERE Entete='Toutes' OR Entete='Aucune') AS A ORDER BY A.Position, A.Annee ASC"
Case "Aucun"
SQL = "SELECT Annee FROM (SELECT distinct Year(B.[date]) As Annee, 1 AS Position FROM tbl_donnees AS B Union SELECT * FROM tbl_zoneliste WHERE Entete='Toutes' OR Entete='Aucune') AS A ORDER BY A.Position, A.Annee ASC"
Case Else
StrSport = "'" & Me.cbo_sport & "'"
SQL = "SELECT Annee FROM (SELECT distinct Year(B.[date]) As Annee, 1 AS Position FROM tbl_donnees AS B Union SELECT * FROM tbl_zoneliste WHERE Entete='Toutes' OR Entete='Aucune') AS A WHERE sport =" & StrSport & " ORDER BY A.Position, A.Annee ASC"
End Select
' Affecte la chaîne SQL à la liste des années
cbo_annee.RowSource = SQL
' Déverrouille la liste des années
cbo_annee.Enabled = True
' Donne le focus la liste des années
cbo_annee.SetFocus
' Déroule la liste des années
cbo_annee.Dropdown
End Sub |
Concernant le Case Else, j'ai essayé ces trois solutions :
SQL = "SELECT Annee FROM (SELECT distinct Year(B.[date]) As Annee, 1 AS Position FROM tbl_donnees AS B Union SELECT * FROM tbl_zoneliste WHERE Entete='Toutes' OR Entete='Aucune') AS A WHERE sport =" & StrSport & " ORDER BY A.Position, A.Annee ASC"
Dans ce cas, seul "course" qui est le seul sport présent chaque année me ramène l'ensemble des valeurs "Aucune", "Toutes" et les années. Les autres sports ouvrent ma liste sans aucune valeur (un seul champ à blanc).
Fonctionne ainsi avec sport car avec A.sport et B.sport, affichage d'une fenêtre me demandant d'entrer une valeur de paramètre pour A.sport (ou B.sport)
SQL = "SELECT Annee FROM (SELECT distinct Year(B.[date]) As Annee, 1 AS Position FROM tbl_donnees WHERE sport =" & StrSport & " AS B Union SELECT * FROM tbl_zoneliste WHERE Entete='Toutes' OR Entete='Aucune') AS A ORDER BY A.Position, A.Annee ASC"
Dans ce cas, avec sport, A.sport ou B.sport, ma liste année s'ouvre sans valeur (1 seul champ à blanc)
SQL = "SELECT Annee FROM (SELECT distinct Year(B.[date]) As Annee, 1 AS Position FROM tbl_donnees AS B Union SELECT * FROM tbl_zoneliste WHERE Entete='Toutes' OR Entete='Aucune' AND sport =" & StrSport & " ) AS A ORDER BY A.Position, A.Annee ASC"
Dans ce cas, avec sport, il m'affiche systématiquement la valeur "Toutes" suivies de l'ensemble des années trouvées dans la base quelque soit le sport.
Avec A.sport et B.sport, il m'affiche deux fois la fenêtre entrer une valeur de paramètre, puis m'affiche les valeurs "Aucune", "Toutes" suivies de toutes les années en base sans considération de la sélection sport.
C'est sûrement pas grand chose mais j'ai l'impression d'avoir fait le tour des possibilités, en tous cas de celles en ma limite de compétence de newbie.
S'il était possible de me communiquer l'astuce qui va faire fonctionner mon code correctement,
Merci par avance,
TF
Partager