Tutoriel réalisé avec Access 2013
Une expression conditionnelle sur Access (ou expression booléenne) analyse un élément s’il est VRAI ou FAUX et renvoie un résultat.
Une expression conditionnelle peut être appliquée à une table, une requête ou un formulaire.
Pour ce tutoriel, vous retrouverez la base de données utilisée au bas de l’article.
SOMMAIRE
Créer une expression conditionnelle sur une table Access
Pour cet exemple, nous souhaiterions que la Date de démarrage saisie ne puisse pas être antérieure au 1er janvier 2013. Pour cela, ouvrez la Table Clients et passez en Mode création. Placez-vous sur le champ Date de démarrage et, dans les Propriétés du champ, à l’onglet Général, à la ligne Valide si, saisissez cette expression :
>=#01/01/2013#
À la ligne suivante, Message si erreur, indiquez le message à afficher dans la fenêtre qui apparaîtra en cas de saisie d’une date antérieure :
La date doit être ultérieure au 1er janvier 2013.
Passez en Mode feuille de données en acceptant d’enregistrer la table.
Créez un nouvel enregistrement avec une date ultérieure au 1er janvier 2013.
La date est bien supérieure à la condition : vous n’avez pas de message d’erreur.
Maintenant, créez un nouvel enregistrement avec une date antérieure au 1er janvier 2013.
Un message apparaît et vous empêchera de passer à un autre champ ou d’enregistrer cet enregistrement tant que le problème ne sera pas résolu.
Vous n’êtes pas obligé de saisir un message d’erreur, mais c’est plus agréable d’avoir un message clair et net sur la raison pour laquelle le champ n’est pas correct, plutôt que d’avoir ce message :
Créer une expression conditionnelle sur une requête Access
Pour cela, ouvrez la Requête État du dossier et allez dans le Mode création . Placez-vous sur un champ vide et indiquez l’expression suivante :
=VraiFaux([Etat du dossier] = "Validé" ; "Peut être contacté(e) par un commercial" ; "Ne pas contacter")
À noter que cette expression fonctionne un peu comme la formule SI d’Excel (si, alors, sinon) :
- État du dossier correspond au nom du champ comportant l’information nécessaire à l’expression conditionnelle ;
- Validé correspond à la valeur si vraie ;
- Peut être contacté(e) par un commercial correspond à ce qu’il y aura écrit dans le champ si la valeur est vraie ;
- Ne pas contacter correspond à ce qu’il y aura écrit si la valeur est différente de la valeur si vraie.
Assurez-vous que la case Afficher est cochée et cliquez ensuite sur Exécuter . Vous avez maintenant un nouveau champ nommé Expr1 que vous pouvez renommer Action en Mode création
en remplaçant simplement Expr1 par action.
Ceci est un exemple simple, mais, selon vos besoins, l’expression pourra être plus ou moins complexe.
Si par exemple, je souhaite accorder une remise à des clients dont le montant HT est supérieur à 500 €.
J’ouvre la Requête Remise en Mode création et l’expression devra être la suivante, sachant que le champ Remise accordable est un champ calculé dans la Table Factures :
VraiFaux([Total HT]>=500;[Total HT]+[TVA]-[Remise accordable];VraiFaux([Total HT]<499,99;[Total HT]+[TVA]))
Dans ce cas, le nouveau champ, que l’on peut renommer Total TTC, sera l’addition du Total HT, de la TVA et de la Remise si le Total HT est de 500 € ou plus, sinon, le calcul sera le Total HT + la TVA.
Il est important de ne pas mettre le même montant dans les 2 « morceaux » d’expression et de bien placer les signes plus grand que (>) ou plus petit que (<) car vous risqueriez d’obtenir un champ vide si le montant est de 500 € pile.
Créer une expression conditionnelle sur un formulaire Access
Une expression conditionnelle dans un formulaire fonctionne un peu comme une expression dans une table.
Ouvrez le Formulaire Clients, passez en Mode création et placez-vous sur le contrôle de la Date de démarrage, c’est-à-dire le cadre contenant la date de démarrage d’un client. Cliquez sur Feuille de propriétés
et, dans l’onglet Données (mais également accessible par l’onglet Toutes), saisissez, à la ligne Valide si, l’expression suivante :
>=#01/01/2013#
À la ligne suivante, Message si erreur, indiquez le message à afficher dans la fenêtre qui apparaîtra en cas de saisie de date antérieure :
La date doit être ultérieure au 1er janvier 2013.
Vous pouvez refermer la Feuille de propriétés et passer en Mode formulaire
. Cliquez sur
pour créer un nouvel enregistrement et entrez une date ultérieure au 1er janvier 2013.
La date est bien supérieure à la condition : vous n’avez pas de message d’erreur.
Maintenant, créez un nouvel enregistrement avec une date antérieure au 1er janvier 2013.
Un message apparaît et vous empêchera de passer à un autre champ ou d’enregistrer cet enregistrement tant que le problème ne sera pas résolu.
Ici aussi, vous n’êtes pas obligé de saisir un message d’erreur, à la place, vous aurez ce message :
Salut, outre les dates, ne pouvons-nous pas utiliser des chiffres ?
Par exemple, valide si : dans le champ numéro Fin #19995 est supérieur au champ, numéro Début 19994 # ?
Bonjour,
Oui, cela est possible tant que vous précédez bien l’expression du signe de supériorité.
Merci Lydia. Au début, j’avais des erreurs Illegal column-level constraint.
La solution était de mettre les conditions dans le proprety sheet.
Merci.
Bonjour,
J’aimerais savoir comment on convertit un chiffre en lettre sur Access et la création d’un comptoir pour différents vendeurs utilisant une base de données Access. Merci de votre aide qui est très précieuse.
Bonjour,
Pour votre première question, je vous invite à consulter cette page, car si je faisais un tutoriel ce ne serait qu’un copié-collé :
Pour votre seconde question, je vous invite à faire une demande de devis.
Bonjour,
Je suis très content de votre réponse à ma question, mais franchement je ne suis pas encore satisfait, car je suis un débutant sur Access donc ce code est très compliqué pour moi. Je ne sais même pas comment mettre ce code en application. De ce fait, je vous demande une fois de plus de m’aider pour le mettre en application ou même s’il y a un autre chemin plus simple. Parce que j’ai besoin de ça pour ma facture dont votre aide a été très utile pour sa réalisation.
Je vous remercie de votre soutien.
Bonjour,
Dans ce cas, faites une demande de devis, car il est hors de question que je fasse du plagiat sur mon blog.
PS : veuillez ne pas remplir le champ « Site internet » avec l’adresse de mon blog lorsque vous postez un commentaire. Ce champ est pour votre site si vous en avez un.
Bonjour,
Je voudrais imposer la fin d’une saisie c’est-à-dire qu’un message type « Votre saisie doit se terminer par « @blabla.fr » apparaisse, est-ce possible via la fonction « Message si erreur » ?
Sinon que me conseillez-vous ? J’ai déjà tenté le masque de saisie avec le code C mais lorsque la saisie est plus courte que les espaces réservés, ce n’est pas idéal.
Je vous remercie 🙂
Bonjour,
Avez-vous essayé les masques de saisie présents sur cette page ? Car le champ Message si erreur ne sera pas pris en compte s’il n’y a pas d’erreur.
Bonjour et merci pour ce blog !
Est-il possible d’effectuer une requête avec des sommes présentant différents critères ?
Je m’explique :
Ma requête me donne :
ANNÉE / MOIS / ZONE / Somme 1 / Somme 2 / Somme 3…
La somme 1 doit exclure un type de client.
La somme 2 n’exclut pas le type.
Le somme 3 doit exclure un autre type de client.
Bref, je ne veux pas ajouter le type de client à ma requête et souhaite obtenir directement les sommes avec les bons critères.
Est-ce possible ?
Merci encore pour votre travail très utile pour les débutants comme moi 🙂
Bonjour et merci Claire.
Malheureusement, si vous souhaitez filtrer, vous serez obligée d’ajouter le champ de « filtrage » à la requête. Toutefois, vous pouvez masquer ce champ en décochant la case pour ne pas l’avoir dans le résultat.
Bonjour,
Tuto très clair, j’ai cependant une interrogation.
J’ai une base avec des employés et des formations qu’ils évaluent à la fin. Pour y participer, ils font des demandes de formation qui peuvent être refusées. Est-ce que dans ma table Évaluation, je peux empêcher ceux qui n’ont pas eu de demandes accordées d’évaluer la formation sans passer par le mode requête comme dans votre vidéo ? En effet, la prof ne nous a pas parlé de ce type de requête, on a juste des tables. J’aimerais que quand je sélectionne un numéro de demande dans la table Évaluation, je ne puisse accéder dans le champ déroulant qu’a l’employé qui en est à l’origine.
Merci.
Bonjour,
Pourquoi ne pas créer une zone de liste déroulante dans un formulaire qui aurait comme contenu seulement les formations accordées à l’employé sélectionné dans une liste déroulante au préalable ?
Bonjour,
Je souhaiterais avoir de l’aide.
J’ai un champ qui s’appelle « formations » qui est configuré avec une liste déroulante contenant le nom de dix formations différentes.
J’aimerais que, lorsque l’on sélectionne, par exemple dans formations, la formation « Apprentissage Word », que, dans un champ juste à côté, s’affiche automatiquement le montant de cette dernière.
Chaque formation doit être reliée à un montant précis. Si je sélectionne, par exemple formations « Apprentissage Excel », hop un autre montant que je définis se met et ainsi de suite….
J’ai déjà configuré le champ formations, mais ne sait pas comment créer cette relation entre le nom de la formation et son prix.
C’est un peu comme quand, pour une commande, on sélectionne le nom d’un produit et que le prix unitaire s’affiche ensuite automatiquement.
Pouvez-vous m’aider ?
D’avance merci.
Bonjour,
Je vous invite à regarder le tutoriel sur la création de factures à partir de la création du sous-formulaire, car c’est le même principe.
Bonjour,
J’ai, dans un formulaire, un champ [ville] avec une zone de liste déroulante non limitative. Quelle expression dois-je utiliser pour appliquer une mise en forme conditionnelle lorsque la ville saisie n’appartient pas à la liste proposée (liste issue d’une table) ?
Merci.
Bonjour,
Dans ce cas, il faut passer par du VBA.
Je vous ai fait un petit exemple où le champ Frs est la liste déroulante dans mon formulaire et ID_Fournisseur_VA la valeur unique de chaque fournisseur dans la table fournisseurs (dans cet exemple, la couleur est bleue, mais vous pouvez mettre ce que vous souhaitez) :
Private Sub Frs_AfterUpdate()
If IsNull(DLookup("[ID_Fournisseur_VA]", "T_Fournisseurs_VA", "[ID_Fournisseur_VA]=" & [Frs])) Then
Frs.BackColor = vbBlue
End If
End Sub
Bonjour et merci d’avance,
Ma préoccupation est de savoir comment faire pour générer des expressions si la colonne concernée est sous forme calculée et non sous forme de requête de sélection.
Bonjour, désolée, je ne comprends pas la question.
Si le champ est déjà calculé, vous pouvez faire appel à lui et si le calcul est fait lors de la requête, il suffit d’utiliser son nom donné.
J’aimerais créer une requête pour me sortir les clients qui ont acheté produit X ou produit Y ou produit A ou produit B en 2018.
Les champs de produits dans la table sont des cases à cocher.
Vraifaux ([Annee] = "2018" Et [Produit X] = "Oui" Ou [Produit Y] = "Oui" Ou [Produit A] = "Oui" Ou [Produit B] = "Oui" ;"Oui";"Non")
Cela me donne Erreur. Comment je dois le rédiger comme il faut ?
Merci de votre aide.
Dans votre cas, il suffit simplement d’afficher les champs (année et produits), puis, sur la même ligne de critère, de mettre « 2018 » en année et « 1 » pour le produit X, puis, sur une nouvelle ligne de critère, de mettre « 2018 » toujours en année et « 1 » pour le produit Y, puis de faire de même pour les produits A et B.
Toutefois, l’erreur vient du fait que, pour des cases à cocher, on n’utilise pas « oui » et « non », mais 0 pour « non » et 1 pour « oui ».
Ça fonctionne !! Vous m’avez sauvé.
Merci énormément 🙂
Bonjour, votre site m’aide beaucoup en ce moment pour créer une grosse base de données pour remplacer l’ancienne sous Lotus Notes…
Je ne sais pas si je suis dans la bonne section, mais je n’arrive pas à écrire une expression qui changerait l’état d’une case option en fonction de la valeur d’un champ (pour un formulaire de lecture seule).
J’essaie d’écrire ça dans la feuille de propriété du contrôle de cette case option.
D’avance merci.
Bonjour,
Il faut le programmer sur mise à jour de l’autre champ avec une condition If (If le champ = … alors la case à cocher …).
Bonjour,
Je n’arrive pas à faire une condition si avec des horaires.
Quelqu’un pour m’aider !! Merci !!
Bonjour,
Je vous invite à poster votre formule et je corrigerai si nécessaire.