Lorsque vous ouvrez un formulaire sous Access basé sur une table ou une requête, par défaut vous avez l'ensemble des données d'affichées. Il est intéressant de pouvoir filtrer cet ensemble afin de faire ressortir les données recherchées aisément et rapidement.
Nous allons donc vous apprendre à faire un petit module de recherche à plusieurs critères, quatre dans notre exemple.
Création de la table :
Pour modèle, nous allons prendre une table dans laquelle sont stockées une liste de livres. Les différents champs sont :
- Un numéro automatique qui servira de clé primaire et unique à chaque enregistrement
- Un titre (texte)
- Un auteur (texte)
- Une date d'entrée en stock (date de type JJ/MM/AA)
- Une description succincte (texte)
Vous pouvez bien sûr en ajouter d'autres, mais ces champs suffiront à traiter différents types de filtre.
Une fois la création de la table terminée, ouvrez cette table et insérez-y quelques enregistrements.
Création du formulaire :
A l'aide de l'assistant, créez un formulaire en mode Tableau, ayant pour source de données la table Livres.
Ensuite, ajoutez 5 champs textes indépendants en haut de votre formulaire, qui serviront de champs de recherche. Nommez-les Rtitre, Rauteur, Rdesc, Rdate1 et Rdate2. Ajoutez également un bouton OK nommé CmdFiltre.
Création du filtre :
Pour chaque champ texte indépendant créé non vide, nous allons vérifier s'il existe un équivalent dans la table Livres, et ceci au moment du clic sur le bouton. A chaque zone de saisie de plus, cela sera un critère de plus de filtrage (condition logique ET).
Nous avons deux types de données : une date et du texte. Pour la date, le filtre se fera sur une comparaison entre les deux dates saisies dans le filtre. Pour les textes, nous allons employer deux méthodes à titre d'exemple : le titre et la description pourront être saisis partiellement tandis que l'auteur devra être saisi à l'exactitude.
Saisissez donc ce code sur l'événement SurClic du bouton OK :
f = ""
If Not IsNull(Me.RTitre) And Me.RTitre <> "" Then
f = "titre LIKE ""*" & Me.RTitre & "*"""
End If
If Not IsNull(Me.Rauteur) And Me.Rauteur <> "" Then
If f <> "" Then
f = f & " AND auteur = """ & Me.Rauteur & """"
Else
f = "auteur = """ & Me.Rauteur & """"
End If
End If
If Not IsNull(Me.RDesc) And Me.RDesc <> "" Then
If f <> "" Then
f = f & " AND Description LIKE ""*" & Me.RDesc & "*"""
Else
f = "Description LIKE ""*" & Me.RDesc & "*"""
End If
End If
If Not IsNull(Me.Rdate1) And Me.Rdate1 <> "" And Not IsNull(Me.Rdate2) And Me.Rdate2 <> "" Then
If f <> "" Then
f = f & " AND clng([date stock]) BETWEEN " & CLng(Me.Rdate1) & " AND " & CLng(Me.Rdate2) & ""
Else
f = "clng([date stock]) BETWEEN " & CLng(Me.Rdate1) & " AND " & CLng(Me.Rdate2) & ""
End If
End If
Me.Filter = f
Me.FilterOn = True
Explications :
Tout d'abord, on vide la variable f qui servira à construire le filtre. Ensuite, pour chaque zone de recherche existante, on vérifie si ce champ contient ou non des données. Si oui, on crée le filtre relatif au champ saisi. Enfin, on affecte la variable f au filtre du formulaire, que l'on active.
Spécificités :
- Les champs auteur et description peuvent être saisis partiellement : c'est pourquoi dans le code nous mettons LIKE au lieu du signe égal, ainsi que les astérisques afin de comparer cette saisie à n'importe quel endroit du champ stocké.
- Les dates sont converties en format numérique (fonction clng) afin de pouvoir les comparer sans erreur (différents formats par exemple).
Voici le résultat :
Abonnez-vous gratuitement à la Newsletter Fiches pratiques :
Pour être informé gratuitement des nouvelles Fiches pratiques sur PC Astuces, veuillez saisir ci-dessous votre adresse e-mail: