Comment réaliser un filtre alphabétique par bouton ?
TDF LibreOffice Document Liberation Project Blogs communautaires Weblate Nextcloud Redmine Ask LibreOffice Donner
Description
On souhaite réaliser quelque chose ressemblant à ceci :
Des boutons de A à Z permettent en cliquant sur la lettre G, par exemple, de ne conserver que les noms de clients commençant par G.
La solution présentée ici consiste à utiliser une seule macro associée à chaque bouton (la même macro).
Son principe est simple :
- "Remonter" de l'événement appelant (le clic sur le bouton) au "parent", c'est-à-dire le bouton sur lequel on a cliqué et son parent "à lui", c'est-à-dire le formulaire. Les boutons sont nommés BtnA, BtnB, etc. jusque BtnZ. Il suffit donc d'extraire le dernier caractère à droite et de l'utiliser dans l'instruction SQL pour...
- Filtrer puis recharger le formulaire.
Pour parfaire la présentation on définit la propriété Basculer des boutons à Oui et le programme ne garde enfoncé que le bouton du filtre courant. La propriété correspondante est State[1].
Code
La procédure est associée à l'événement Exécuter l'action des boutons :
option explicit
Sub PysFiltrer(oEvent)
dim oParent as object, oUnCtrl as object
oParent = oEvent.Source.Model.Parent
for each oUnCtrl in oParent
if left(oUnCtrl.name, 3) = "Btn" and oUnCtrl.name <> oEvent.Source.Model.Name then
oUnCtrl.State = 0
end if
next oUnCtrl
select case oEvent.Source.Model.Name
case "BtnTout"
oParent.Command = "SELECT * FROM ""Clients"" ORDER BY ""Nom"" ASC, ""Prénom"" ASC"
case else
oParent.Command = "SELECT * FROM ""Clients"" WHERE ""Nom"" LIKE '" & right(oEvent.Source.Model.Name,1) & "%'" & _
"ORDER BY ""Nom"" ASC, ""Prénom"" ASC"
end select
oParent.reload
End Sub
Document exemple
Notes
- ↑ Voir la documentation de l'API