Macro de vérification insertion dans une base de donnée

Fermé
Odenelle Messages postés 102 Date d'inscription samedi 19 novembre 2011 Statut Membre Dernière intervention 18 mars 2016 - Modifié par Odenelle le 24/04/2015 à 01:33
Odenelle Messages postés 102 Date d'inscription samedi 19 novembre 2011 Statut Membre Dernière intervention 18 mars 2016 - 25 avril 2015 à 00:05
Bonjour,

Je vous écris car j'aimerais réaliser une opération sous ACCESS mais je ne sais pas comment faire.

C'est une BDD concernant une entreprise de location de voitures, sur une table LOUER qui sert à enregistrer les locations de véhicule :

Louer (CodeC#, NoImmat#, DateDebLoc, DateFinLoc, KmDeb, KmFin)

CodeC le code du client
NoImmat le numéro d'immatriculation du véhicule loué
DateDebLoc la date de début de la location
DateFinLoc la date de fin de la location
KmDeb le kilométrage du véhicule au début de la location
KMFin le kilométrage du céhicule à la fin de la location

Mon but est le suivant : j'aimerais vérifier à chaque insertion dans ma table louer que pour le numéro d'immatriculation concerné, le véhicule ne soit pas déja loué sur les dates demandées.

Par exemple si il existe déja un enregistrement pour l'immatriculation ZM-401-ZT entre le 04/05/2015 et le 05/05/2015, et que je veux enregistrer pour la même immatriculation une nouvelle location entre le 03/05/2015 et le 06/05/2015, ma macro bloquerait le nouvel enregistrement et génererait un message d'erreur.

J'ai essayé de la faire mais je n'aimais pas du tout le système d'édition j'ai rapidement abandonné.. Quelqu'un pourrait-il m'aider, me donner une piste ?

Ci-joint la BDD Access concernée :
https://mega.co.nz/#!khV0BIpS!0CVowFECsR6CBZhZAWb2rpGL5kTNM-h8cfiKU_OEYBc

3 réponses

Bonjour,
1) Je ne peux que te conseiller de lire attentivement de lire le dossier Mérise et les méthodes de construction des BDD.
2) Pour aller vite, il vaudrait mieux avoir une table Clients, une table Véhicules, une table Locations.
Après pour savoir les voitures disponibles, il te suffit d'avoir une requête qui détermine les voitures ni louées ni réservées, et inversement celles qui sont ou louées ou réservées. La seule difficulté est de trouver l'écriture du critère.
Bonne suite
0
Odenelle Messages postés 102 Date d'inscription samedi 19 novembre 2011 Statut Membre Dernière intervention 18 mars 2016 20
Modifié par Odenelle le 24/04/2015 à 14:17
Bonjour Tessel75, merci pour ta réponse.

Ma base contient en effet une table client, une table véhicule et une table location.
Je connais la méthode Merise (je suis en Master de Système d'information), et cette base a été modélisée par mes professeurs experts en Base de données.

L'idée de la requête pour remplir la liste déroulante j'y ai pensé mais le problème c'est que je dois comparer avec les dates de début et de fin de la location, date qui ne seront donc renseignée qu'une fois que l'utilisateur aura rempli le nouvel enregistrement...

Je crois donc que la seule façon de faire et d'écrire une macro pré-insertion sur ma table louer, c'est la que je coince :s
0
castours > Odenelle Messages postés 102 Date d'inscription samedi 19 novembre 2011 Statut Membre Dernière intervention 18 mars 2016
24 avril 2015 à 18:39
Bonjour
Il faudrait qu'une immatriculation d'un vehicule soit utilisée qu'une seule fois. Lorsque le vehicule est loué on ne le trouve que dans la location. lorsqu'il est disponible il revienne dans la table disponible. pour un programmeur vba cela doit etre possible
0
Odenelle Messages postés 102 Date d'inscription samedi 19 novembre 2011 Statut Membre Dernière intervention 18 mars 2016 20
24 avril 2015 à 19:25
Ok merci pour ton conseil castours
0
Re-...
Je maintiens que la seule méthode passe par une requête qui sélectionne les véhicules libres, à moins que tu cherches une méthode qui indique un par un si un véhicule est disponible ou non, mais cela va être très rapidement très mal-pratique. Pour le reste tu pourras toujours intégrer ta requête dans une procédure VBA ou une macro, mais tu n'en resteras pas moins obligé de passer par une requête comme je l'ai dit. J'avais eu une fois à sélectionner dans une liste, les personnes hospitalisées à un moment donné sachant qu'ont été saisies les dates d'entrée et de sortie. Ce n'est pas facile mais on y arrive en réfléchissant correctement et par essais successifs.
0
Odenelle Messages postés 102 Date d'inscription samedi 19 novembre 2011 Statut Membre Dernière intervention 18 mars 2016 20
Modifié par Odenelle le 24/04/2015 à 15:41
Re,
Oui je suis d'accord qu'a un moment donné il va falloir utiliser une requête pour récupérer les immatriculations des véhicules disponibles. Cette requête, je ne peux l'utiliser qu'une fois mes dates saisie pour pouvoir comparer, il va falloir jongler sur les conditions faire un truc du genre :

SELECT L.N°IMMAT
FROM LOUER L
WHERE (nouvelEnregistrement.DateDeb =< L.DateDeb And nouvelEnregistrement.DateFin =< L.DateDeb)
OR
(nouvelEnregistrement.DateDeb >= L.DateFin And
nouvelEnregistrement.DateFin >= L.DateDeb);

Seulement mon problème c'est surtout au niveau du VBA où de la macro je n'en ai jamais fais sous Access, et même si je connais le langage et je ne vois vraiment pas comment structurer, comment faire pour bloquer l'enregistrement et pour comparer mon n°IMMAT du nouvel enregistrement avec ceux que je récupérerai dans ma requête..
0
Re-...
Fais les choses dans l'ordre, svp!
Commence par la méthode de sélection des voitures libres. Après il sera grandement temps de te préoccuper du moyen d'entrer le véhicule choisi dans la liste des véhicules déjà loués ou réservés. Pour cela tu auras besoin d'un formulaire, à construire, et du code VBA pour ouvrir ce formulaire.
Mais dans l'immédiat, tu ne peux pas espérer quoique ce soit sans la requête de sélection.
nb: comme dit Castours, tu dois te débrouiller pour n'utiliser un identifiant de tes véhicules qu'une seule fois. Mais tu peux utiliser le N° Minéralogique aussi bien qu'un N°Auto, la seule chose importante est d'être sûr qu'il est rigoureusement unique pour chaque voiture.
Bonne suite
0
Odenelle Messages postés 102 Date d'inscription samedi 19 novembre 2011 Statut Membre Dernière intervention 18 mars 2016 20
24 avril 2015 à 19:26
ça marche je vais faire mon possible, merci pour le coup de main Tessel
0
castors > Odenelle Messages postés 102 Date d'inscription samedi 19 novembre 2011 Statut Membre Dernière intervention 18 mars 2016
24 avril 2015 à 23:48
Bonsoir
Il y a quelque temps, j'avais une base ou j'utilisai la case a cocher lors d'edition de cartes d'adhésion sur une liste d'adhérents, Lorsque la carte etait imprimée et cochée, je validai a l'aide d'un bouton action qui m'était a jour la table des adhérents avec cartes. Cette action, par une requete enlever l'adherent de la liste du faite qu'il etait cocher. Peut etre pourrais tu te baser sur ce principe.
0
Odenelle Messages postés 102 Date d'inscription samedi 19 novembre 2011 Statut Membre Dernière intervention 18 mars 2016 20
25 avril 2015 à 00:05
C'est sympa de proposer castors mais en fait je suis en pleine période d'examens et je ne peux plus consacrer de temps à ce projet :s, d'autant plus que mon prof m'a dit que vouloir faire cette vérif allait trop loin et qu'il préfère que l'on se concentre sur les partiels. Merci quand même et bonne continuation !
0