formateur informatique

Filtrer et trier les données en VBA Access

Accueil  >  Bureautique  >  Access  >  Access VBA  >  Filtrer et trier les données en VBA Access
Livres à télécharger


Pour partager cette vidéo sur les réseaux sociaux ou sur un site, voici son url :


Inscription Newsletter    Abonner à Youtube    Vidéos astuces Instagram
Sujets que vous pourriez aussi aimer :


Filtrer et trier les données en VBA Access

Nous reprenons ici le développement de l'application Access pour l'évaluation des candidats par le biais de questionnaires à choix multiples. Dans la précédente formation, nous avions réussi à récolter et consolider les réponses du candidat durant l'évaluation, afin de les archiver dans une table resultats à la fin du test.

Choix navigation après identification formulaire VBA Access

Base de données des évaluations
Comme l'illustre la capture ci-dessus, nous avons ajouté sur le formulaire d'identification, un groupe d'options constitué de deux cases. Comme vous le savez sans doute, les cases d'un groupe d'options sont liées. Le fait de cliquer sur l'une d'entre elles, décoche toutes les autres cases appartenant au même groupe. Si bien que l'objectif désormais est de permettre à l'utilisateur, après son identification, d'accéder soit au test, soit au classement de l'évaluation choisie dans la liste déroulante, en fonction de la case qui est cochée.
  • Télécharger la base de données filtrer-et-trier.accdb en cliquant sur son lien,
  • L'ouvrir dans Access en maintenant la touche MAJ (Shift) enfoncée,
  • Cliquer sur le bouton Activer le contenu si nécessaire,
La base de données a été protégée et verrouillée dans une précédente formation afin d'empêcher la modification des données par les utilisateurs et de guider les candidats. Le fait de maintenir la touche MAJ enfoncée pendant l'ouverture de la base de données, permet à ce stade encore, d'accéder aux objets Access et donc à leur conception.

Les cases à cocher ont certes été ajoutées, mais le code lui, n'a pas évolué. Si bien qu'à ce stade, après identification et choix d'un questionnaire dans la liste déroulante, le candidat est inexorablement redirigé vers le formulaire de l'évaluation. Le choix de la case à cocher est donc tout bonnement ignoré pour l'instant. Mais avant d'adapter ce code, nous avons besoin d'un nouveau formulaire, bâti sur la table resultats afin de proposer les classements.

Formulaire de tri pour classements
Nous allons créer un formulaire de base sur la table resultats. Nous obtiendrons ainsi la structure souhaitée. Et c'est par le code VBA, selon le questionnaire choisi et l'identifiant du candidat que nous adapterons la source de données. Cette dernière sera générée par une requête SQL à la volée, réalisant une clause WHERE sur l'identifiant et un tri (ORDER BY) sur la note et la durée. Les enregistrements seront ainsi filtrés mais les champs restent les mêmes, permettant ainsi l'implémentation du formulaire.
  • Sélectionner la table resultats dans le volet de gauche des objets Access,
  • Cliquer sur l'onglet Créer en haut de la fenêtre Access, pour activer son ruban,
  • Dans la section Formulaires du ruban, cliquer sur le bouton Assistant Formulaire ,
  • Dans l'assistant qui se déclenche, choisir la table resultats avec la liste déroulante,
  • Basculer tous les champs dans la partie droite, sauf le champ res_num, à l'aide des boutons de flèches situés entre les deux zones, comme l'illustre la capture ci-dessous,
Création structure formulaire Access pour transmission source de données dynamiquement

Le champ res_num est en effet un numéro automatique. Et bien qu'il s'agisse de la clé primaire de la table , il ne présente pas grand intérêt à l'affichage des classements. Nous ajoutons le champ res_id de l'identifiant car il sera utile à la détection du candidat à mettre en valeur. Mais nous devrons le masquer à l'issue pour ne pas divulguer d'informations confidentielles.
  • Cliquer sur le bouton Suivant de l'assistant formulaire,
  • Dans l'étape qui suit, cocher la case Tabulaire et cliquer sur le bouton Suivant,
  • Dans la dernière étape, conserver le nom resultats emprunté à la table et cliquer sur Terminer,
Le formulaire s'affiche en mode exécution et ne propose certes, que très peu de résultats pour l'instant. Nous avons choisi le mode Tabulaire pour que chacun des champs soit identifié par un contrôle zone de saisie (TextBox). Ainsi, nous pourrons facilement accéder aux informations des enregistrements par leurs champs, pour influer dynamiquement sur ces derniers. Si nous avions opté pour le mode feuille de données, l'opération aurait été plus complexe.
  • Cliquer sur la flèche du bouton Affichage du ruban Création,
  • Dans la liste, choisir Mode création,
Pour transmettre les informations entre formulaires Access, nous avons besoin de placer deux contrôles étiquettes (Label) afin de réceptionner les données dynamiques. Souvenez-vous, par le code VBA en mode Design, nous pouvons modifier le contenu d'une étiquette mais pas d'une zone de texte. Nous allons en profiter pour ajouter une zone de texte (TextBox) qui vous le verrez, sera précieuse pour enclencher des mises en valeur dynamiques, selon les paramètres transmis par les étiquettes.
  • Dans le ruban Création du formulaire, choisir le contrôle Etiquette(Aa),
  • Tracer un rectangle dans la zone vide du pied de formulaire,
  • Saisir une information textuelle à l'intérieur, par exemple source, pour qu'il ne disparaisse pas,
  • Puis, activer l'onglet Autres de sa feuille de propriétés,
  • Saisir le texte la_source dans sa propriété Nom,
Explicitement nommé, ce contrôle sera plus simple à piloter par le code VBA Access.
  • Ajouter une nouvelle étiquette dans le pied de formulaire,
  • Saisir le texte lid en guise de contenu puis régler sa propriété nom sur et_id,
  • Enfin, ajouter une zone de texte, toujours dans le pied de formulaire,
  • Supprimer son étiquette associée,
  • Puis, régler sa propriété Nom sur txt_id,
  • Enregistrer les modifications(CTRL + S),
Ajouter contrôles dans pied de formulaire Access pour transfert dynamique de données en VBA

Tous les contrôles de réception de données sont en place pour le transfert d'information par le code VBA. Nous les masquerons plus tard, lorsque nous nous serons assurés que les données ont été transmises avec succès.

Dans la zone d'entête du formulaire, les étiquettes ont conservé les noms des champs de la table source. Il convient de modifier leur contenu afin de rendre l'information plus explicite.
  • Saisir Identifiant à la place de res_id,
  • Saisir Date de passage à la place de res_date,
  • Saisir Nom du test à la place de res_nom,
  • Saisir Note à la place de res_note,
  • Enfin, saisir Durée à la place de res_duree,
Organisation des contrôles de formulaire Access en mode création

A ce stade, le formulaire affiche toutes les informations contenues dans la table source, sans filtre ni tri. Il s'agira de l'afficher en filtrant sur le nom du questionnaire choisi, par ordre décroissant sur la note et croissant sur la durée.

Transfert conditionnel d'informations
Pour que le filtre des résultats puisse s'appliquer sur le nom du test choisi, encore faut-il que ce paramètre lui ait été passé. A l'authentification, si le candidat choisit de visualiser les classements, il doit être redirigé sur le formulaire que nous venons de concevoir, filtré sur le thème sélectionné avec la liste déroulante. Il s'agit donc d'adapter le code précédent, au choix dans la liste, en ajoutant une condition. Par défaut, le code redirige pour l'instant sur le formulaire des évaluations, en transmettant les paramètres nécessaires.
  • Fermer le formulaire resultats,
  • Cliquer avec le bouton droit de la souris sur le formulaire Listes depuis le volet de gauche,
  • Dans la liste, choisir Mode création,
  • Sélectionner la liste déroulante sur le formulaire,
  • Activer l'onglet Evénement de sa feuille de propriétés,
  • Cliquer sur le bouton de son événement Avant MAJ,
Nous sommes ainsi redirigés dans l'éditeur de code Visual Basic, entre les bornes de la procédure événementielle Liste_BeforeUpdate, pour le formulaire Listes. Nous y trouvons le code développé dans les précédentes sessions. Il consiste à ouvrir le formulaire questions en mode Design pour lui passer des paramètres, en affectant le contenu d'étiquettes. Ce code est toujours vrai, mais pour le cas où le candidat a cocher la case Evaluation depuis le formulaire Listes d'authentification. Dans le cas où son choix s'est porté sur la case Classement, c'est le formulaire resultats qui doit être ouvert en mode conception, par le code VBA, afin de lui transmettre des paramètres.

Pour un groupe d'options, c'est la propriété Value qui permet de connaître la case qui est cochée. La valeur 1 correspond à la première des cases, 2 à la deuxième etc... Et comme toujours, nous allons exploiter l'instruction VBA conditionnelle If, pour effectuer un test sur cette valeur, afin de déterminer quel formulaire doit être atteint. Si la valeur de la case qui est cochée vaut 1, nous devons accéder au formulaire resultats sinon, nous devons accéder au formulaire questions. Donc le code qui est déjà présent doit être imbriqué dans la branche Else de l'instruction If que nous allons ajouter.
  • Dans la procédure, ajouter l'instruction If suivante :
If(groupe_choix.Value = 1) Then
  • Puis encadrer le code précédent dans la branche Else, entre le Else et le End If à ajouter,
Vérifier condition en VBA Access pour transmettre les données selon choix utilisateur depuis formulaire

Dans la branche If de la condition, avant le Else, nous devons ajouter le code, très similaire à celui de la branche Else, permettant d'accéder en modification, au formulaire resultats. Mais celui-ci n'est pas encore répertorié dans la liste des objets accessibles en VBA Access. C'est d'ailleurs ce qu'illustre l'explorateur de projet sur la gauche de l'éditeur. Les formulaires Listes, Inscription et questions sont bien présents, mais le formulaire resultats est absent. Pour l'ajouter, il suffit de créer une procédure événementielle qui lui est associée.
  • Enregistrer les modifications (CTRL + S) et basculer sur l'application Access (ALT + F11),
  • Ouvrir le formulaire resultats en mode création,
  • Dans l'onglet Evénement de sa feuille de propriétés, cliquer sur le bouton de son événement Sur chargement,
  • Dans la boîte de dialogue qui suit, choisir Générateur de code et valider par ok,
Gestionnaire événements pour formulaire afin de déclencher code VBA Access sur ouverture

Nous sommes de retour dans l'éditeur de code Visual Basic Access, entre les bornes de la procédure Form_Load, mais pour le formulaire resultats cette fois. Comme l'illustre la capture ci-dessus, il est maintenant référencé en tant qu'objet dans l'arborescence de l'explorateur de projet. Nous aurons d'ailleurs besoin de cette procédure pour réceptionner les données transmises. Nous pouvons donc désormais accéder à ce dernier avec les mêmes instructions que nous avons employées, pour modifier le formulaire questions par le code VBA.
  • Dans l'explorateur de projet, double cliquer sur l'objet Form_Listes,
Nous revenons ainsi sur la plage de code attachée au formulaire Listes, entre les bornes de la procédure que nous étions en train de modifier, afin de transmettre des données au formulaire resultats.
  • Dans la branche If de la condition que nous avons précédemment codée, ajouter les lignes suivantes :
DoCmd.OpenForm "resultats", acDesign
Form_resultats.la_source.Caption = Liste.Text
Form_resultats.et_id.Caption = identifiant.Value
DoCmd.Close acForm, "resultats", acSaveYes

DoCmd.OpenForm "resultats", acNormal
DoCmd.Close acForm, "Listes", acSaveNo


Il s'agit strictement des mêmes instructions VBA que celles que nous avons utilisées dans la branche Else, afin de transmettre les données au formulaire questions. Cette fois, nous les transmettons au formulaire resultats. C'est la raison pour laquelle nous l'ouvrons en mode conception dans un premier temps. Grâce à la propriété Caption des Etiquettes, nous affectons le contenu des contrôles la_source et et_id, respectivement au nom du questionnaire et de l'identifiant du candidat, commandant l'affichage du classement. Nous enregistrons ces modifications en fermant le formulaire de destination ainsi modifié. Puis nous le rouvrons mais en mode exécution cette fois (DoCmd.OpenForm "resultats", acNormal) et nous en profitons pour fermer le formulaire Listes, dans la foulée.
  • Enregistrer les modifications (CTRL + S) et basculer sur l'application Access (ALT + F11),
  • Double cliquer sur le formulaire Listes depuis le volet de gauche,
  • Taper un identifiant reconnu dans la table msy_inscrits et cliquer sur le bouton Ok,
  • Conserver la case Classement cochée et choisir un thème dans la liste déroulante,
Redirection vers formulaire Access choisi par utilisateur depuis liste déroulante avec code VBA

Le formulaire resultats s'affiche tandis que le formulaire Listes disparaît. Bien entendu, malgré le choix effectué en amont, le formulaire de destination ne propose pas encore le classement du thème choisi, avec la mise en valeur du candidat. Mais nous constatons la présence des informations transmises dans les étiquettes, en pied de formulaire.

Trier les données réceptionnées
C'est donc désormais au chargement du formulaire resultats que le code doit intervenir, afin de récolter les informations dynamiques, transmises par le code Visual Basic Access. Nous devons filtrer les enregistrements du classement selon le questionnaire sélectionné avec des tris décroissant sur le champ res_note et croissant sur le champ res_duree. Il s'agit de construire une requête SQL avec une clause WHERE dont l'exécution sera commandée par le code VBA sur l'événement du chargement du classement.

Pour construire une telle requête SQL, recoupant des filtres et des tris, nous pouvons nous aider de l'outil Access de création de requête.
  • Cliquer sur l'onglet Créer en haut de la fenêtre Access pour activer son ruban,
  • Cliquer alors sur le bouton Création de requête,
  • Dans la fenêtre qui suit, double cliquer sur la table resultats pour l'ajouter,
  • Puis, cliquer sur le bouton Fermer,
  • Glisser tous les champs de la représentation de table sur la grille de requête,
  • Attribuer la valeur Décroissant dans la zone tri pour le champ res_note,
  • Attribuer la valeur Croissant dans la zone tri pour le champ res_duree,
Dans une requête, les tris s'effectuent selon l'ordre dans lequel sont énumérés les champs. Le tri décroissant sur la note intervient donc en premier, de la plus grande à la plus petite. Puis s'enclenche le tri croissant sur la durée, du plus petit temps de parcours au plus long. Ainsi, pour la même note, c'est la durée la plus courte qui placera l'enregistrement devant.
  • Dans la zone Critères du champ res_nom, taper Informatique générale par exemple,
Nous souhaitons afficher, pour les résultats ainsi triés, uniquement les enregistrements du questionnaire Informatique générale. Avec ce critère, nous venons de construire une clause WHERE dont nous prélèverons la syntaxe SQL.

Créer requête sélection Access avec critères et tris recoupés
  • Enregistrer la requête (CTRL + S) sous le nom requete_tri,
  • Puis, cliquer sur le bouton Exécuter du ruban Créer,
Nous basculons en mode feuille de données, dans une vue présentant les enregistrements ainsi filtrés et triés. Seuls les résultats du questionnaire Informatique générale sont proposés, selon le critère que nous avons ajouté pour définir la clause WHERE.

Filtrer et trier les données de base par requête Access avec clause WHERE

Dans notre cas, comme l'illustre la capture ci-dessus, vous remarquez que deux résultats affichent la même note. Ils sont bien départagés par le tri croissant sur la durée. Ainsi le temps le plus court passe devant l'autre.
  • Cliquer sur la flèche du bouton Affichage, dans le ruban Accueil,
  • Dans la liste, choisir Mode SQL,
Code SQL de la requête sélection avec critère, conçue avec éditeur Access

La syntaxe peut paraître un peu complexe a priori. En réalité, de nombreuses informations inutiles parasitent la syntaxe. Nous allons la nettoyer. Mais avant cela, nous notons bien la présence de la clause WHERE qui fixe le critère sur le nom du questionnaire, appliquée sur le champ res_nom. Puis viennent les tris enclenchés par les mots clés ORDER BY. DESC désigne un tri décroissant sur le champ res_note, tandis qu'aucune indication n'est donnée sur le champ res_duree. Nous pourrions inversement y écrire ASC, mais un tri est par défaut croissant.

Entre les mots clés SELECT et FROM sont énumérés tous les champs pour lesquels nous souhaitons visualiser l'information triée et filtrée. Comme nous l'avons appris dans d'autres formations, nous pouvons remplacer leur énumération par le symbole *, qui les désigne tous.
  • Entre les mots clés SELECT et FROM, remplacer l'énumération par le symbole *,
  • De même, supprimer tous les préfixes resultats.,
Ce préfixe désigne le nom de la table sur laquelle nous agissons. Il peut être utile lorsqu'il s'agit d'une requête multi-table et que des noms de champs sont similaires. Ici pas d'ambiguïté, le préfixe est donc inutile, nous le supprimons. Après avoir purgé la syntaxe, nous obtenons la requête SQL simplifiée suivante :

SELECT * FROM resultats WHERE res_nom="Informatique générale" ORDER BY res_note DESC, res_duree;

Si nous l'exécutons de nouveau, nous obtenons strictement le même résultat. La clause WHERE et les tris ont bien été conservés.
  • Enregistrer les modifications (CTRL + S),
  • Sélectionner intégralement l'instruction SQL et la copier (CTRL + C),
  • Fermer la requête en cliquant sur la croix de son onglet par exemple,
  • Afficher le formulaire resultats en mode création,
  • Dans l'onglet Evénements de sa feuille de propriétés, cliquer sur le bouton de son événement Sur chargement,
Nous sommes propulsés entre les bornes de la procédure Form_Load, que nous avons construite précédemment pour le formulaire resultats. Comme nous l'avons appris dans la formation pour récolter et consolider les données, la propriété RecordSource, permet de modifier dynamiquement, la source de données d'un formulaire. Et cette source n'est autre que la sélection filtrée et triée de la requête que nous venons de construire, à un détail près. Le nom de la table pour laquelle nous souhaitons afficher le classement, n'est connu qu'au chargement du formulaire, stocké dans l'étiquette nommée la_source.
  • Entre les bornes de la procédure, ajouter le début de code suivant :
If (la_source.Caption <> "")Then
Me.RecordSource = ""
End If


Le test sur le contenu de l'étiquette (la_source.Caption) permet d'ajouter une sécurité afin d'éviter les erreurs si le formulaire est appelé sans paramètre. Il affichera tous les résultats non filtrés et triés, tel qu'il a été conçu en mode Création. Dans le cas contraire, nous modifions la source de données à l'aide de la propriété RecordSource de l'objet Me qui désigne le formulaire actif en VBA Access.
  • Entre les guillemets, coller (CTRL + V) l'instruction SQL précédemment copiée,
  • Modifier les doubles cotes encadrant le terme Informatique générale dans la clause WHERE, par des simples cotes,
Les doubles et simples cotes ont le même effet. Elles annoncent une information de type texte. Mais comme la requête SQL est elle-même écrite entre doubles cotes pour pouvoir être gérée en VBA, les informations textuelles doivent être encadrées de simples cotes dans la syntaxe.
  • Enregistrer les modifications et basculer sur l'application Access,
  • Double cliquer sur le formulaire Listes pour l'exécuter,
  • Taper un identifiant reconnu puis le valider,
  • Cocher la case Classement et choisir le questionnaire Adobe Photoshop dans la liste,
Le classement s'affiche bien, qui plus est trié sur la note et la durée, comme nous l'avons programmé, mais fort logiquement, pour le questionnaire Informatique générale et non pour le thème Adobe Photoshop, comme nous l'avons choisi dans la liste déroulante. L'information sur le nom de la table, dans la clause WHERE de la requête SQL est toujours passée sous forme de constante. Elle doit être remplacée par le nom de la table passé en paramètre et stocké dans le Label la_source.
  • Fermer le formulaire resultats et revenir dans l'éditeur de code,
  • Entre les simples cotes de la syntaxe SQL, supprimer l'information : Informatique générale,
  • Ajouter une double cote, soit ",
  • Ajouter un espace,
  • Puis, taper le caractère de concaténation (&) pour associer une information dynamique,
  • Ajouter un espace,
  • Ajouter l'instruction la_source.Caption à la suite pour prélever le nom du questionnaire,
  • Ajouter un espace suivi du caractère de concaténation (&) pour reprendre la partie statique,
  • Ajouter un espace suivi de doubles cotes et enregistrer les modifications,
La syntaxe SQL affectée à la propriété RecordSource est résumée par le code suivant :

Me.RecordSource= "SELECT * FROM resultats WHERE res_nom='" & la_source.Caption & "' ORDER BY res_note DESC, res_duree;"

Désormais, si nous simulons intégralement, en choisissant un questionnaire après l'identification, ce sont bien les résultats du thème sélectionné qui apparaissent triés sur le formulaire.

Mise en valeur des données filtrées
Le candidat est désormais redirigé vers l'affichage des classements pour le questionnaire qu'il a sélectionné. Mais afin de faciliter le repérage, il convient de faire ressortir les enregistrements qui le concernent. Nous pourrions passer en revue tous les contrôles dans une boucle For Each en VBA. Mais il y a encore plus simple. A l'instar d'Excel, Access propose la mise en forme conditionnelle des contrôles de formulaire. Ce format dynamique consiste à faire réagir les couleurs d'un contrôle en fonction des valeurs qu'il contient. Dans notre cas, si le TextBox res_id contient l'identifiant du candidat connecté, alors tout l'enregistrement doit ressortir. Mais une mise en forme conditionnelle peut comparer les valeurs des contrôles Zone de saisie et non pas des étiquettes cette fois. Dans un premier temps, nous devons donc récupérer la valeur de l'identifiant du candidat, dans le contrôle TextBox txt_id, que nous avions ajouté à cet effet.
  • Sous la requête précédente, dans l'instruction If de la procédure Form_Load du formulaire, ajouter la ligne de code suivante :
txt_id.Value = et_id.Caption

Grâce à la propriété Value d'un contrôle Zone de saisie, nous affectons au contenu du TextBox txt_id, le contenu de l'étiquette et_id, renvoyé par sa propriété Caption.
  • Enregistrer les modifications et basculer sur l'application Access,
  • Exécuter le formulaire Listes et choisir un questionnaire après identification,
Récupération information dynamique au chargement formulaire Access dans TextBox grâce au code VBA

Comme l'illustre la capture ci-dessus, nous avons bien réussi à récupérer l'identifiant transmis en Visual Basic, dans la zone de texte txt_id. Dès lors, il s'agit d'exploiter sa valeur pour réaliser des critères de mise en forme conditionnelle sur les enregistrements du classement.
  • Afficher le formulaire resultats en mode création,
  • Sélectionner le contrôle res_id dans la section Détail du formulaire,
  • Cliquer sur l'onglet Format en haut de la fenêtre Access pour activer son ruban,
  • Dans la section Contrôler la mise en forme, 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, le principe consiste à effectuer des réglages de mise en valeur, correspondant à un critère. Le critère consiste à vérifier que la valeur du champ res_id est identique à la valeur du champ txt_id, récupérée après transfert de données. Pour ce faire :
  • Dans la deuxième liste déroulante, choisir l'opérateur égal à,
  • Dans la zone de saisie sur sa droite, taper le nom du champ entre crochets, soit [txt_id],
Nous aurions pu cliquer sur le petit bouton sur la droite de la zone de saisie afin d'appeler le générateur d'expression. En sélectionnant le champ txt_id dans l'arborescence, celui-ci aurait de la même façon, retourné le nom du champ entre crochets. Nous venons de définir le critère qui consiste à vérifier l'égalité entre les deux champs, res_id et txt_id. Lorsque ce critère est validé, le format doit varier. C'est la raison pour laquelle des petits boutons de mise en forme sont proposés en bas de la règle.
  • Cliquer sur le bouton G pour mettre la police en gras,
  • Définir une couleur de remplissage vert pâle avec le pot de peinture,
  • Puis choisir un violet pour la couleur de texte par exemple,
  • Valider cette règle en cliquant sur le bouton Ok,
  • Puis cliquer sur le bouton Appliquer de la précédente boîte de dialogue,
Faire ressortir dynamiquement les données de formulaire Access grâce au format conditionnel

Il convient désormais de tester si ces réglages dynamiques sont fonctionnels.
  • Enregistrer les modifications et double cliquer sur le formulaire Listes pour l'exécuter,
  • Saisir un identifiant reconnu et choisir le questionnaire Informatique générale par exemple,
Mise en forme automatique et dynamique des contrôles de formualaire Access en fonction de leurs valeurs

Nous sommes redirigés vers les résultats du thème et, l'identifiant du candidat (123456 ici) est en effet mis en valeur, afin d'attirer l'oeil et simplifier la lecture. Le candidat a participé deux fois. Il visualise ainsi rapidement l'ensemble de ses résultats. Cette mise en valeur doit être appliquée à tous les champs de l'enregistrement, afin que la ligne complète ressorte.
  • Afficher le formulaire resultats en mode création,
  • Cliquer sur le champ res_date pour le sélectionner,
  • Activer le ruban Format en haut de la fenêtre Access,
  • Cliquer sur le bouton Mise en forme conditionnelle,
  • Dans la boîte de dialogue qui suit, cliquer sur le bouton Nouvelle règle,
Le critère que nous devons vérifier est différent du précédent. En effet, le format dynamique ne peut pas se déclencher selon la valeur du champ res_date. C'est toujours l'identifiant qui permet de situer le candidat. Nous devons donc bâtir une expression dont le rôle est de vérifier l'équivalence entre la valeur du champ res_id pour l'enregistrement en cours, et la valeur de l'identifiant récupérée au chargement du formulaire.
  • Dans la première liste déroulante, choisir Expression,
  • Dans la zone de saisie sur sa droite, taper l'expression suivante : [res_id]=[txt_id],
Ce critère consiste bien à vérifier l'égalité entre les champs pour l'enregistrement en cours. Dans ce cas, nous devons appliquer les mêmes réglages de mise en forme dynamique que précédemment.

Mise en forme conditionnelle Access selon formules sur des champs
  • Attribuer une police grasse, un fond vert pâle et une couleur de texte violette,
  • Cliquer sur le bouton Ok de la première boîte de dialogue et Appliquer de la seconde,
Plutôt que de répéter les mêmes réglages pour chacun des autres champs, nous pouvons exploiter l'outil Reproduire la mise en forme, qui comme dans Excel, permet de répliquer les réglages de mise en valeur d'un objet vers un autre, y compris le format dynamique.
  • Sélectionner le champ res_date dans la section Détail du formulaire,
  • Activer le ruban Format en haut de la fenêtre Access,
  • Double cliquer sur le pinceau Reproduire la mise en forme à droite de la taille de police,
  • Puis, cliquer tour à tour sur les champs res_nom, res_note et res_duree,
Le double clic sur le pinceau permet de reproduire la mise en forme d'un contrôle sélectionné en cascade. Un seul clic permet de répliquer les attributs une seule fois. Il s'agit maintenant de tester ces réglages.
  • Double cliquer sur le formulaire Listes afin de l'exécuter,
  • Taper l'identifiant 123456 par exemple et valider par Ok,
  • Dans la liste déroulante, choisir le questionnaire Informatique générale,
Mise en forme dynamique des enregistrements de formulaire Access selon valeurs de clé primaire

Nous constatons désormais que tous les enregistrements correspondants au candidat authentifié, ressortent sans ambiguïté. Cette mise en valeur dynamique simplifie grandement la lecture et l'accès aux informations.

Il convient de réaliser certains derniers réglages pour parfaire l'application. Les contrôles de formulaire doivent être verrouillés, pour qu'une saisie de l'utilisateur ne modifie pas les données sources de la table. De même, les contrôles placés en pied de formulaire, pour le transfert de données, doivent être masqués.
  • Afficher le formulaire resultats en mode création,
  • A l'aide de la touche CTRL, sélectionner ensemble les champs res_id, res_date, res_nom, res_note et res_duree,
  • Puis activer l'onglet Données de la feuille de propriétés,
  • Basculer la valeur de la propriété Verrouillé sur Oui,
  • Sélectionner ensemble les trois contrôles du pied de formulaire,
  • Dans l'onglet Format de la feuille de propriétés, régler la propriété Visible sur Non,
Nous en avons terminé pour cette étape du développement de l'application Access d'évaluation. Dans un prochain volet, nous reviendrons dessus, afin de la sécuriser au maximum.
 
Sur Facebook
Sur Youtube
Les livres
Contact
Mentions légales



Abonnement à la chaîne Youtube
Partager la formation
Partager sur Facebook
Partager sur Twitter
Partager sur LinkedIn