I. Introduction▲
On souhaite créer un formulaire permettant la saisie des pointages des employés pour chaque jour du calendrier.
Pour ce faire, après avoir donné un aperçu du formulaire souhaité et avoir détaillé la procédure de pré-remplissage, on décrira la structure des différents objets de l'application exemple, dans l'ordre de leur création :
- tables nécessaires ;
- requêtes ;
- formulaires.
II. Rendu final du formulaire de pointage▲
Il affiche la date et la période du jour de pointage, et contient un sous-formulaire pré-rempli, avec pour chaque employé ses heures ou son motif d'absence à renseigner.
On constate que les noms des salariés sont déjà remplis avant la saisie des heures et des motifs d'absences.
III. Procédure de pré-remplissage▲
Quand on choisit une date sur le formulaire principal, on teste, si un pointage a déjà été créé pour ce jour. Si ce n'est pas le cas, on le crée, puis on ajoute un enregistrement par période et par employé dans la table contenant le détail des pointages, ce qui permet ensuite de générer le tableau de saisie des heures dans le sous-formulaire.
IV. Tables nécessaires▲
Nous allons tout d'abord décrire les tables principales permettant d'enregistrer les données.
IV-A. Table T_Pointage▲
Elle contient les informations sur les pointages, comme leur date accompagnée d'une note éventuelle.
Nom du champ |
Type de données |
Description |
---|---|---|
IdPointage |
Numéro-auto |
Identifiant du pointage |
DatePointage |
Date/heure |
Date du pointage |
PeriodeJour |
Texte |
Période de la journée du pointage |
Note |
Texte long |
Note sur le pointage |
IV-B. Table T_DetailPointage▲
Elle contient le détail des pointages des employés pour une journée donnée.
Nom du champ |
Type de données |
Description |
---|---|---|
IdDetailPointage |
Numéro-auto |
Identifiant du détail des pointages |
IdPointage |
Entier long |
Identifiant du pointage |
IdEmploye |
Entier long |
Identifiant de l'employé |
HeureArrivee |
Date/heure |
Heure d'arrivée de l'employé |
HeureDepart |
Date/heure |
Heure de départ de l'employé |
IdMotifAbsence |
Texte |
Code du motif de l'absence |
Note |
Texte |
Note sur le pointage |
Si aucune heure n'est saisie, il faut bien sûr choisir un motif d'absence.
IV-C. Table T_PeriodeJour▲
Elle sert à enregistrer les périodes de la journée.
Nom du champ |
Type de données |
Description |
---|---|---|
PeriodeJour |
Texte |
Période de la journée : Matin, Après-midi |
NumOrdre |
Entier long |
Numéro d'ordre de la période de la journée |
Vous pouvez enregistrer vos propres périodes.
IV-D. Table T_Employe▲
Elle contient les informations sur les employés.
Nom du champ |
Type de données |
Description |
---|---|---|
IdEmploye |
Numéro-auto |
Identifiant de l'employé |
NomEmploye |
Texte |
Nom de l'employé |
PrenomEmploye |
Texte |
Prénom de l'employé |
… |
… |
… |
Seuls les trois premiers champs de la table sont indispensables.
V. Requêtes▲
Pour pouvoir afficher, pour chaque jour et chaque période, le détail des pointages des employés, il nous faut tout d'abord créer une requête.
V-A. Requête R_DetailPointages▲
Elle relie les tables T_DetailPointage et T_Employe sur le champ IdEmploye et affiche le détail des pointages de chaque employé.
Le nombre d'heures effectuées est égal au nombre de minutes entre l'heure d'arrivée et l'heure de départ, divisé par 60 :
NbHeures
:
NbHeures: DiffDate
(
"n"
;[HeureArrivee];[HeureDepart])/
60
Les données seront ensuite filtrées sur le champ IdPointage en fonction de l'identifiant du pointage affiché sur le formulaire principal.
VI. Formulaires▲
La troisième étape consiste à créer les formulaires.
VI-A. Sous-formulaire SF_DetailPointages▲
Il s'affiche en mode feuille de données, et est relié à la requête R_DetailPointages.
Il contient :
- les zones de texte txtEmploye, txtHeureArrivees, txtHeureDepart, txtNbHeures et txtNote ;
- la liste déroulante cmbIdMotifAbsence.
VI-B. Formulaire F_Pointages▲
Il est lié à la table T_Pointage et permet l'affichage du tableau des pointages en fonction de la date et de la période choisies.
Il contient :
- les zones de texte txtDateJour, cmbPeriodeJour et txtIdPointage ;
- les boutons de commande CmdPrecedent et CmdSuivant ;
- le sous-formulaire SF_DetailPointages.
VI-B-1. Procédure RefreshPointages▲
Elle est contenue dans le module du formulaire et permet de mettre à jour le tableau des pointages en fonction de la date choisie sur le formulaire.
Déroulé de la procédure :
- recherche s'il existe un pointage à la date saisie ;
- s'il existe, se déplace sur son enregistrement ;
- sinon, propose de le créer et de mettre à jour le tableau des pointages.
VI-B-2. Zone de texte txtDatePointage▲
Elle permet de choisir une date de pointage.
VI-B-2-a. Procédure sur Après MAJ▲
Elle permet de mettre à jour le tableau des pointages en fonction de la date et de la période choisies.
Private
Sub
txtDatePointage_AfterUpdate
(
)
RefreshPointages ' on rafraîchit le tableau des pointages après le choix de la date
End
Sub
VI-B-3. Zone de texte cmbPeriodeJour▲
Elle permet de choisir une période de la journée pour le pointage.
VI-B-3-a. Procédure sur Après MAJ▲
Elle permet de mettre à jour le tableau des pointages en fonction de la date et de la période choisies.
Private
Sub
cmbPeriodeJour_AfterUpdate
(
)
RefreshPointages ' on rafraîchit le tableau des pointages après le choix de la période
End
Sub
VI-B-4. Bouton de commande CmdPrecedent▲
Ce bouton est utilisé pour permettre à l'utilisateur de reculer d'un jour et de rafraîchir le sous-formulaire.
VI-B-4-a. Procédure sur Clic▲
Private
Sub
CmdPrecedent_Click
(
)
Me.txtDatePointage.Value
=
CDate
(
Me.txtDatePointage.Value
) -
1
' recule d'une journée dans le temps
Me.cmbPeriodeJour.Value
=
Me.cmbPeriodeJour.ItemData
(
0
) ' on sélectionne la 1re période de la journée (matin)
RefreshPointages ' on rafraîchit le tableau des pointages
End
Sub
VI-B-5. Bouton de commande CmdSuivant▲
Ce bouton est utilisé pour permettre à l'utilisateur d'avancer d'un jour et de rafraîchir le sous-formulaire.
VI-B-5-a. Procédure sur Clic▲
Private
Sub
CmdSuivant_Click
(
)
Me.txtDatePointage.Value
=
CDate
(
Me.txtDatePointage.Value
) +
1
' avance d'une journée dans le temps
Me.cmbPeriodeJour.Value
=
Me.cmbPeriodeJour.ItemData
(
0
) ' on sélectionne la 1re période de la journée (matin)
RefreshPointages ' on rafraîchit le tableau des pointages
End
Sub
VI-B-6. Procédure sur Ouverture du formulaire▲
On ouvre le formulaire sur la date du jour, puis on actualise le tableau des pointages :
Private
Sub
Form_Open
(
Cancel As
Integer
)
Me.txtDatePointage
=
Date
' on copie la date du jour à l'ouverture du formulaire
Me.cmbPeriodeJour.Value
=
Me.cmbPeriodeJour.ItemData
(
0
) ' on sélectionne la 1re période de la journée (matin)
RefreshPointages ' on rafraîchit le tableau des pointages
End
Sub
VII. Téléchargement▲
La base exemplegestion-pointages.zip est au format accdb.
Pour faciliter les tests et assurer sa portabilité, la base exemple n'utilisera pas de composants externes à Access (ActiveX ou autres).
VIII. Remerciements▲
Un grand Merci à toute l'équipe de Dvp et plus particulièrement à :
Pour leurs remarques et conseils avisés :
. Tofalu
. Arkham46
Pour leur relecture :
. jacques_jean
. ram-0000