Een combobox opvullen met gefilterde waarden

Status
Niet open voor verdere reacties.

AmaProg

Gebruiker
Lid geworden
10 sep 2012
Berichten
29
Beste,

Ik ben al enige tijd aan het googelen geweest maar helaas geen programmeerstructuren gevonden die aan mijn verwachtingen voldoen.

Het is de bedoeling om in het hoofdblad twee comboboxen op te vullen met gefilterde gegevens uit een lijst die op een ander werkblad staan.
De lijst noemt personeel en bestaat uit twee kolommen, de naam van het personeelslid en de functie.

In het hoofdblad mogen in de CBB_Directeur enkel de namen van de directieleden voorkomen en in de CBB_Bestuurchef enkel de namen van de bestuurchefs.
Ik zou zelfs graag nog een stapje verder gaan... Door het aanpassen van de titel boven de combobox die de functie weergeeft zou de inhoud van combobox moeten aanpassen.

Een vereenvoudigd voorbeeldbestand werd toegevoegd.

Wie kan mij helpen?


Bekijk bijlage Voorbeeldbestand.xlsm
 
Verwijder de 'Listfillrange' van beide comboboxen, alsook de codes om de comboboxen weer te voorzien van een Listfillrange.
Zet onderaan de tabel een subtotaalformule "=subtotaal(3;C6:C25)

Onderstaande code staat in moduleblad 'Gegevens'.
Code:
Private Sub Worksheet_Calculate()
With Sheets("Hoofdblad")
 .CBB_Directeur.List = Split(Join(Filter(Application.Transpose([if(gegevens!D6:D25="Directeur",Gegevens!C6:C25,"~")]), "~", False), "|"), "|")
 .CBB_Bestuurchef.List = Split(Join(Filter(Application.Transpose([if(gegevens!D6:D25="Bestuurchef",Gegevens!C6:C25,"~")]), "~", False), "|"), "|")
End With
End Sub

Door te filteren op 'Directeur' en 'Bestuurchef' wordt de code geactiveerd door het subtotaal, en vult de comboboxen.
 

Bijlagen

@HSV

Mooie code :thumb:

Kan nog iets compacter.
Ik zou hem ergens anders neerzetten. zodat de code slechts 1 keer wordt uitgevoerd.

Code:
Private Sub Workbook_Open()
    With Sheets("Hoofdblad")
     .CBB_Directeur.List = Split(Join(Filter([transpose(if(gegevens!D6:D25="Directeur",Gegevens!C6:C25,"~"))], "~", False), "|"), "|")
     .CBB_Bestuurchef.List = Split(Join(Filter([transpose(if(gegevens!D6:D25="Bestuurchef",Gegevens!C6:C25,"~"))], "~", False), "|"), "|")
    End With
End Sub
 
Bedankt voor jullie reactie! ;)

Hiermee kan ik al aardig weer aan de slag
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan