Pour partager cette vidéo sur les réseaux sociaux ou sur un site, voici son url :
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.
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 ,
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.
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,
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,
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 ,
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 .
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,
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,
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,
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 .