Générer la disponibilité du matériel de location dans Access

Objectif : générer la disponibilité du matériel de location dans un formulaire Access.

Niveau requis : confirmé.

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

Article lu   fois.

L'auteur

Liens sociaux

Viadeo Twitter Facebook Share on Google+   

I. Introduction

Dans une gestion de stock classique, on souhaite généralement déterminer, pour chaque article, sa quantité disponible en fonction des mouvements (entrées/sorties) effectués précédemment sur ce stock. Dans notre cas, nous souhaitons connaître les quantités de matériels disponibles dans le futur, en fonction des locations déjà planifiées.

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

II. Contexte

Dans un magasin de location de matériel, les articles sont loués sur une certaine période, mais les employés ont besoin de connaître, avant d'attribuer à un client un nombre d'unités d'un type de matériel, sa disponibilité durant cette phase.

Image non disponible

III. Description du principe

L'objectif est d'afficher dans un formulaire le nombre d'unités disponibles par matériel et par période.

Pour ce faire, on enregistre dans une table les jours compris dans la période choisie, puis on évalue la quantité de matériels loués pour chacun des jours. On retranche ensuite ces quantités de matériels au nombre d'unités en stock au départ pour obtenir le nombre d'unités disponibles par jour.
Enfin, on sauvegarde, pour chaque matériel et chaque période, ses quantités disponibles.

Résumé des différentes étapes

  • Enregistrement dans la table T_Calendrier des jours compris dans la période choisie.
  • Évaluation dans la requête R_MaterielLoueJour de la quantité de matériels loués pour chacun des jours.
  • Retranchement dans la requête R_MaterielDispoJour des quantités de matériels loués au nombre d'unités en stock au départ.
  • Enregistrement dans la table T_PeriodeDispo, pour chaque matériel, de ses quantités disponibles par période.
  • Enfin, affichage du résultat dans le sous-formulaire.

L'affichage des disponibilités dépend de la période choisie sur le formulaire principal.

IV. Rendu final du formulaire

Le formulaire affichant les disponibilités du matériel :

Image non disponible
Aperçu du formulaire F_DispoMateriel

Il permet de visualiser, pour le matériel et la période choisis, la quantité disponible par phases successives.

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

V. Tables

V-A. Tables de la base

V-A-1. T_Materiel

Cette table permet de sauvegarder les données relatives au matériel.

Nom du champ

Type de données

Description

IDMateriel

Entier long

Identifiant du matériel

RefMateriel

Texte

Référence du matériel

DesignationMateriel

Texte

Désignation du matériel

QteStock

Entier long

Quantité en stock

On conserve uniquement les champs utilisés dans notre exemple.

V-A-2. T_Location

Elle sert à sauvegarder les informations sur la location du matériel.

Nom du champ

Type de données

Description

IDLocation

Entier long

Identifiant de la location

IDClient

Entier long

Identifiant du client

dtDebutLoc

Date/Heure

Début de la location

dtFinLoc

Date/Heure

Fin de la location

V-A-3. T_DetailLocation

Elle permet d'enregistrer le détail de la location du matériel.

Nom du champ

Type de données

Description

IDDetailLocation

Entier long

Identifiant du détail de la location

IDLocation

Entier long

Identifiant de la location

IDMateriel

Entier long

Identifiant du matériel loué

QteMateriel

Entier long

Quantité louée

Si vous ne disposez que d'un seul article par référence, alors vous pouvez mettre 1 comme valeur par défaut pour le champ QteMateriel. Dans ce cas la quantité disponible par article ne peut prendre que les valeurs 0 ou 1.

V-B. Tables temporaires

Pour sauvegarder les dates des jours du calendrier et les disponibilités du matériel, nous aurons besoin de quelques tables.

V-B-1. T_Calendrier

Elle contient la liste des jours compris dans la période choisie sur le formulaire.

Nom du champ

Type de données

Description

dtCalendrier

Texte

Date du jour compris dans le calendrier

On va utiliser une procédure VBA pour alimenter dynamiquement cette table.

V-B-2. T_PeriodeDispo

Elle sert à enregistrer les quantités de matériels disponibles par période.

Nom du champ

Type de données

Description

IDPeriode

Entier long

Numéro d'ordre de la période

IDArticle

Entier long

Indice de l'article

dtDebutPeriode

Date/Heure

Date de début de la période

dtFinPeriode

Date/Heure

Date de fin de la période

QteDispo

Entier long

Quantité de matériel disponible pour la période

Là encore, on va utiliser une procédure pour alimenter dynamiquement cette table.

VI. Requêtes

Afin de pouvoir afficher pour chaque période le matériel disponible, on a besoin de réaliser quelques requêtes.

VI-A. R_DetailLocation

Cette requête relie simplement les tables T_Location, T_DetailLocation et T_Materiel.

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

VI-B. R_MaterielLoueJour

Cette requête réalise le produit cartésien entre la table T_Calendrier et la requête R_DetailLocation, pour afficher les quantités de matériels loués par jour.

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

On constate que la requête comprend, dans la partie encadrée, un champ calculé que nous allons détailler.

Champ calculé affichant la quantité de matériel louée
Sélectionnez
QteLouee: -[R_DetailLocation].[QteLouee]*([dtCalendrier] Entre [dtDebutLoc] Et [dtFinLoc])

Cette formule renvoie la quantité louée à la date du calendrier, si cette date est comprise dans la période de location (entre [dtDebutLoc] et [dtFinLoc]), sinon elle renvoie zéro.

Champs concernés :

  • [R_DetailLocation].[QteLouee] : champ affichant la quantité de matériel loué sur cette période ;
  • [dtCalendrier] : champ affichant la date du jour du calendrier ;
  • [dtDebutLoc] : champ indiquant la date de début de la location ;
  • [dtFinLoc] : champ indiquant la date de la fin de la location.

VI-C. R_MaterielDispoJour

Cette requête « regroupement » basée sur la requête précédente affiche les quantités de matériels disponibles par matériel et par jour.

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

On constate que la requête comprend dans la partie expression un champ calculé que nous allons détailler.

VI-C-1. Expression donnant le nombre d'unités disponibles

Nous avons utilisé dans la requête les fonctions de regroupement Premier et Somme :

Formule donnant la quantité de matériel disponible
Sélectionnez
QteDispo: Premier([QteStock])-Somme([QteLouee])

Pour obtenir la quantité disponible à une date donnée, on retranche la somme des quantités louées pour ce jour à la quantité en stock au départ.

Champs concernés :

  • [QteStock] : champ indiquant la quantité de l'article en stock au départ ;
  • [QteLouee] : champ indiquant la quantité de matériel loué.

VI-D. R_MaterielDispoPeriode

Cette requête reliant les tables T_PeriodeDispo et T_Materiel affiche les quantités de matériels disponibles par période.

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

On constate que la requête comprend dans la partie encadrée des champs calculés que nous allons détailler plus loin.

VI-D-1. Expression donnant le nombre d'unités disponibles

Formule donnant la quantité de matériel disponible
Sélectionnez
QteDispo: Nz([Qte];[QteStock])

Champs concernés :

  • [QteStock] : champ indiquant la quantité de l'article en stock au départ ;
  • [QteLouee] : champ indiquant la quantité de matériel loué.

La fonction Nz renvoie la valeur du champ [QteStock] si le champ [QteLouee] contient une valeur nulle.

VI-D-2. Champ calculé indiquant la date de début de la période

La formule donnant la date de début de la période
Sélectionnez
dtDebutPeriode: Nz(T_PeriodeDispo.[dtDebutPeriode];[txtDateMini])

Champs concernés :

  • T_PeriodeDispo.[dtDebutPeriode] : champ indiquant la date de début de la période ;
  • [txtDateMini] : paramètre affichant la date de début de la recherche.

La fonction Nz renvoie la valeur du paramètre [txtDateMini] si le champ date dtDebutLoc contient une valeur nulle.

VI-D-3. Champ calculé indiquant la date de fin de la période

Formule donnant le début de la période
Sélectionnez
dtFinPeriode: Nz(T_PeriodeDispo.[dtFinPeriode];[txtDateMaxi])

Champs concernés :

  • T_PeriodeDispo.[dtFinPeriode] : champ indiquant la fin de la période ;
  • [txtDateMaxi] : paramètre donnant la date de fin de la recherche.

La fonction Nz renvoie la valeur du paramètre [txtDateMaxi] si le champ date T_PeriodeDispo.[dtFinPeriode] contient une valeur nulle.

VII. Formulaires

VII-A. Sous-formulaire SF_DispoMateriel

Il est lié à la requête R_MaterielDispoPeriode et ces contrôles sont donc liés aux champs de cette requête.

VII-B. Formulaire F_DispoMateriel

Nous allons décrire le formulaire qui affiche la disponibilité du matériel par période.

Image non disponible
Formulaire F_DispoMateriel en mode création

On constate que le programme permet de visualiser, pour le matériel et la période choisis, sa quantité disponible par phase.

En plus du sous-formulaire, il comporte donc plusieurs contrôles.

VII-B-1. Les contrôles paramètres

Sur la partie haute du formulaire se trouvent les contrôles paramètres pour la recherche des disponibilités :

  • [txtDateMini] : zone de texte indiquant le début de la période de recherche ;
  • [txtDateMaxi] : zone de texte affichant la fin de la période ;
  • [cmbMateriel] : zone de liste déroulante pour choisir le matériel concerné.

VII-B-2. Bouton de commande cmdActualiser

Il permet de générer les disponibilités en fonction de la période choisie, et de mettre à jour le sous-formulaire :

Procédure sur Clic
Sélectionnez
Private Sub CmdActualiser_Click()
    ' génère les dates comprises dans la période choisie
    MajPeriodesDispos CDate(Me.txtDateMini), CDate(Me.txtDateMaxi)
    Me.SF_Disponibilites.Requery ' actualise le sous-formulaire
End Sub

VII-B-3. Procédure sur ouverture du formulaire

Elle permet de générer les périodes de disponibilités sur les quinze prochains jours, puis de mettre à jour le sous-formulaire :

Procédure sur Clic
Sélectionnez
Private Sub Form_Open(Cancel As Integer)
    
    ' génère les dates comprises dans la période choisie
    MajPeriodesDispos CDate(Me.txtDateMini), CDate(Me.txtDateMaxi)
    Me.SF_Disponibilites.Requery ' actualise le sous-formulaire
End Sub

VIII. Module M_GenererDispo

VIII-A. Procédure MajCalendrier

Pour mettre à jour la source de données du sous-formulaire, on a besoin d'écrire une procédure qui ajoute dans la table T_Calendrier les dates comprises dans la période choisie sur le formulaire :

Procédure MajCalendrier
Cacher/Afficher le codeSélectionnez

VIII-B. Procédure MajPeriodesDispos

Elle permet d'ajouter dans la table T_PeriodeDispo les périodes successives de disponibilité pour chaque article :

Procédure MajPeriodesDispos
Cacher/Afficher le codeSélectionnez

IX. Adaptation à un cas plus simple

Si vous souhaitez gérer les locations à l'unité, comme pour louer des chambres d'hôtel, il suffit de mettre comme valeur par défaut 1 pour la quantité en stock et la quantité louée de matériel. Dans ce cas, si le matériel est disponible pour une période donnée, la colonne quantité indiquera 1, sinon elle affichera 0.

X. Téléchargement

La base exemplegenerer-materiel-dispo.zip est au format Access accdb.

Elle a été réalisée en collaboration avec grpoirier.

Pour faciliter les tests et assurer sa portabilité, la base exemple n'utilise pas de composants externes à Access (ActiveX ou autres).

XI. Remerciements

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

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

Pour ses remarques et conseils avisés :
. claudeleloup

Pour leur relecture :
. milkoseck
. claudeleloup

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

  

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