Pré-remplissage de sous-formulaires

Objectif : créer un formulaire de saisie des pointages avec pré-remplissage de son sous-formulaire.

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 pouvoir générer un tableau des pointages des employés pour chaque jour du calendrier.

Un formulaire principal indiquant la date et la période du jour concerné par le pointage, et un sous-formulaire pré-rempli, avec pour chaque employé ses heures ou son motif d'absence à renseigner.

Pour ce faire, après avoir décrit la méthode employée et avoir donné un aperçu du formulaire souhaité, on présentera dans l'ordre de leur création les différents objets de l'application :

  • tables nécessaires ;
  • requêtes ;
  • formulaires.

II. Description de la méthode

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.

III. Rendu final du formulaire de pointage

Il affiche les heures ou les absences des différents employés pour un jour donné.

Image non disponible
Aperçu du formulaire des pointages

On constate que les noms des employés sont déjà remplis avant la saisie des heures et des motifs d'absences.

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 txtDatePointage_AfterUpdate()
    RefreshPointages ' on rafraîchit le tableau des pointages après le choix de la date
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.