I. Introduction▲
L'objectif de cet article est d'expliquer, à l'aide d'une base exemple, comment créer une application Access destinée à gérer des interventions récurrentes.
Pour ce faire, après avoir donné un aperçu du résultat souhaité et avoir décrit la procédure de génération des interventions récurrentes, on détaillera la structure des différents objets de l'application exemple, dans l'ordre de leur création :
- tables nécessaires ;
- requêtes ;
- formulaires ;
- module M_GenererInterventions.
II. Contexte de la maintenance industrielle▲
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.
On supposera que ces interventions ne peuvent avoir lieu les dimanches et jours fériés.
III. Rendu final du formulaire principal▲
Il présente les interventions classées par ordre croissant des dates.
Les interventions peuvent être filtrées par période, client, technicien ou type d'intervention.
Nous décrivons par la suite la procédure de génération des interventions, et les objets nécessaires pour aboutir à ce résultat.
IV. Procédure de génération des interventions▲
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é.
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 :
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.
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.
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 :
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.
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.
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.
Private
Sub
cmbClient_AfterUpdate
(
)
RefreshListeInterventions ' rafraîchit la liste des interventions
End
Sub
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.
Private
Sub
cmbTechnicien_AfterUpdate
(
)
RefreshListeInterventions ' rafraîchit la liste des interventions
End
Sub
VII-B-4. zone de liste lstTypeIntervention▲
Elle permet de choisir un type d'intervention pour filtrer la liste des interventions.
Private
Sub
lstTypeIntervention_AfterUpdate
(
)
RefreshListeInterventions ' rafraîchit la liste des interventions
End
Sub
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.
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.
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.
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.
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.
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.
VII-C-2. Bouton de commande cmdAnnuler▲
Il permet d'annuler la saisie, et de fermer le formulaire.
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.
VII-C-4. Bouton de commande cmdSupprimerPeriodicite▲
Il permet de supprimer toutes les interventions de la périodicité, et de fermer le formulaire.
VIII. Module M_GenererInterventions▲
VIII-A. Description de quelques routines▲
Elles utilisent les fonctions Date et Heurefonctions Date et Heure :
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.
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