Bonjour et sois le bienvenu parmi nous,
La formule est assez complexe, car il y a trois cas à envisager :
Il faut intercepter :
ceux qui sont arrivés après le début (inclus) et repartis avant la fin (incluse) ;
ceux qui étaient déjà là au début ;
ceux qui étaient encore là à la fin.
Dans le formulaire fFormulaire de l'exemple, un contrôle Debut et un contrôle Fin
Je te propose d’écrire avec le QBE une requête qui intercepte ces cas :
Voici son SQL
1 2 3 4
| SELECT tPresences.Personne, tPresences.Arrivee, tPresences.Depart
FROM tPresences
WHERE (((tPresences.Arrivee)>=[Formulaires]![fLeFormulaire]![Debut]) AND ((tPresences.Depart)<=[Formulaires]![fLeFormulaire]![Fin])) OR (((tPresences.Arrivee)<=[Formulaires]![fLeFormulaire]![Debut]) AND ((tPresences.Depart)<=[Formulaires]![fLeFormulaire]![Fin])) OR (((tPresences.Arrivee)<=[Formulaires]![fLeFormulaire]![Debut]) AND ((tPresences.Depart)>=[Formulaires]![fLeFormulaire]![Fin])) OR (((tPresences.Arrivee)>=[Formulaires]![fLeFormulaire]![Debut]) AND ((tPresences.Depart)>=[Formulaires]![fLeFormulaire]![Fin]))
ORDER BY tPresences.Personne; |
Cette requête te donne une ligne par personne présente entre les deux instants renseignés dans fLeFormulaire
Et comme source pour le nombre de présents, tu utilises la fonction de domaine
=CpteDom("*";"rUneRequete")
Et pour actualiser à chaque modification d’une date, ce code dans le module du formulaire :
1 2 3 4 5 6 7 8 9 10
| Option Compare Database
Option Explicit
Private Sub Debut_AfterUpdate()
Me.Presents.Requery
End Sub
Private Sub Fin_AfterUpdate()
Me.Presents.Requery
End Sub |
La DB qui m'a servi pour tester est ici.
Partager