Macros

From The Document Foundation Wiki
< Macros‎ | Base
Jump to: navigation, search

Comment réaliser un filtre alphabétique par bouton ?

On souhaite réaliser quelque chose ressemblant à ceci :

copie d'écran formulaire
Filtrer par clic sur un bouton (lettre G dans cet exemple)

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].

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


Notes :