Het filteren van een lijst is een eenvoudige maar krachtige manier om gegevens te analyseren. Echter hier gaat heel wat typ- en klikwerk aan vooraf. In sommige bestanden of dashboard zou het leuker zijn als we gewoon al typend kunnen filteren, zoiets dus:

20151028_filter_tijdens_typen

Laten we eens kijken hoe we dit kunnen doen, met wat héél eenvoudige VBA code.

Stap 1: maak een tabel waarop je wil filteren

Neem je gegevens en maak er een tabel van (CTRL+L).

20151028_filter_001

Geef deze tabel de naam ‘Gemeentes’ door op de tabel te gaan staan, in het lint te kiezen voor het tabblad ‘Ontwerpen’ en vervolgens de Tabelnaam te wijzigen:

20151028_filter_002

Stap 2: een ActiveX tekstvak invoegen

Ga in het lint naar het tabblad ‘Ontwikkelaars’, klik op ‘Invoegen’ en kies voor het ‘ActiveX Tekstvak’.

Plaats het tekstvak op je werkblad, bij voorkeur boven de tabel.

20151028_filter_003

Stap 3: het tekstvak koppelen aan een lege cel

Klik met je rechtermuisknop op het tekstvak en kies voor ‘Eigenschappen’.

Vul bij LinkedCell een lege cel naar keuze in op je werkblad (ik heb gekozen voor D5)

20151028_filter_004

Stap 4: een Change() event toevoegen aan het Tekstvak

We willen dat onze filter reageert telkens er iets wijzigt in het tekstvak.

Klik met je rechtermuisknop op het tekstvak en kies voor ‘Programmacode weergeven’.

Je komt terecht in de VBA editor. Het event (TextBox1_Change() ) wordt alvast voor je gecreëerd.

Hier moeten we wat eenvoudige VBA toevoegen, namelijk:

ActiveSheet.ListObjects("Gemeentes").Range.AutoFilter Field:=1, Criteria1:="*" & [D5] & "*", Operator:=xlFilterValues

Vervang de woorden Gemeentes en D5 door jouw eigen tabelnaam en het adres van de gelinkte cel.

De volledige VBA code ziet er dan zo uit:

Private Sub TextBox1_Change()

ActiveSheet.ListObjects("Gemeentes").Range.AutoFilter Field:=1, _
    Criteria1:="*" & [D5] & "*", Operator:=xlFilterValues

End Sub

Stap 5: een ‘Reset’ knop voorzien

VBA invoegen

Om het allemaal nog wat gebruiksvriendelijker te maken, voorzien we een reset knop. Dit doen we opnieuw met een stukje VBA. Gezien we toch nog in de VBA editor bezig zijn, zetten we deze code onder onze vorige code:

Sub ExhelpClearFilter()

    [D5] = ""
    
    ActiveSheet.ListObjects("Gemeentes").Range.AutoFilter _
        Field:=1
        
    TextBox1.Activate
    
End Sub

Deze code gaat:

  • de gelinkte cel leegmaken
  • de filter resetten zodat de rijnummers niet blauw blijven
  • opnieuw het tekstvak selecteren, zodat de gebruiker meteen terug kan beginnen typen

Knop invoegen

Sluit de VBA editor. Zo kom je terug op je werkblad terecht.

We gaan opnieuw een besturingselement invoegen, deze keer een knop. Ga in het lint naar het tabblad ‘Ontwikkelaars’, klik op ‘Invoegen’ en kies voor de ‘Knop’. Plaats de knop op je werkblad, bij voorkeur boven de tabel.

20151028_filter_005

Klik met je rechtermuisknop op de knop en kies voor ‘Macro toewijzen’. Kies vervolgens voor onze macro ‘ExhelpClearFilter’ en druk op ‘OK’.

Stap 6: testen maar!

Ga in het lint naar het tabblad ‘Ontwikkelaars’ en zet de ‘Ontwerpmodus’ uit.

Je kan nu je filterveld gebruiken!