formateur informatique

Filtrer un formulaire Access au cours de la frappe

Accueil  >  Bureautique  >  Access  >  Access Astuces  >  Filtrer un formulaire Access au cours de la frappe
Livres à télécharger


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


Inscription Newsletter    Inscription Newsletter
Sujets que vous pourriez aussi aimer :


Filtrer un formulaire au cours de la saisie

Filtrer les enregistrements d'un formulaire au cours de la frappe dans une zone de recherche est une solution que nous avons déjà aboutie grâce au code VBA Access. Mais cette nouvelle astuce propose de réaliser ce tour de force sans l'appui du code. Et de surcroit vous le constaterez, la mise en oeuvre est très simple.

Filtrer un formulaire Access au cours de la saisie des termes de recherche

Dans l'exemple illustré par la capture, nous travaillons sur une base de données des activités de sorties recensées en France. Dans une zone de saisie dédiée, l'utilisateur tape le ou les termes de recherche. A chaque caractère inscrit, la liste des enregistrements du formulaire se filtre automatiquement pour répondre à la demande. Et cette demande peut avoir lieu sur n'importe quel champ de la table.



Base de données source
Pour la mise en place de cette nouvelle astuce, nous proposons de récupérer tout d'abord cette base de données hébergeant d'ailleurs ce formulaire déjà construit.
  • Télécharger le fichier compressé filtrer-formulaire-saisie.rar en cliquant sur ce lien,
  • Le décompresser dans le dossier de votre choix,
  • Double cliquer sur la base de données résultante pour l'ouvrir dans Access,
  • Cliquer sur le bouton Activer le contenu du bandeau de sécurité,
  • Dans le volet de navigation, double cliquer sur le formulaire f_sorties pour l'exécuter,
Nous débouchons donc sur le formulaire tabulaire énonçant toutes les activités de sorties archivées dans la table t_sorties. Et en consultant la petite barre de navigation en bas de la fenêtre Access, vous constatez qu'elles sont au nombre de 997. Nous disposons donc de suffisamment de contenu pour réaliser des filtres instantanés intéressants. Ce formulaire est construit sur la requête r_sorties. A ce stade, elle se contente de restituer fidèlement les enregistrements de la table. Mais nous le verrons, elle s'avèrera précieuse pour le déploiement de cette astuce.

L'utilisateur doit donc saisir les termes de recherche dans la zone de saisie (Chercher), placée dans l'entête du formulaire. Et cette recherche doit considérer que les mots clés peuvent se trouver dans n'importe lequel des quatre champs. Pour l'instant bien sûr, si vous tapez des mots clés, le formulaire ne réagit pas.

Requête de correspondance approximative
La première astuce consiste à bâtir des expressions de correspondance entre chacun des quatre champs de la requête et la zone de recherche sur le formulaire. Cette dernière est nommée Cherche. Mais ces expressions ne doivent pas être bâties sur les mêmes lignes de la grille de requête. Elles doivent être vérifiés indépendamment et non recoupées.
  • Dans le volet de navigation, cliquer droit sur la requête r_sorties,
  • Dans le menu contextuel, choisir le mode création,
Nous basculons ainsi dans la vue en conception de la requête.
  • Cliquer droit dans la zone Critères du champ s_rs,
  • Dans le menu contextuel, choisir la commande Créer,
Créer une expression de correspondance dans la grille de requête Access

Nous affichons ainsi le générateur d'expression.
  • Débuter la syntaxe par l'opérateur Comme suivi d'un espace,
  • Dans la liste de gauche, déployer complètement l'arborescence des formulaires,
  • Puis, cliquer sur le formulaire f_sorties pour le sélectionner,
Cette action a pour effet, d'afficher le nom de tous ses contrôles dans la liste du centre.
  • Dans la liste centrale, double cliquer sur le nom du contrôle Cherche,
Ainsi, nous complétons la syntaxe à la suite de l'opérateur Comme. Mais elle n'est pas terminée. En l'état, elle réalise la correspondance stricte avec le ou les termes de recherche. Or, nous souhaitons filtrer le formulaire au cours de la frappe.Il s'agit donc de vérifier les enregistrements pour lesquels ce champ commence bien par les caractères tapés.
  • A la fin de la syntaxe, ajouter le caractère de concaténation (&) suivi d'un espace,
  • Puis, inscrire le symbole de l'astérisque entre guillemets, soit : "*",
De cette manière, nous considérons les premiers caractères tapés, peu importe ce qui suit.

Expression de correspondance entre requête et formulaire Access pour filtrer au cours de la saisie

Notre expression de correspondance est finalisée : Comme Formulaires![f_sorties]![Cherche] & "*".
  • Cliquer sur le bouton Ok du générateur d'expression pour valider la syntaxe,
C'est cette même expression de correspondance que nous devons répliquer dans la zone Critères des autres champs. Mais attention, pour ne pas les recouper et exprimer le OU, nous devons à chaque fois les placer sur une ligne différente.
  • Coller trois fois l'expression de correspondance sur des lignes différentes,
Critères de requête Access non recoupés pour le OU

Désormais, il suffira que le terme de recherche soit trouvé dans l'un des quatre champs pour que l'enregistrement correspondant soit considéré comme concordant.
  • Enregistrer (CTRL + S) et fermer la requête,
Nous sommes ainsi de retour sur le formulaire en mode exécution. Malgré nos modifications sur la source de données, aucun filtre ne se produit pour l'instant. Cette source doit être actualisée au cours de la frappe. Et pour cela, nous devons gérer un événement précis.
  • A gauche du ruban Accueil, cliquer sur la flèche du bouton Affichage,
  • Dans la liste des propositions, choisir le mode Création,
Nous basculons ainsi dans la vue en conception du formulaire.



Actions de macro au cours de la saisie
Ces sont des actions de macro particulièrement spécifiques qui doivent être déclenchées à chaque fois qu'un caractère est tapé dans la zone de recherche. Il est donc question de gérer un événement associé au contrôle nommé Cherche. Plusieurs peuvent faire l'affaire. Mais l'un d'entre eux est particulièrement dédié.
  • Cliquer sur la zone de recherche pour la sélectionner,
  • Puis, activer l'onglet Evénement de sa feuille de propriétés,
Si cette feuille de propriétés n'est pas visible, vous pouvez l'afficher en cliquant sur le bouton Feuille de propriétés dans le ruban contextuel Création.
  • Cliquer dans la zone de son événement Sur changement pour le désigner,
  • Puis, cliquer sur le petit bouton qui se propose à son extrémité droite,
  • Dans la boîte de dialogue qui suit, choisir le générateur de macro et valider par Ok,
Nous basculons ainsi dans l'éditeur de macro Access. Une liste déroulante se propose. Elle permet de choisir des actions à déclencher.
  • Déployer la liste déroulante et choisir l'action AfficherTousEnreg,
C'est cette commande qui permet de rafraîchir et d'actualiser les sources de données. En conséquence, la requête r_sorties mettra à jour ses critères de correspondance à chaque lettre tapée.
  • 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),
  • Fermer le formulaire puis l'exécuter en double cliquant sur son nom,
Saisie succesive de lettres désactivée sur formulaire Access

Si vous tapez une lettre, le formulaire se filtre instantanément. Mais la saisie de la lettre suivante crée la surprise. Elle s'inscrit dans un autre contrôle. En effet, l'action AfficherTousEnreg actualise la source de données et rafraîchit le formulaire. En conséquence, c'est le contrôle possédant l'index de tabulation fixé à zéro qui est activé dans le formulaire et non dans l'entête du formulaire.



Réactiver la saisie par macro
Les actions de macro sont redoutables. Elles permettent pratiquement de réaliser tout ce qu'il est possible de faire avec le code, mais sans utiliser le VBA. Et ce sont des actions particulières qui permettent premièrement de resélectionner le contrôle puis de replacer le point d'insertion à la fin de la saisie. Ainsi, l'utilisateur n'y verra que du feu. Il pourra poursuivre naturellement sa saisie pour que le formulaire se filtre automatiquement au cours de la frappe.
  • A gauche du ruban Accueil, cliquer sur la flèche du bouton Affichage,
  • Dans la liste des propositions, choisir le mode Création,
  • Sur le formulaire en conception, cliquer sur la zone de texte Cherche pour la sélectionner,
  • Activer l'onglet Evénement de sa feuille de propriétés,
  • Cliquer sur le petit bouton associé à son événement Sur changement,
Cette fois, comme une macro existe déjà, nous basculons directement dans l'éditeur.
  • Dans le ruban Création, cliquer sur le bouton Afficher toutes les actions,
Afficher toutes les actions de macro Access

En effet, l'une d'entre elles est particulière pour simuler des actions au clavier. Et ces actions ne sont pas toutes disponibles par défaut, parfois pour des raisons de sécurité.
  • Déployer la liste déroulante sous la première action,
  • Choisir la commande AtteindreContrôle,
  • Dans la zone Nom du contrôle, saisir : Cherche,
Cette action doit avoir pour effet de resélectionner la zone de recherche. Mais ce n'est pas encore suffisant. Elle sera sélectionnée globalement. La reprise de la saisie écraserait l'ancienne inscription. Nous devons donc placer le point d'insertion à la fin des lettres en cours. Et pour cela, nous allons simuler une action au clavier.
  • Avec la liste déroulante du dessous, choisir l'action EnvoiTouches,
  • Dans la zone Touches, taper F2 entre accolades, soit : {F2},
Comme vous le savez sans doute, la touche F2 permet d'activer la saisie.

Simuler des actions au clavier sur un formulaire Access par action de macro

Il peut s'agir d'un nom de fichier, d'une cellule dans Excel ou encore d'une zone de texte dans Access.
  • 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),
  • Pour une simulation complète, le fermer en cliquant sur la croix de son onglet,
  • Puis, double cliquer sur son nom dans le volet de navigation pour l'exécuter,
Filtrer les enregistrements du formulaire tabulaire Access à chaque lettre tapée dans la zone de saisie

Désormais, vous pouvez saisir plusieurs caractères à la suite et aussitôt, les enregistrements du formulaire se filtrent. Et comme nous le disions, nous pouvons très bien engager une recherche sur une ville par exemple, afin d'isoler ses activités de sortie. La solution est donc définitivement souple.



Activer une zone au chargement du formulaire
Cependant et pour la parfaire, il apparaît opportun d'activer la zone de saisie au chargement du formulaire. Ainsi, l'utilisateur n'aura pas à se saisir de la souris pour y placer le point d'insertion. Il suffit simplement d'exploiter de nouveau l'action de macro AtteindreContrôle.
  • A gauche du ruban Accueil, cliquer sur la flèche du bouton Affichage,
  • Dans la liste des propositions, choisir le mode Création,
Nous sommes de retour en conception et le formulaire est actif par défaut. Pour preuve, son nom apparaît en entête de la feuille de propriétés.
  • Activer l'onglet Evénement de cette dernière,
  • Cliquer sur le petit bouton associé à son événement Sur activation,
  • Dans la boîte de dialogue qui suit, choisir Générateur de macro et valider par Ok,
Déclencher une action de macro sur activation du formulaire Access

Nous sommes de retour dans l'éditeur de macro. L'action que nous allons entreprendre se déclenchera dès que le formulaire est activé, dont son chargement.
  • Avec la liste déroulante, choisir l'action AtteindreContrôle,
  • Dans la zone Nom du contrôle, saisir Cherche,
  • Dans le ruban Création, cliquer sur le bouton Enregistrer puis sur le bouton Fermer,
  • De retour sur le formulaire l'enregistrer à son tour puis le fermer,
  • Double cliquer alors sur son nom dans le volet de navigation pour l'exécuter,
  • Taper directement les premiers caractères de recherche,
Activer la zone de saisie automatique sur ouverture du formulaire Access

Comme vous le constatez, la saisie est active par défaut et le formulaire est prêt à se filtrer. Une petite anomalie reste cependant à corriger. L'espace n'est pas considéré. L'action EnvoiTouche se place après le dernier caractère visible. Nous solutionnerons ce cas à l'occasion des astuces VBA Access.

 
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