Pour partager cette vidéo sur les réseaux sociaux ou sur un site, voici son url :
Sujets que vous pourriez aussi aimer :Contrôle des saisies sans code VBA
Dans cette
formation Access, nous proposons d'aborder des techniques capables d'alerter l'utilisateur au cours de la frappe, en cas de saisie incohérente, par rapport aux données de la base. Sur le moule de l'
application de facturation avec gestion des stocks que nous avions conçue en VBA Access, nous proposons de contrôler la saisie de la quantité commandée pour chaque article, selon la quantité disponible en stock.
Dans l'exemple ci-dessus de l'application finalisée, l'utilisateur saisit une quantité commandée supérieure à la quantité disponible en stock, pour l'article désigné. L'
application Access ne peut donc autoriser la commande. A validation de la saisie, nous proposons de déclencher deux alertes. Tout d'abord, une boîte de dialogue doit surgir pour adresser un message explicite. Bien entendu, ce message ne doit apparaître que lorsque la quantité commandée dépasse la quantité en stock. Il s'agit d'une
gestion conditionnelle que nous allons découvrir sans l'appui du code VBA. Ensuite, l'arrière-plan du formulaire doit se parer d'une couleur rouge. Cette symbolique confirmera sans ambiguïté à l'utilisateur, qu'il doit corriger sa saisie pour que la commande soit honorée.
Sources et présentation de la problématique
Pour ne pas avoir à reconstruire toute l'application et concentrer nos travaux sur l'étude des techniques capables de contrôler la saisie au cours de la frappe, nous proposons de récupérer une base de données existante. Il s'agit de l'application de facturation simplifiée, avec un formulaire préconçu et organisé.
Cette
base de données est constituée de quatre tables reliées entre elles , comme en atteste le volet des objets Access, sur la gauche de la fenêtre. La table Detail_temp est une table temporaire utilisée dans l'application finale, pour mémoriser le détail des commandes en cours. Le
formulaire Validation_commande est conçu sur les tables liées. C'est lui qui permet de définir les articles achetés pour un client désigné.
- Double cliquer sur le formulaire Validation_commande pour l'exécuter,
- A l'aide de la liste déroulante Réf. Client, choisir un numéro, le 6 par exemple,
Toutes les informations attachées à cet identifiant unique sont instantanément importées dans les champs prévus à cet effet.
- A l'aide de la seconde liste déroulante Réf. Produit, choisir un code article, le b003 par exemple,
Le constat est le même, toutes les données attachées à la référence de l'article sont rapatriées dans les champs prévus à cet effet. Ces informations sont respectivement issues des
tables Clients et Catalogue. Ce sont des codes Visual Basic Access qui accèdent aux tables pour extraire les données correspondant aux choix de l'utilisateur. Vous pouvez le constater grâce au
raccourci clavier ALT + F11. Ce dernier permet d'afficher l'
éditeur de code VBA Access qui dévoile la présence des procédures.
Nous sommes en train de réaliser la commande du client défini avec la première liste déroulante. Telle que le propose l'
application de facturation finalisée, l'utilisateur doit ensuite définir la quantité pour chaque article. Dès lors, d'autres produits peuvent être ajoutés jusqu'à validation de la commande.
- Dans la zone Qté commandée, saisir 600,
- Puis, enfoncer la touche Tabulation pour valider l'information,
Comme vous le constatez, rien ne se produit. Aucune alerte n'est déclenchée. Pourtant, la quantité demandée est supérieure à la quantité disponible en stock. En conséquence, la commande ne peut être validée et l'utilisateur doit en être averti. Il doit corriger la quantité et proposer une commande moins importante.
Alerte visuelle à validation de saisie
Même si l'origine du problème paraît évidente, on n'est jamais trop prudent. Nous proposons de remplir automatiquement le fond du formulaire, à l'aide d'une couleur critique. Ce remplissage ne doit s'appliquer que lorsque la quantité saisie dépasse celle des stocks. Pour cela, nous devons exploiter la
mise en forme conditionnelle que nous avions mise en oeuvre dans la
formation VBA Access pour filtrer et trier les données.
- Sur la gauche du ruban Accueil, cliquer sur la flèche du bouton Affichage,
- Dans la liste, choisir Mode création,
Nous affichons ainsi le
formulaire en mode conception. Ce mode permet d'organiser les différents contrôles et de les paramétrer. La
formation sur les formulaires Access nous avait appris à réaliser des personnalisations affinées.
- Cliquer sur le rectangle constituant l'arrière-plan de la partie supérieure du formulaire,
- Dans le ruban contextuel Création, cliquer sur le bouton Feuille de propriétés si cette dernière n'est pas visible,
Comme l'illustre la capture ci-dessus, ce rectangle n'est autre qu'une
zone de texte, contrairement à l'arrière-plan du sous formulaire. La raison est simple. Un
format dynamique ne peut pas être appliqué à tout type de contrôle. La
zone de texte est dédiée. Nous l'avons simplement basculée en arrière-plan grâce au
ruban Organiser. Puis, nous avons réglé sa
propriété Activé sur
non afin qu'elle ne puisse pas être sélectionnée.
Une
mise en forme conditionnelle consiste à définir un
critère selon lequel des attributs de mise en valeur doivent se déclencher automatiquement, pour le contrôle désigné. Pour la zone de texte sélectionnée, si la valeur du
contrôle qte_commandee est supérieure à la valeur du
contrôle Qte_stock, une couleur de fond rouge doit apparaître. Le cas échéant, l'arrière-plan ne doit pas être modifié. Il s'agit bien d'attributs dynamiques consistant à déclencher des alertes visuelles. Pour réaliser ces réglages, la
zone de texte bg doit être sélectionnée.
- Cliquer sur l'onglet contextuel Format en haut de la fenêtre Access pour activer son ruban,
- Sur la droite du ruban, cliquer sur le bouton Mise en forme conditionnelle,
- Dans la boîte de dialogue qui apparaît, cliquer sur le bouton Nouvelle règle,
- Dans la boîte de dialogue qui suit, choisir le type de règle suivant :
Vérifier les valeurs de l'enregistrement actif ou utiliser une expression
- Dans la zone Mettre en forme uniquement les cellules où, déployer la première liste déroulante,
- Dans les suggestions, choisir Expression,
En effet, il ne s'agit pas de comparer l'information du contrôle actif avec une valeur fixe. Nous devons comparer sa donnée avec celle du
champ Qte_stock. Nous devons donc bâtir l'expression du critère.
- Cliquer alors dans la zone de saisie de l'expression située sur sa droite, pour l'activer,
- Puis, saisir le critère suivant :
[qte_commandee]>[Qte_stock]
Nous aurions pu exploiter le petit bouton placé sur la droite de la zone de saisie, afin de déclencher le
générateur d'expression. Ce dernier permet de bâtir le critère en sélectionnant les champs listés dans l'arborescence proposée. Nous préférons ici taper directement leur nom. Comme vous le savez, dans les
expressions Access, les noms de champs ou de contrôles doivent être spécifiés entre crochets.
Si ce critère est vérifié, la quantité demandée est trop importante par rapport à la quantité disponible. L'utilisateur doit en être alerté. Nous devons pour cela associer des réglages de mise en forme spécifiques. Une couleur de remplissage suffira.
- Sur la partie inférieure de la boîte de dialogue, cliquer sur la flèche du bouton Couleur d'arrière-plan (Pot de peinture),
- Dans la liste, choisir un fond rouge plutôt pâle,
La capture ci-dessus résume les réglages opérés pour déclencher la
mise en forme conditionnelle, si la saisie de la quantité n'est pas conforme.
- Valider ces réglages en cliquant sur le bouton Ok,
Nous sommes de retour sur la première boîte de dialogue, celle du
Gestionnaire de règles de mise en forme conditionnelle. Elle rappelle toutes les règles de
format dynamique en vigueur. En effet, Ã l'instar d'
Excel, plusieurs règles de
mise en forme conditionnelle peuvent se cumuler pour un même contrôle. C'est une façon d'adapter un état en fonction de plusieurs critères. L'objectif est de rendre le
formulaire Access le plus ergonomique et le plus explicite possible.
- Cliquer de nouveau sur le bouton Ok pour retourner sur le Formulaire en mode création,
- Réaliser le raccourci clavier CTRL + S pour enregistrer les modifications,
- Puis, enfoncer la touche F5 du clavier pour exécuter le formulaire,
Si vous aviez conservé l'ancienne valeur que nous avions testée, l'arrière-plan du formulaire apparaît immédiatement dans la couleur rouge définie.
L'indication visuelle fournie à l'utilisateur est sans appel. La symbolique rouge évoque un problème critique. Il convient de vérifier que ce format est bien dynamique.
- Dans la zone Qté commandée, saisir le nombre 30,
- Puis, enfoncer la touche Tabulation du clavier pour valider la saisie,
Instantanément, l'arrière-plan recouvre sa couleur d'origine. Comme la quantité demandée est inférieure à celle disponible en stock, le
critère de la mise en forme conditionnelle n'est plus vérifié. En conséquence, sa couleur associée n'est plus déclenchée.
Message d'alerte automatique
Pour que l'indication dynamique fournie à l'utilisateur ne souffre aucune confusion, nous proposons de renforcer l'alerte. L'objectif consiste à afficher un message explicite à l'écran, par le biais d'une
boîte de dialogue. La démarche est intéressante car nous proposons de déclencher cette action proche de la philosophie programmation, sur événement précis et sans
code Visual Basic. Nous prouverons ainsi qu'
Access est un logiciel dédié à l'entreprise, permettant de développer des applications affinées aux besoins.
Cette
boîte de dialogue est une
fonction Access, accessible par le
gestionnaire d'expression. Son exécution est
conditionnelle bien entendu. Elle ne doit apparaître que si la quantité saisie pour l'article désigné est supérieure à la quantité en stock. Nous devons donc exploiter une
fonction Access capable d'émettre des conditions, comme la
fonction Excel Si. Dans
Access, la
fonction conditionnelle se nomme
VraiFaux ou
Iif dans sa version anglo-saxonne. Sa syntaxe est identique à celle de la
fonction Excel Si :
=VraiFaux(Critère_à _vérifier ; Action_Alors ; Action_Sinon)
Le premier argument est la
condition à remplir pour enclencher la première action (Alors). Elle consiste à vérifier que la quantité commandée est supérieure à la quantité en stock. Les deux contrôles du formulaire doivent donc être comparés, comme pour le critère de la mise en forme conditionnelle. S'il est vérifié, la boîte de dialogue doit être déclenchée avec son message. Dans le cas contraire (Sinon), nous choisirons de ne déclencher aucune action. Mais il faut l'indiquer à la
fonction Access VraiFaux par deux guillemets successifs (''). Cette vérification doit intervenir dans un contexte précis. La fonction doit être écrite sur un événement qui confirme que la saisie de la quantité est terminée. L'événement
Sur PerteFocus est l'un des choix possibles. Il se déclenche lorsque la zone n'est plus active, donc lorsque la saisie est validée. Si l'expression est associée à cet événement, son action est enclenchée automatiquement.
- Cliquer sur la flèche du bouton Affichage dans le ruban Accueil,
- Dans la liste, choisir Mode création,
- Sur le formulaire, cliquer sur le contrôle qte_commandee pour le sélectionner,
Comme plusieurs contrôles se chevauchent, la touche CTRL enfoncée pendant le clic, peut être nécessaire pour l'atteindre.
- Dans sa feuille de propriétés, cliquer sur l'onglet Evénement,
- Sélectionner alors son événement Sur perte focus,
- Cliquer sur le petit bouton à trois points situé à son extrémité droite,
- Dans la boîte de dialogue qui suit, choisir Générateur d'expression et valider par Ok,
- Dans la zone de saisie du générateur d'expression, taper le symbole = pour débuter le calcul,
- Saisir le nom de la fonction conditionnelle suivi d'une parenthèse, soit : VraiFaux(,
Nous aurions pu la sélectionner dans l'arborescence des fonctions proposées par le générateur. Mais nous aurions obtenu sa version anglo-saxonne, soit :
Iif. Elle fonctionne de la même façon. Nous préférons la version française pour une meilleure compréhension.
Contrairement au critère de la mise en forme conditionnelle, les champs des quantités ne peuvent pas être directement comparés. Comme il s'agit de zones de saisie,
Access considère que les valeurs inscrites sont des chaînes de texte. Mais le
générateur d'expression propose des fonctions permettant de convertir les données de contrôles, en valeurs numériques.
- Dans la liste des éléments d'expression sur la gauche de la boîte de dialogue, déployer l'affichage de la rubrique Fonctions,
- Puis, sélectionner l'élément Fonctions intégrées,
- Dans la liste du milieu, choisir la catégorie Conversion,
- Dans la liste de droite, double cliquer sur la fonction CEnt pour l'inscrire,
Comme son nom l'indique, cette fonction permet de
convertir en nombre entier, la valeur qui lui est passée entre parenthèses. A ce stade, la syntaxe de notre formule est la suivante :
=VraiFaux(CEnt(«expression»)
Nous devons remplacer le terme expression par le nom du champ de la quantité commandée. Comme toujours, il doit être inscrit entre crochets. Mais il peut aussi être désigné depuis le générateur.
- Dans les parenthèses de la fonction CEnt, supprimer son paramètre : «expression»,
- Dans la liste de gauche, sélectionner le formulaire Validation_commande,
- Dans la liste du centre, double cliquer sur le champ qte_commandee,
Le champ ainsi désigné s'inscrit entre crochets et entre les parenthèses de la
fonction CEnt. La valeur numérique de ce contrôle doit être comparée à la valeur numérique pour la quantité en stock. Ce second champ doit être désigné de la même façon, en paramètre de la
fonction CEnt. Mais l'opérateur de comparaison doit les séparer.
- Après la parenthèse fermante de la fonction CEnt, taper le symbole Supérieur (>),
- Puis, comme précédemment, double cliquer sur la fonction CEnt pour l'inscrire,
- Supprimer l'information située entre ses parenthèses,
- Et, double cliquer sur le champ Qte_stock du formulaire Validation_commande,
Nous venons de terminer l'écriture du
critère à vérifier par la
fonction Access VraiFaux. La syntaxe à ce stade est la suivante :
=VraiFaux(CEnt( [qte_commandee] ) > CEnt( [Qte_stock] )
- Après la parenthèse fermante de la deuxième fonction CEnt, taper un point-virgule(;),
Nous passons ainsi dans l'argument
Alors de la
fonction VraiFaux, soit l'action à enclencher lorsque la condition est satisfaite. Lorsque la quantité demandée n'est pas disponible, un message doit en informer l'utilisateur. Il s'agit d'exploiter une nouvelle
fonction proposée par le
générateur d'expression.
- Dans la liste de gauche, sélectionner l'élément Fonctions intégrées,
- Dans la liste du milieu, choisir la catégorie Messages,
- Dans la liste de droite, double cliquer sur la fonction BoîteMsg,
La syntaxe que nous obtenons doit être corrigée :
=VraiFaux(CEnt( [qte_commandee] ) > CEnt( [Qte_stock] ) ; «Expr»BoîteMsg(«prompt»; «boutons»; «title»; «fichier_aide»; «contexte»)
- Supprimer le terme «Expr» situé juste devant le nom de la fonction,
Cette boîte de dialogue propose de nombreux arguments. Mais seul le premier est obligatoire. Il s'agit du message à afficher à l'écran.
- Supprimer toutes les informations proposées par défaut dans les parenthèses de la fonction BoîteMsg,
- A la place, saisir le texte suivant entre guillemets : La quantité demandée n'est pas disponible en stock,
- Après la parenthèse fermante de la fonction BoîteMsg, taper un point-virgule (;),
Nous passons ainsi dans le troisième et dernier argument de la
fonction VraiFaux, la branche
Sinon. Il s'agit de l'action à enclencher lorsque le critère n'est pas validé. Si la quantité commandée est conforme, nous ne souhaitons pas perturber l'utilisateur.
- Taper deux guillemets ('') et fermer la parenthèse,
- Valider l'expression en cliquant sur le bouton Ok,
L'expression finalisée que nous avons bâtie est la suivante :
=VraiFaux(CEnt( [qte_commandee] ) > CEnt( [Qte_stock] ) ; BoîteMsg('La quantité demandée n'est pas disponible en stock') ;'')
Il s'agit désormais de vérifier son bon fonctionnement pour savoir si elle alerte convenablement l'utilisateur.
- Enregistrer les modifications (CTRL + S),
- Enfoncer la touche F5 du clavier pour exécuter le formulaire,
- Avec la première liste déroulante, choisir un nouveau client, par exemple la référence 11,
- A l'aide de la seconde liste déroulante, choisir un nouveau produit, par exemple de référence b008,
- Dans la zone Qté commandée, taper 600 par exemple,
- Puis, enfoncer la touche Tabulation du clavier,
Cette action a pour effet d'activer le contrôle suivant sur le formulaire. En conséquence, l'
événement Sur perte focus est déclenché.
De fait, l'
expression conditionnelle est analysée. Le critère de la
fonction Access VraiFaux est vérifié et la boîte de dialogue se déclenche. A validation du message, c'est le
format conditionnel qui s'active. L'arrière-plan se remplit de rouge pour confirmer l'alerte. L'utilisateur ne peut pas passer à côté des directives.
Toutes ces
actions dynamiques ont pu être paramétrées sans le soutien du code Visual Basic Access. Il est donc intéressant de constater la puissance que propose ce logiciel pour créer des applications parfaitement adaptées aux besoins de l'entreprise.