Apprendre à générer des interventions récurrentes dans Access

Objectif : apprendre à générer des interventions récurrentes dans un sous-formulaire Access.

Niveau requis : confirmé.

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

Article lu   fois.

L'auteur

Liens sociaux

Viadeo Twitter Facebook Share on Google+   

I. Introduction

L'objectif de cet article est de décrire, à l'aide d'un exemple, comment générer des interventions récurrentes dans un sous-formulaire Access.

Pour ce faire, après avoir décrit le contexte, 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 ;
  • module M_GenererInterventions.

II. Contexte

Dans l'industrie, le matériel nécessite d'être contrôlé régulièrement. À ce titre, les techniciens réalisent différents types d'intervention chez les clients :

  • de la maintenance préventive ;
  • de la maintenance corrective ;
  • des interventions urgentes ;
  • des dépannages ponctuels.

Ces opérations peuvent donc être périodiques ou ponctuelles.

Image non disponible
Maintenance industrielle

On supposera que ces interventions ne peuvent avoir lieu les dimanches et jours fériés.

III. Description du principe

On saisit une intervention en précisant si besoin sa périodicité (en jours, semaines, mois ou années). Puis, on valide la saisie, ce qui crée, suivant la périodicité, la liste des interventions espacées d'une certaine durée.

Résumé des différentes étapes

  • ouverture du formulaire de saisie ;
  • saisie de l'intervention et de sa périodicité ;
  • validation de la saisie et création de la liste des interventions suivant la périodicité.

IV. Rendu final du formulaire principal

Il présente les interventions classées par ordre croissant des dates.

Image non disponible
Aperçu du formulaire principal

Les interventions peuvent être filtrées par période, client, technicien ou type d'intervention.

Voici les objets nécessaires pour aboutir à ce résultat.

V. Tables

V-A. Tables relatives aux interventions

V-A-1. T_Intervention

Elle sert à enregistrer les données concernant les interventions.

Nom du champ

Type de données

Description

IDIntervention

Entier long

Identifiant de l'intervention

DateIntervention

Date/Heure

Date de l'intervention

HeureIntervention

Texte

Heure de l'intervention ou du rendez-vous

IDClient

Entier long

Identifiant du client chez qui a lieu l'intervention

IDTechnicien

Entier long

Identifiant du technicien qui réalise l'intervention

IDTypeIntervention

Entier long

Identifiant du type d'intervention

IDStatutIntervention

Entier long

Identifiant du statut de l'intervention

DetailIntervention

Texte

Détail de l'intervention

EstPeriodique

Booléen

Indique si l'intervention est périodique ou ponctuelle

IdPeriodicite

Entier long

Identifiant de la périodicité

V-A-2. T_Periodicite

Cette table permet d'enregistrer les valeurs concernant la périodicité de l'intervention.

Nom du champ

Type de données

Description

IDPeriodicite

Entier long

Identifiant de la périodicité

Periodicite

Numérique

Récurrence pour l'intervention, en jours, semaines, mois ou années

UniteTemps

Texte

Unité de temps : jour, semaine, mois ou année

DateDebutPeriodicite

Date/heure

Date de début de la périodicité

DateFinPeriodicite

Date/heure

Date de fin de la périodicité

Les tables T_Periodicite et T_Intervention sont reliées entre elles suivant une relation 1 à plusieurs, avec suppression en cascade.

V-A-3. T_TypeIntervention

Elle permet de sauvegarder les types d'intervention.

Nom du champ

Type de données

Description

IDTypeIntervention

Entier long

Identifiant du type d'intervention

TypeIntervention

Texte

Type de l'intervention

Exemples de types d'intervention

  • maintenance préventive ;
  • maintenance corrective ;
  • intervention urgente ;
  • dépannage.

V-A-4. T_StatutIntervention

Elle permet de sauvegarder les statuts des interventions.

Nom du champ

Type de données

Description

IDStatutIntervention

Entier long

Identifiant du statut de l'intervention

StatutIntervention

Texte

Statut de l'intervention

Exemples de statuts

  • en attente ;
  • en cours ;
  • terminée ;
  • annulée.

V-B. Tables supplémentaires

V-B-1. T_Client

Cette table permet de sauvegarder les informations relatives aux clients.

Nom du champ

Type de données

Description

IDClient

Entier long

Identifiant du client

NomClient

Texte

Nom du client

Adresse

Texte

Adresse du client

ComplementAdresse

Texte

Complément de l'adresse du client

TelClient

Texte

Numéro de téléphone du client

On conserve uniquement les champs importants pour notre exemple.

V-B-2. T_Technicien

Elle sert à enregistrer les données relatives aux techniciens.

Nom du champ

Type de données

Description

IDTechnicien

Entier long

Identifiant du technicien

NomTechnicien

Texte

Nom du technicien

PrenomTechnicien

Texte

Prénom du technicien

Là encore, on ne garde que les champs indispensables pour notre exemple.

VI. Requêtes

Afin de pouvoir afficher les interventions avec les informations sur les clients, les techniciens, et les périodicités, on a besoin de réaliser des requêtes.

VI-A. R_ListeInterventions

Elle relie les tables T_Intervention, T_TypeIntervention, T_Client et T_Technicien, et permet d'afficher la liste des interventions classées par date et par heure :

Image non disponible
Requête R_ListeInterventions en mode création

Ces liaisons permettent d'afficher les informations relatives au client, au technicien et à la périodicité de l'intervention dans le sous-formulaire.

VI-B. R_Intervention

Elle relie les tables T_Intervention, T_Client et T_Periodicite, et constitue la source du formulaire de saisie d'une intervention.

Image non disponible
Requête R_Interventions en mode création

Ces liaisons permettent d'afficher les informations relatives au client et à la périodicité de l'intervention sur le formulaire de saisie.

VII. Formulaires

Nous allons décrire les formulaires permettant d'afficher et de saisir les interventions.

VII-A. Sous-formulaire SF_ListeInterventions

Il s'affiche en mode feuille de données et contient les zones de texte reliées aux champs de la requête R_ListeInterventions.

Image non disponible
Formulaire SF_ListeInterventions en mode création

VII-A-1. Procédure sur double-clic des zones de texte

Elle permet d'ouvrir le formulaire F_Intervention sur l'intervention identifiée par la valeur contenue dans le champ IDIntervention :

Procédure sur double-clic
Sélectionnez
Private Sub IDIntervention_DblClick(Cancel As Integer)
    DoCmd.OpenForm "F_Intervention", , , "IDIntervention=" & Nz(Me.IDIntervention, 0)
End Sub

VII-B. Formulaire F_ListeInterventions

Il contient, en plus du sous-formulaire, des contrôles pour filtrer la liste des interventions selon certains critères.

Image non disponible
Formulaire F_ListeInterventions en mode création

VII-B-1. Procédure RefreshListeInterventions

Elle permet de filtrer la liste des interventions en fonction des choix effectués sur le formulaire.

Déroulé de la procédure

  • On constitue la chaîne SQL en fonction des choix.
  • On affecte la chaîne SQL à la propriété RecordSource du sous-formulaire.
procédure RefreshListeInterventions
Cacher/Afficher le codeSélectionnez

VII-B-2. liste déroulante cmbClient

Elle permet de choisir un client pour filtrer la liste des interventions en fonction du nom du client.

procédure sur après MAJ
Sélectionnez
    RefreshListeInterventions ' rafraîchit la liste des interventions

VII-B-3. liste déroulante cmbTechnicien

Elle permet de choisir un technicien pour filtrer la liste des interventions en fonction du nom du technicien.

procédure sur après MAJ
Sélectionnez
    RefreshListeInterventions ' rafraîchit la liste des interventions

VII-B-4. liste déroulante cmbTypeIntervention

Elle permet de choisir un type d'intervention pour filtrer la liste des interventions.

procédure sur après MAJ
Sélectionnez
    RefreshListeInterventions ' rafraîchit la liste des interventions

VII-B-5. zone de texte txtDateDebut

Elle permet de choisir une date de début pour filtrer la liste des interventions sur leur date.

procédure sur après MAJ
Sélectionnez
Private Sub txtDateDebut_AfterUpdate()

    If Me.cmbParamDate.Value = "Jour" Then ' si on choisit de filtrer sur un jour
        If Not IsNull(Me.txtDateDebut) Then
            Me.txtDateFin.Value = CDate(Me.txtDateDebut.Value) ' on copie la date de début dans la zone de texte txtDateFin
        Else ' sinon
            Me.txtDateFin.Value = Null ' on vide la zone de texte txtDateFin
        End If
    End If
   
    RefreshListeInterventions ' rafraîchit la liste des interventions
End Sub

VII-B-6. zone de texte txtDateFin

Elle permet de choisir une date de fin pour filtrer la liste des interventions sur leur date.

procédure sur après MAJ
Sélectionnez
Private Sub txtDateFin_AfterUpdate()
    RefreshListeInterventions ' rafraîchit la liste des interventions
End Sub

VII-B-7. bouton de commande cmdAjouterIntervention

Elle permet d'ouvrir le formulaire F_Intervention en mode ajout, pour créer une intervention.

procédure sur clic
Sélectionnez
Private Sub CmdAjouterIntervention_Click()
    ' Ouvre le formulaire F_Intervention en mode ajout
    DoCmd.OpenForm "F_Intervention", , , , acFormAdd
    ' Copie dans le formulaire F_Intervention la date affichée dans la zone de texte txtDateDebut comme date d'intervention
    Forms!F_Intervention!DateIntervention = CDate(Me.txtDateDebut)
End Sub

VII-B-8. Procédure sur ouverture

Elle permet d'afficher la liste des interventions du jour à l'ouverture du formulaire.

procédure sur ouverture
Sélectionnez
Private Sub Form_Open(Cancel As Integer)
    Me.txtDateDebut = Date ' copie la date du jour dans la zone de texte txtDateDebut
    Me.txtDateFin = Date ' copie la date du jour dans la zone de texte txtDateFin
    RefreshListeInterventions ' rafraîchit la liste des interventions en fonction des choix
End Sub

VII-C. Formulaire F_Intervention

Il permet de consulter ou de modifier une intervention après avoir double-cliqué sur une ligne dans la liste. Il est basé sur la requête R_Intervention, et ses contrôles sont liés aux champs de cette requête.

Image non disponible
Formulaire F_Intervention en mode création

Décrivons les boutons de commande permettant de valider l'intervention, d'annuler les modifications apportées au formulaire, ou de supprimer une intervention.

VII-C-1. Bouton de commande cmdValider

Il permet de valider la saisie, de mettre à jour la liste des interventions, et de fermer le formulaire.

Procédure sur clic
Cacher/Afficher le codeSélectionnez

VII-C-2. Bouton de commande cmdAnnuler

Il permet d'annuler la saisie, et de fermer le formulaire.

Procédure sur clic
Sélectionnez
Private Sub CmdAnnuler_Click()
    Me.Undo ' on annule la saisie
    DoCmd.Close acForm, "F_Intervention" ' on ferme le formulaire
End Sub

VII-C-3. Bouton de commande cmdSupprimer

Il permet de supprimer l'intervention active, et de fermer le formulaire.

Procédure sur clic
Cacher/Afficher le codeSélectionnez

VII-C-4. Bouton de commande cmdSupprimerPeriodicite

Il permet de supprimer toutes les interventions de la périodicité, et de fermer le formulaire.

Procédure sur clic
Cacher/Afficher le codeSélectionnez

VIII. Module M_GenererInterventions

VIII-A. Description de quelques routines

Elles utilisent les fonctions Date et Heurefonctions Date et Heure :

Extrait du module
Cacher/Afficher le codeSélectionnez

Le module contient aussi la fonction EstFerie permettant de savoir si une date est un jour férié ou pas. Elle est disponible dans la faqfonction estferie.

VIII-B. Procédure de génération des interventions récurrentes

Pour créer les interventions suivant la périodicité définie dans le formulaire de saisie, on a besoin d'écrire une procédure VBA.

Déroulé de la routine

  • Ouverture du recordset sur l'intervention affichée dans le formulaire de saisie.
  • Parcours des dates suivant la périodicité.
  • Pour chaque date, vérification si une intervention a déjà été créée pour cette périodicité.
  • Si ce n'est pas le cas, ajout de l'intervention dans la table.
Code pour générer les interventions périodiques
Cacher/Afficher le codeSélectionnez

La procédure publique peut-être appelée depuis n'importe quel module standard ou de formulaire.

IX. Téléchargement

La base exemple a été réalisée en collaboration avec geofrey.

La base exemplegenerer-interventions.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).

X. Remerciements

Un grand merci à toute l'équipe de Dvp et plus particulièrement à :

Pour m'avoir fourni l'idée de départ :
. geofrey

Pour ses remarques et sa relecture :
. claudeleloup

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

  

Copyright © 2016 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.