Bonjour,
Je cherche à élaborer des critères de sélection avant de réaliser des calculs statistiques.
Je dispose donc des zones de liste qui doivent s'imbriquer.
Cela en soit est assez simple MAIS !!!
Je bloque sur comment paramétrer des conditions if dans mes reqûetes sql.
J'explique :
Les champs que j'utilise, leurs niveau de sélection et la propriété "contenu" de leurs "propriétés" :
Niveau 1 :
cbo_sport :cbo_annee :
Code : Sélectionner tout - Visualiser dans une fenêtre à part SELECT DISTINCT ([sport]) FROM tbl_donnees ORDER BY sport;Niveau 2 :
Code : Sélectionner tout - Visualiser dans une fenêtre à part SELECT DISTINCT Year([date]) AS Annee FROM tbl_donnees;
cbo_trimestre :Niveau 2' :
Code : Sélectionner tout - Visualiser dans une fenêtre à part SELECT DISTINCT DatePart("q",tbl_donnees.date,2,2) AS Trimestre FROM tbl_donnees GROUP BY DatePart("q",tbl_donnees.date,2,2), Year(tbl_donnees.date) HAVING (((Year(tbl_donnees.date))=Forms!f_stats!cbo_annee));
cbo_mois :Niveau 3 :
Code : Sélectionner tout - Visualiser dans une fenêtre à part SELECT DISTINCT Month(tbl_donnees.date) AS No_Mois, Format(tbl_donnees.date,"mmmm") AS Mois FROM tbl_donnees GROUP BY Month(tbl_donnees.date), Format(tbl_donnees.date,"mmmm"), Year(tbl_donnees.date) HAVING ((Year(tbl_donnees.date))=Forms!f_stats!cbo_annee);
cbo_semaine :cbo_jour : 1;Lundi;2;Mardi;3;Mercredi;4;Jeudi;5;Vendredi;6;Samedi;7;Dimanche
Code : Sélectionner tout - Visualiser dans une fenêtre à part SELECT DISTINCT DatePart("ww",[date],2,2) AS Semaine FROM tbl_donnees;
Exemple du code VB sur événement :
Vous avez compris que je vais piocher dans ma table tbl_donnees le contenu des listes que je souhaite constituer en utilisant notamment un champ date pour le décomposer en "Année", "Trimestre", "Mois", "Semaine".
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 Private Sub cbo_annee_Change() Me.cbo_trimestre.Requery Me.cbo_mois.Requery Me.cbo_week.Requery Me.cbo_jour.Requery End Sub
Ce que je ne parviens pas à faire :
Le cas de double niveau 1 :
si cbo_sport_Change()
on filtre cbo_annee sur la sélection de cbo_sport
si cbo_annee déjà renseigné, on conserve la sélection
sinon champ à blanc
fin si
on filtre tous les niveaux inférieurs
Fin si
si cbo_annee_Change()
on filtre cbo_sport sur la sélection de cbo_annee
si cbo_sport déjà renseigné, on conserve la sélection
sinon champ à blanc
fin si
on filtre tous les niveaux inférieurs
Fin si
Le cas niveaux 2 et 2'
si cbo_trimestre_Change
on filtre cbo_mois sur la sélection de cbo_trimestre
Fin si
MAIS
si cbo_trimestre n'est pas renseignén valeur par défaut *all
on filtre cbo_mois sur cbo_sport / cbo_annee
Le cas des niveaux 3
On choisi soit une stat par semaine, soit une stat par jour de la semaine
Le cerise sur le gâteau, si aucune sélection de niveau supérieur n'est effectuée, une sélection sur un niveau inférieurs doit pouvoir mettre à jour ses niveaux supérieurs.
La finalité de ces sélections est de pouvoir paramètrer une requête sql devant le retourner des stats de performances comme suit :
Voilà, vous aurez certainement encore plus compris pourquoi je me tape la têt contre les murs quand je vous aurais dis que je débute en access et que cette petite appli perso n'est encore pas finie !!!
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
30
31 SELECT (Mes champs paramètres) tbl_donnees.sport, Year(date) AS Annee, DatePart("q",date,2,2) AS Trimestre, Month(date) AS Mois, DatePart("ww",date,2,2) AS Semaine, DatePart("w",date,2,2) AS JourSem, (Mes champs stats calculés) Count(tbl_donnees.No_enreg) AS Nb_seances, Sum(temps*86400) AS Totalsec, Int(Totalsec/3600) & ":" & Format(Int(([Totalsec] Mod 3600)/60),"00") & ":" & Format(([Totalsec] Mod 3600/60),"00") AS TempsTotal, Avg([temps]*86400) AS Moysec, Int([Moysec]/3600) & ":" & Format(Int(([Moysec] Mod 3600)/60),"00") & ":" & Format(([Moysec] Mod 3600/60),"00") AS TempsMoy, Max(tbl_donnees.temps) AS TempsMax, Sum(temps*fmoy)/Sum(temps) AS FrqMoy, Avg(tbl_donnees.fmax) AS FrqMaxMoy, Sum(tbl_donnees.Calories) AS CalTot, Avg(tbl_donnees.Calories) AS CalMoy, Sum(tbl_donnees.Distance_km) AS DistTot, Avg(tbl_donnees.Distance_km) AS DistMoy, Avg([Distance_km]/([Temps]*24)) AS VitesseMoy FROM tbl_donnees (Mes zones de regroupements) GROUP BY tbl_donnees.sport, Year(date), DatePart("q",date,2,2), Month(date), DatePart("ww",date,2,2), DatePart("w",date,2,2);
Désolé de vous mettre à contribution mais je ne trouve définitivement pas de solution au travers de tous les tuto, FAQ et autres contributions en forums, d'où ce post dédié.
J'espère que le cas de figure tenteta certains parmi vous pour me donner la main et avancer sur le sujet.
Mille mercis par avance
TF
Partager