Pour partager cette vidéo sur les réseaux sociaux ou sur un site, voici son url :
Sujets que vous pourriez aussi aimer :Formulaire de recherche
Dans cette
formation Access, nous proposons de livrer une astuce relativement simple pour bâtir un
moteur de recherche, depuis un
formulaire Access. Bien sûr, l'enjeu consiste à contourner le
code Visual Basic. Les mots clés tapés doivent être cherchés dans plusieurs champs de la table archivant les informations.
Données source
Il va de soi que des données sont à manipuler et à questionner. Il convient donc de les réceptionner dans un premier temps.
Comme l'indique le
volet des objets Access sur la gauche de l'écran, cette petite base est composée de deux éléments. Il s'agit de la
table Produits et du
formulaire F_Recherche.
- Double cliquer sur la table Produits pour afficher son contenu en mode feuille de données,
Cette table recense 244 articles référencés sur un certain niveau de détail.
- Double cliquer sur le formulaire F_Recherche pour l'exécuter,
La mise en page de ce
formulaire a été préparée. Mais fort naturellement à ce stade, aucune fonctionnalité n'est opérationnelle. Une zone de saisie est prévue pour recevoir les
mots clés de recherche. Un
sous formulaire vierge et blanc pour l'instant est présent pour restituer les résultats concordants, issus de la
table Produits.
Requête non exclusive
L'idée est de permettre à l'utilisateur de taper ses termes sans se soucier du champ dans lequel se trouve l'information. Il peut ainsi souhaiter chercher des articles correspondant à un bout de référence ou de désignation par exemple. Il suffit de bâtir une
requête attendant le critère dynamique dans l'un ou l'autre champ. Ce
critère doit récupérer les mots clés issus du
formulaire pour les encapsuler dans une expression.
- Fermer la table Produits en cliquant sur la croix de son onglet,
- Puis, dans le ruban Accueil, cliquer sur la flèche du bouton Affichage,
- Dans la liste, choisir ensuite Mode création,
Nous basculons ainsi dans la vue en conception du
formulaire. La
feuille de propriétés doit être visible dans l'environnement. C'est le
bouton Feuille de propriétés du
ruban contextuel Création qui permet de l'afficher ou de la masquer.
- Cliquer sur la zone de saisie pour la sélectionner,
En consultant la
feuille de propriétés, nous comprenons qu'un nom explicite lui a été attribué. Elle est nommée
mots_cles. Ce nom d'objet est particulièrement important. C'est lui qui va permettre de faire la jonction pour la construction du
critère dynamique de la
requête d'extraction.
- En haut de la fenêtre Access, cliquer sur l'onglet Créer pour activer son ruban,
- Dans la section Requêtes du ruban, cliquer sur le bouton Création de requête,
- Dans la boîte de dialogue qui suit, choisir la table Produits,
- Puis, cliquer sur le bouton Ajouter et sur le bouton Fermer,
Nous basculons ainsi dans l'
éditeur de requête Access. La table est représentée schématiquement, accompagnée de tous ses champs.
- Cliquer sur le premier d'entre eux, soit le champ produit_ref,
- Tout en maintenant la touche Maj (Shift) enfoncée, cliquer sur le dernier, soit produit_code,
Cette technique permet d'englober dans la sélection tous les champs compris entre le premier et le dernier.
- Glisser cette sélection vers le bas, sur la grille de requête,
Dès que le bouton de la souris est relâché, vous remarquez que tous les champs y sont déposés. Nous souhaitons extraire les enregistrements correspondant à la demande, avec le niveau de détail intégral sur les champs.
Les mots clés tapés par l'utilisateur doivent être cherchés soit dans le
champ produit_ref, soit dans le
champ produit_nom. Et bien sûr, ces conditions doivent être inscrites dans la
zone Critères pour chaque champ, mais pas sur la même ligne. C'est cette astuce qui va donner vie au
formulaire de recherche et lui apporter beaucoup de souplesse. Tous les enregistrements contenant les mots clés cherchés dans le
champ produit_ref seront extraits. Il en va de même pour tous les enregistrements contenant ces mots clés dans le
champ produit_nom.
Le
critère est identique pour les deux champs. Il consiste à vérifier que les mots clés tapés sont bien contenus dans le champ. C'est l'
opérateur Access Comme, utilisé conjointement avec le symbole de l'étoile, qui permet de décrire une telle expression :
Comme '*' & [Mots_cles_du_formulaire] & '*'
Les étoiles doivent encadrer les termes réceptionnés. Comme ces termes sont dynamiques, ils doivent être concaténés (&). Et comme ils proviennent du formulaire à l'instant de la demande, nous devons exploiter le
générateur d'expression pour établir la correspondance.
- Cliquer dans la zone Critères du champ produit_ref pour l'activer,
- Taper le début de l'expression, comme suit : Comme '*' &,
Le symbole de l'étoile est nécessairement encadré de doubles côtes. Il débute ou termine une expression textuelle. Le caractère de concaténation, le Et commercial, s'obtient par la touche 1, en haut à gauche du clavier.
- Cliquer avec le bouton droit de la souris dans cette zone Critères en cours de construction,
- Dans le menu contextuel, choisir Créer,
Nous affichons ainsi le
générateur d'expression. Il va simplifier la construction de la syntaxe pour la liaison dynamique avec le
formulaire.
- Dans la liste de gauche, déployer l'arborescence des formulaires jusqu'à sélectionner le formulaire F_Recherche,
- Dans la liste du centre, double cliquer sur le contrôle mots_cles,
Nous l'avons constaté en effet. Il s'agit de la zone de saisie destinée à recevoir les termes de recherche de l'utilisateur. Et comme vous l'avez remarqué, cette action a pour effet de compléter la syntaxe que nous avons amorcée. Elle est visible dans la partie supérieure du générateur d'expression :
Comme '*' & Formulaires![F_Recherche]![mots_cles]
A l'instar de la programmation orientée objet, cette syntaxe descend dans la hiérarchie des objets pour désigner le
contrôle mots_cles appartenant au
formulaire F_Recherche. Comme vous le savez, dans la
syntaxe Access, un nom de contrôle ou de champ est toujours encadré de crochets. Mais l'expression n'est pas encore terminée. Telle qu'elle est construite à ce stade, elle permet de trouver la correspondance lorsque le champ se termine par les mots tapés. Or, nous souhaitons trouver toutes les correspondances, à partir du moment où ces termes sont inclus.
- A la suite de la syntaxe, concaténer une nouvelle étoile, comme suit : & '*',
Nous avons désormais traduit le raisonnement que nous avions posé.
- Cliquer sur le bouton Ok pour valider l'expression,
Sa syntaxe apparaît conformément dans la
zone Critères du
champ produit_ref. Il est conseillé d'augmenter la largeur du champ pour la visualiser intégralement.
La même correspondance doit être établie sur le
champ produit_nom. Mais comme nous l'avons dit, elle ne doit pas intervenir sur la même ligne.
- Sélectionner l'expression complète puis la copier (CTRL + C),
- Cliquer sur la ligne du dessous de la zone Critères du champ produit_nom,
- Coller alors l'expression (CTRL + V),
- Enregistrer la requête (CTRL + S) sous le nom : R_Recherche,
A validation, comme vous le constatez, le nouvel élément apparaît dans le
volet des objets Access.
Lier un formulaire et une requête
Cette
requête est
dynamique. Elle attend les mots clés issus du
formulaire à l'instant T. C'est ainsi qu'elle génère des extractions en perpétuel mouvement. Et ces extractions doivent être restituées dans le sous formulaire.
- Fermer la requête en cliquant sur la croix de son onglet,
- Puis, revenir sur le formulaire en mode conception,
- Cliquer sur le sous formulaire situé dans la partie inférieure de l'interface,
- Activer l'onglet Données de sa feuille de propriétés,
- Avec la liste déroulante de sa propriété Objet source, désigner la requête R_Recherche,
Le lien est établi. Le
sous formulaire doit désormais se remplir des résultats extraits par la
requête dynamique. Mais pour cela, nous devons donner l'ordre, au clic sur le bouton, d'établir la correspondance. Il suffit de déclencher l'
exécution d'une macro actualisant les objets et enregistrements. Cette
action se nomme
AfficherTousEnreg. Nous l'avons exploitée à maintes reprises au travers des
formations Access.
- Sélectionner désormais le bouton Chercher,
- Activer alors l'onglet Evènement de sa feuille de propriétés,
- Puis, cliquer sur le petit bouton à l'extrémité de son évènement Au clic,
- Dans la boîte de dialogue qui suit, choisir Générateur de macro,
Comme vous le savez, il est aussi possible de déclencher l'exécution d'un
code VBA, avec le générateur de code.
- Cliquer sur le bouton Ok de la boîte de dialogue,
Nous basculons ainsi dans l'
éditeur de macro. La liste déroulante permet d'empiler les actions les unes en dessous des autres. Une seule nous suffit dans notre cas.
- Avec cette liste déroulante, choisir l'action AfficherTousEnreg,
Souvenez-vous, cette action est associée au clic sur le
bouton du formulaire. Et ce clic doit intervenir une fois les mots clés de recherche tapés.
- Dans le ruban Création, cliquer sur le bouton Enregistrer puis sur le bouton Fermer,
- De retour sur le formulaire, l'enregistrer à son tour (CTRL + S),
Le grand moment est arrivé. Il s'agit désormais de tester le fonctionnement de notre
formulaire de recherche.
- Enfoncer la touche F5 du clavier pour exécuter le formulaire,
Comme vous pouvez le voir, le sous formulaire est plein à la première exécution. En l'absence de mots clés, tous les enregistrements sont compatibles. Ainsi, les 244 articles sont restitués.
- Taper le mot clé Tunique et cliquer sur le bouton Chercher,
Seuls 5 produits subsistent. La recherche a été réalisée sur le
champ produit_nom. Aucune correspondance n'a pu être trouvée sur le
champ produit_ref, fort naturellement.
- Remplacer le terme de recherche par le code 3062V et valider par le bouton,
Cette fois, la recherche est effectuée sur le champ des références. Et tous les articles d'une même catégorie sont extraits. Il s'agit des vestes. Cette astuce du double critère de requête apporte donc beaucoup de souplesse à l'utilisateur. Il peut indifféremment chercher un produit sur sa désignation ou sur sa référence.