Access

Créer une centrale de réservations de salles

Dans ce didacticiel, nous allons voir comment peut fonctionner une centrale de réservations de salles, ou de terrains de sport.

Je suis parti de la base d'un centre sportif qui loue des terrains de badminton/squash/tennis à l'heure, mais cet exemple est transposable à toute forme de location/prêt/réservation horaire de terrains/salles et même objets divers, comme des jet-skis ou autres choses se louant à l'heure ou même des fractions d'heures.

Vous pouvez télécharger la base de données Access 2010 "reserviciel.accdb" en cliquant avec le bouton droit de votre souris sur ce lien, afin d'enregistrer cette base de données où vous désirez sur votre PC.

 
Sommaire

Mode d'emploi

L'idée générale est de pouvoir très rapidement et très facilement réserver un terrain de badminton : le client est au téléphone, il demande s'il peut réserver un terrain tel jour, telle heure, et on doit pouvoir, d'un simple coup d'oeil, lui dire si oui, ou si non, et si non, lui proposer une autre heure ou un autre jour sans trop réfléchir, et sans risque d'erreur. Les annulations de réservations doivent être aussi simnples à gérer.

Ecran d'accueil

Lorsque vous ouvrez reserviciel.accb, vous arrivez tout de suite sur la centrale des réservations :

Explication sommaire des éléments

Ajout d'une réservation

Pour réserver un terrain, il vous suffit de choisir un membre dans la liste déroulante correspondant au terrain, à l'heure et au jour désiré. Dans cet exemple, je réserve le terrain numéro 4, à 10 heures, jeudi 13 mars 2014, pour Jacques Descombes :

La liste devient automatiquement rouge :

 

Si je désire savoir qui a réservé quel terrain pour quelle heure, je n'ai qu'à recliquer sur la petite flèche de la liste déroulante. Dans cet exemple, je vois que le vendredi 14 mars, à 10 heures, le terrain N° 3 a été réservé par l'Ecole Privée des Lutins.

Et vous recliquez sur la flèche de la liste déroulante pour la fermer sans rien changer.

Il serait très facile de changer le "réserveur" : il vous suffirait de sélectionner un autre membre à la souris.

Suppression d'une réservation

Je n'ai pas pourvu ce programme de toutes les fonctionnalités possibles, afin de le laisser simple à comprendre. Par exemple, vous conviendrez qu'il est dangereux de pouvoir supprimer une réservation sans aucun message d'avertissement, et sans aucun moyen de revenir en arrière ! Faites donc très attention si vous désirez l'utiliser professionnellement.

Si vous désirez supprimer une réservation, il suffit de double-cliquer dans la partie rouge. Par exemple, ici, je supprime la réservation du terrain N°4 du jeudi 13 mars 2014 à 10H :

Et voilà le terrain qui redevient disponible :

Gestion de la disponibilité des terrains

Avant de tester la disponibilité des terrains, réservez à nouveau le terrain 4, le 13 mars 2014 à 10H pour Jacques Descombes.

Vous voyez que certaines plages sont indisponibles (tout le lundi, le terrain 2 tout le mardi, etc.). Vous pouvez très facilement gérer ces plages en cliquant sur le bouton :

Vous arrivez alors sur ce formulaire :

La seule chose qu'on peut changer dans ce formulaire, ce sont les cases à cocher de gauche. Constatez que certaines cases sont cochées, et pas d'autres. C'est très simple : les cases cochées représentent les terrains réservés (jeudi 13..3.2014, 10:00, terrain 4 pour Jacques Descombes), ou libres (Toujours le 13.3 : à 11h, le terrain 4, à 12h le terrain 1, à 12h le terrain 2, etc.)

Toutes les lignes dont la case n'est pas cochée représentent des terrains indisponibles (En gris).

Essayez : enlevez cette coche, et fermez :

Et voilà, vous venez de rendre le terrain indisponible.

 

Par contre, il est impossible de rendre indisponible un terrain déjà réservé. Essayez de retirer la coche du terrain 4, jeudi 13 mars à 10H, et vous aurez un message d'erreur, ce qui est logique.

Admettons que ce terrain soit réellement devenu indisponible (par exemple parce que le filet s'est cassé), voici la marche à suivre :

  1. Fermez ce fomulaire F_DispoReservation, afin de vous retrouver dans F_Reservation
  2. Double-cliquez sur la partie rouge de la réservation de Jacques Descombes du jeudi 13 mars à 10 heures, sur le terrain 4 afin de supprimer sa réservation
  3. Ca n'a rien à voir avec Access, mais prévenez ce monsieur Descombes que sa réservation a été annulée
  4. Retrournez dans le formulaire F_DispoReservation en cliquant sur le bouton "Disponibilité des terrains"
  5. Enlevez la coche de ce terrain 4, jeudi 13 mars à 10 heures, car vous pouvez, maintenant que le terrain n'est plus réservé
  6. Fermez ce formulaire F_DispoReservation, et voilà : le terrain n'est plus disponible et Monsieur Descombes a été proprement annulé de cette réservation.

Fonctionnement technique

Je me suis bien cassé la tête pour trouver une technique de mise en tableau de ce calendrier de réservations sans que ce soit terriblement compliqué. J'aurais pu choisir Excel pour créer ce tableau, car ca paraît esthétiquement plus adéquat, mais Access m'a finalement paru plus simple à mettre en oeuvre, avec moins de risques d'erreur lors des réservations proprement dites.

Il y a un formulaire principal : F_Reservation qui ne cointient pas moins de ... trente deux sous-formulaires ! Oui : 32 ! En fait, les 32 sous-formulaires sont tous basés sur le même formulaire : F_ReservationSF.

Pourquoi 32 ? Parce qu'il y a 4 terrains disponibles dans mon exemple, et 8 jours de réservations visibles. 4 X 8 = 32. Voici ce que ça donne en mode créatuion de F_Reservation :

Si vous fermez F_Reservation, et que vous double-cliquez sur F_ReservationSF ("SF" pour me rappeler que c'est un Sous-Formulaire) pour l'ouvrir, vous voyez ceci :

C'est à dire un formulaire qui contient juste une suite de listes déroulantes dont certaines sont vertes, d'autres rouges, ou d'autres encore inactives. Vous aurez deviné qu'elles représentent les réservations des terrains.

Si vous allez en mode création, vous ne verrez plus alors grand chose : une seule pauvre petite liste ! J'ai demandé l'option "Formulaires continus pour qu'elle se multiplie l'une en dessous de l'autre sur toute la hauteur de l'écran, comme ceci :

Je suis arrivé à faire les listes déroulantes en vert, rouge et désactivées grâce à "Mise en forme conditionnelle" (qui existe aussi dans Excel, d'ailleurs). C'est à dire que, toujours en mode création, j'ai commencé par demander à ce que cette petite liste déroulante soit verte, tout simplement. J'ai donc simplement cliqué dessus, et j'ai demandé le vert, comme ceci :

Ensuite, j'ai demandé la mise en forme conditionnelle :

Ici, on comprend assez facilement ce qui se passe : Si l'IDMembre n'est pas Null, alors, peindre en rouge. IDMembre (Identification d'un membre), c'est le numéro du membre qui a réservé. Si pour tel terrain, tel jour, telle heure, il n'y a pas de membre, c'est à dire que l'ID membre n'est pas renseigné, alors, il est vide (Null).

Ensuite, deuxième chose à vérifier : est-ce que le champ Dispo (Terrain disponible) est faux (C'est à dire non-coché). si c'est le cas, alors, il faut désactiver la liste déroulante pour ne pas qu'on puisse sélectionner un membre.

Bon, je ne vous ai pas encore parlé des champs Dispo et IDMembre, parce qu'il faut bien commencer par quelque part, mais ça va venir. ne vous inquiétez pas.

Regardez le détail de la mise en forme rouge :

L'idée est de mettre le champs en écriture rouge sur fond rouge dans le cas ou le terrain est réservé.

Vous me direz que c'est un peu bête : on ne voit rien ! ne vaudrait-il pas mieux mettre du noir sur fond rouge ? ... En fait, c'est mieux qu'on ne voie rien, parce que la zone visibe de la liste déroulante est tellement étroite (à cause du fait qu'il faudra la multiplier 32 fois sur toute la largeur de l'écran, je vous le rappelle), qu'il vaut mieux ne voir que du rouge qu'un caractère et demi qui ne voudront rien dire.

Ensuite, on choisit "Expression" dans la liste de gauche. par défaut, lorsque vous allez dans la mise en forme conditionnelle, il vous choisit , avec d'autres options à droite. Ca, ça marche quand on veut colorer notre champs dans des couleurs différentes selon sa propre valeur. Nous, c'est différent, on veut colorer la liste déroulante en fonction non pas de son propre contenum, mais en fonction du contenu d'autres champs ! (En fonction d'IDMembre dans notre cas). C'est pourça qu'on choisit "Expression", et qu'on doit se taper un truc bien compliqué : Pas (EstNull([IDMembre])), en faisant bien attention de ne pas oublier une parenthèse, ni de faire une faute, style oublier un "l" à "Null" !

Concernant la mise en "inactivité" de la liste déroulante, c'est sur cette icone qu'il faut cliquer :

Afin de voir tous les champs disponibles (mais non visibles) de de formulaire F_ReservationSF, il suffit de cliquer ici :

Vous reconnaissez "Dispo" que nous avons utilisé dans la mise en forme conditionnelle.

mais que sont tous les autres champs Dates, heures, terrain, IDReservation, dateTerrain et NomJourdate, et à quoi servent-ils puisqu'ils n'apparaissent pas dans le sous-formulaire ? Ils ne servent en fait qu'à établir le lien avec F_Reservation.

Mais allons doucement : pour en savoir plus, regardons
la source de notre formulaire :

Vous arrivez dans la requête-source de notre formulaire :

Oula ! QU'est-ce que c'est que ce bin's ! C'est quoi ces trois flèches qui relient deux tables ?

On va le voir. Avant toute chose, lancez cette requête en mode saisie de données :

Ca nous permet de comprendre le contenu de cette requête :

Dates, heures et terrains : on comprend assez facilement qu'il s'agit de toutes les dates, pour chaque date, toutes les heures possibles, et pour chaque dates et heures, tous les terrains possibles.

Grâce au fait qu'en mode création, vous voyez que j'ai explicitement demandé le tri de gauche à droite dates, PUIS Heures, PUIS terrain, ça me permet de visualiser le contenu de cette requête dans un ordre qui me convient parfaitement :

La case à cocher Dispo sera cochée si le terrain est disponible, ou décochée s'il n'est pas disponible (Congé, filet cassé, réservé pour une école spéciale, ...). C'est ce champ que nous avons utilisé dans notre mise en forme condictionnelle.

Ensuite, IDReservation est l'identifiant unique de chaque réservation. Ce champ ne nous servira que lorsque nous supprimerons une réservation existante, il n'a pas d'autre réelle utilité... On peut éventuellement le communiquer à la personne qui réserve pour ajouter une vérification supplémentaire, mais c'est tout.

IDMembre est le numéro de membre. Comment se fait-ce que l'IDTReservation est un chiffre, et que IDmembre est un nom et un prénom ? En fait, IDMembre est aussi un chiffre, mais j'ai créé une liste déroulante qui m'a permis de le masquer. Nous allons y revenir.

DateTerrain est

 

XXXXXXXXXXXXXXXXXXX

 

XML
<customUI xmlns="http://schemas.microsoft.com/office/2009/07/customui"> <ribbon> <tabs> <tab id="ViveLeRuban" label="Mes fruits aussi"> </tab> </tabs> </ribbon> </customUI>