Créer un formulaire de saisie des pointages des salariés avec Access

Objectif : créer un formulaire de saisie des pointages des salariés avec pré-remplissage de leur nom et prénom.

Niveau requis : intermédiaire.

Commentez cet article : 4 commentaires Donner une note  l'article (5)

Article lu   fois.

L'auteur

Liens sociaux

Viadeo Twitter Facebook Share on Google+   

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.

Image non disponible
Aperçu du formulaire des pointages

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é.

Image non disponible
Requête R_DetailPointages en mode création.

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 :

 
Sélectionnez
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.
Image non disponible
Aperçu du formulaire SF_DetailPointage en mode création

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.
Image non disponible
Aperçu du formulaire F_Pointage en mode création

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.
Procédure RefreshPointages
Cacher/Afficher le codeSélectionnez

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.

 
Sélectionnez
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.

 
Sélectionnez
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

 
Sélectionnez
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

 
Sélectionnez
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 :

Procédure Form_Open
Sélectionnez
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

Vous avez aimé ce tutoriel ? Alors partagez-le en cliquant sur les boutons suivants : Viadeo Twitter Facebook Share on Google+   

  

Copyright © 2009 Denis Hulo. Aucune reproduction, même partielle, ne peut être faite de ce site ni de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Droits de diffusion permanents accordés à Developpez LLC.