Bonjour et bienvenue pour la suite de l’article sur les Listebox sur Access.

La dernière fois nous avions parler des zones de liste associée à une table. Aujourd’hui nous allons continuer sur le même thème en s’intéressant au filtre possible sur les zones de liste.

Si vous n’êtes pas allés voir le premier article, je vous invite fortement à le faire.

Nous allons reprendre la table définie précédemment et pour avoir un exemple complet, je vais afficher toutes les valeurs de la table sauf le N° de l’utilisateur : 

Tuto access Listebox suite

Le but de cet article va être de pouvoir filtrer la zone de liste en fonction d’information que l’utilisateur aura rentrée.

Nous allons légèrement modifier le formulaire pour intégrer la saisie d’information. Pour cela j’ajoute des zones de texte au-dessus de la zone de liste.

Une fois les zones de texte ajoutées, nous allons passer sur la partie programmation.

Dans un premier temps, nous allons recréer la requête qui permet d’afficher la table dans la zone de liste.

Pour cela :

Xsql = « SELECT Table1.N°, Table1.Nom, Table1.Prenom, Table1.Adresse1, Table1.Adresse2, Table1.CP, Table1.Ville, Table1.DateNaissance FROM Table1 »

Cette requête va permettre de sélectionner toute les données présente dans la table. 

Nous allons maintenant mettre en place les filtres. Chaque filtre représente une condition « WHERE » dans la requête. 

Pour éviter toute erreur, nous allons faire un premier filtre pour que le N° d’utilisateur soit toujours supérieur à 0 (ce qui est toujours vrai) :

Xsql = « SELECT Table1.N°, Table1.Nom, Table1.Prenom, Table1.Adresse1, Table1.Adresse2, Table1.CP, Table1.Ville, Table1.DateNaissance FROM Table1 WHERE N° > 0 »

Nous allons ensuite faire le filtre pour le nom. Pour ce filtre nous souhaitons avoir tous les prénoms qui commenceront par les caractères saisit par l’utilisateur. 

Dans mon exemple, le champ de saisis du nom est le champ « texte2 » :

Sub ReqSql()

Dim Xsql As String 

Xsql = « SELECT Table1.N°, Table1.Nom, Table1.Prenom, Table1.Adresse1, Table1.Adresse2, Table1.CP, Table1.Ville, Table1.DateNaissance FROM Table1 WHERE Table1.N° > 0 » 

If Nz(Me.Texte2, 0) <> 0 Then

    Xsql = Xsql &  » AND Table1.Nom LIKE «  » » & Me.Texte2 & « * » » »

End If

Me.Liste0.RowSource = Xsql 

End Sub

La fonction ReqSql recréer la requête principale pour être sûr d’afficher quelque chose. Elle teste ensuite le contenu de la zone de texte « texte2 ». S’il y a quelque chose alors elle ajoute à la requête le « LIKE » qui lui permet de trouver tous les noms qui commence par le contenu de « texte2 ». 

Deuxième exemple, je vais maintenant filtrer par date de naissance. Dans le premier exemple j’avais demandé à ce que le nom commence par le contenu de la zone de texte. Maintenant je vais demander à ce que la date soit identique au contenu de la zone de texte.

Sub ReqSql()

Dim Xsql As String 

Xsql = « SELECT Table1.N°, Table1.Nom, Table1.Prenom, Table1.Adresse1, Table1.Adresse2, Table1.CP, Table1.Ville, Table1.DateNaissance FROM Table1 WHERE Table1.N° > 0 » 

If Nz(Me.Texte2, 0) <> 0 Then

    Xsql = Xsql &  » AND Table1.Nom LIKE «  » » & Me.Texte2 & « * » » »

End If 

If Nz(Me.Texte8, 0) <> 0 Then

    Xsql = Xsql &  » AND Table1.DateNaissance = # » & Me.Texte8 & « # »

End If 

Me.Liste0.RowSource = Xsql 

End Sub

Vous avez surement remarqué que pour filtrer la date j’ai ajouté #. C’est obligatoire pour filtrer sur une date.

Vous pouvez maintenant filtrer tous les champs que vous voulez sur une zone de liste via une zone de texte.

Pour simplifier les filtres, je vous conseille de créer une fonction qui prend en compte tous les filtres et d’exécuter la fonction sur l’événement « AfterUpdate » de toutes les zones de texte.

Merci d’avoir suivi ces artiles sur les listebox sur Access. Je vous laisse pour aujourd’hui et je vous dis à bientôt sur notre site.