• Privacywetgeving
    Het is bij Helpmij.nl niet toegestaan om persoonsgegevens in een voorbeeld te plaatsen. Alle voorbeelden die persoonsgegevens bevatten zullen zonder opgaaf van reden verwijderd worden. In de vraag zal specifiek vermeld moeten worden dat het om fictieve namen gaat.

VBA in excel- advanced filter obv Form

  • Onderwerp starter Onderwerp starter Frith
  • Startdatum Startdatum
Status
Niet open voor verdere reacties.

Frith

Gebruiker
Lid geworden
26 okt 2000
Berichten
219
Hopelijk dekt de titel te lading...

Zoals enkelen hier weten ben ik een planning aan het maken.
Als bijlage treft je hem aan. Ik ben eigenlijk al erg ver, maar wil nu nog 1 functionaliteit toevoegen die me helaas niet goed lukt.

Als je dit planning opent krijg je een overzicht van medewerkers en aan welke projecten ze deelnemen. ( validatielijst staat op sheet data)

CTRL-shift p sorteert op project
CTRL-shift m sorteert op medewerker.

Nu kan je met autofilter maximaal 2 medewerkers tegelijk selecteren, terwijl het soms wenselijk is om meer dan 2 te kunnen zien. Hiervoor heb ik een knop met form gemaakt met de naam "Aangepast filter"
Hierin zit het nodig copy/paste werk, maar het begin werkt prima. Wat er gebeurt is dat dit formulier de geselecteerde waarde wegschrijft op het 3e blad "data".
Wat ik vervolgens wil is met deze 5 velden een advanced filter, maar dat gaat niet goed...

Kan niet ontdekken wat ik fout doe. Ook verdwijnt na het uitvoeren van het advanced filter het autofilter op rij 6. Het liefst zou ik die ook nog houden ( weet niet of dat mogelijk is).

Of een andere oplossing, in vba een autofilter defineren met meer dan 2 criteria ( dat zou mooiste oplossing zijn) maar kan nergens op deze site of google vinden of dat mogelijk is.

Wie kan me hiermee helpen ?
 
Laatst bewerkt:
Wat wil je precies gaan bewerkstelligen met je autofilter?
Dat je alle gegevens van de 5 geselecteerde personen onderelkaar op een extra blad wil hebben?

Kijk ook eens naar het vullen van je combo boxen:
Code:
For Each cPart In ws.Range("Werknemers")
  With Me.ComboBox1
    .AddItem cPart.Value
    .List(.ListCount - 1, 1) = cPart.Offset(0, 1).Value
  End With
Next cPart
kan makkelijk:
Code:
With Me.ComboBox1
        .RowSource = "Data!Werknemers"
End With
veranderd worden.
Ook met deze methode houdt je de lege regels in je combobox.
 
Laatst bewerkt:
Bedankt voor je feedback.
Ik werk voor het eerst met een dergelijk formulier, dus heb dit gewoon ergens weggehaald... Zal het aanpassen.

Wat ik wil :

Als je nu in cel A6 met autofilter een naam selecteert krijg je alle projecten te zien waar deze persoon in zit.
Met aangepast autofilter kan je 2 waarden aangeven...Als je dat doet, krijg je van de hele lijst 2 medewerkers geselecteerd.

Wat ik dus wil is de mogelijkheid om meer dan 2 medewerkers uit te filteren... vandaar dat ik als alternatief het formulier bedacht heb.

De gegevens van de selectie wil ik liever niet op een ander blad, maar gewoon op dezelfde plek, net als dat autofilter werkt. En dat als je op de knop reset filter drukt, ook gewoon weer alle gegevens zichtbaar worden.

Alvast bedankt voor je tijd!
 
Bij een advanced filter moet je altijd min. drie regels tussen de onderkant van je criteriagegevens en je zoekbereik hebben. Vandaar dat hij niet werkt.
Ook krijg ik meer dan drie crieteria niet aan het werk.
 
aha...ok. In ieder geval bedankt voor het meedenken.

Wellicht iemand anders een oplossing??
 
Heb inmiddels er nog weer veel geprobeerd, maar helaas nog geen oplossing gevonden...

Heb eigenlijk 2 concrete vragen :

Ik wil OF het probleem oplossen door de volgende macro uit te breiden naar MEER dan 2 criteria... (als dat kan)

Selection.AutoFilter Field:=2, Criteria1:="=naam medewerkers A", Operator _
:=xlOr, Criteria2:="=naam medewerker B"

logisch denken zou mij zeggen dat het dan
Selection.AutoFilter Field:=2, Criteria1:="=naam medewerkers A", Operator _
:=xlOr, Criteria2:="=naam medewerker B", Operator _
:=xlOr, Criteria3:="=naam medewerker C"

Zou zijn, maar dat werkt dus niet..

Andere oplossing is zoals ik suggereer in bijgevoegd bestand doormiddel van het speciaal formulier, die met behulp van een range een advanced filter de opdracht laat doen.

Iemand suggesties??? Zou mega cool zijn :thumb:
 
Ik blijf ondertussen zelf ook gewoon doorproberen... het gekke is dat advanced filter helemaal niet wil filteren met mijn data, ook niet als ik het gewoon braaf via het menu doe...

Dus blijkbaar ligt het niet aan de vba, maar is er een andere reden waarom het filter niet werkt....

Misschien dat iemand daar een oplossing voor heeft?
 
Lijkt wel zo een monoloog... maar probeer zoveel mogelijk info te geven.

Ik heb alle data en vb overgezet naar een nieuw document... en wat denk je. Het advanced filter werkt meteen goed.... MAAR!!!

enkel 1 keer... een tweede keer doet hij het daar ook niet meer....

Misschien dat iemand iets aan deze info wat heeft??
 
Lijkt wel zo een monoloog... maar probeer zoveel mogelijk info te geven.

Ik heb alle data en vb overgezet naar een nieuw document...

Voeg dat dan maar eens bij. Ik beloof niets.
 
Hierbij het nieuwe bestand...

Nu werkt het filterform blijkbaar ook niet meer, maar dat geeft niet zoveel...

Waar het om gaat is dat het advanced filter gewoon werkt,.... en dat doet hij dus niet....


Alle hulp is welkom! Alvast bedankt voor alle tijd
 
Laatst bewerkt:
Let op!!!!! Dit is een voorbeeld zoals het NIET moet!!!!!
Het laat zien hoe je met een loop een hele trage verwerking van je gegevens kan maken.

Tevens werken je comboboxen weer omdat je met het overzetten niet je "werknemers" bereik had gedefinieerd. Deze worden nu weer gevuld.

Zal zeker nog een keer een poging wagen met advance filter :)
 

Bijlagen

HAHAHA< super mooi dit! Ik las nog... methode die veel tijd kost... denk nog, zal best meevallen toch? mag best paar seconden duren... Heb ondertussen even beirtje gehaald...

Wel erg goed resultaat! Precies wat ik zocht. Als er geen andere oplossing is, dan houd ik dit er zeker in!

Bedankt voor je meedenken en tijd! Mocht je een snellere methode verzinnen... ben ik zeker van de partij :love:
 
Weet dat dit het ongeveer moet zijn maar duurt wel erg lang voordat er wat weergegeven wordt. :confused: Misschien heb ik morgen nog wat tijd om er mee te spelen. Ben erg benieuwt of er nog iemand bij springt ..................
 
Neem maar even de brutaliteit om zo voor het weekend deze vraag nog even een schopje omhoog te geven... wellicht dat iemand een geniale ingeving heeft :-) :o
 
Neem maar even de brutaliteit om zo voor het weekend deze vraag nog even een schopje omhoog te geven... wellicht dat iemand een geniale ingeving heeft :-) :o

Laat de vraag maar rustig staan, ik doe wel eens een poging maar niet nu.
 
Super ! alvast bedankt!!

Tot die tijd blijf ik gewoon proberen, vind ik een betere oplossing laat ik het natuurlijk weten!
 
ik schop deze een anderhalve maand later toch nog even omhoog... wellicht dat iemand een oplossing heeft? Of wigi wellicht tijd?

Ben hier nog steeds niet uit waarom het niet werkt... Iemand een idee?
 
Code werkt nog niet maar heb weinig tijd om hem vandaag of morgen af te maken (eindig morgen bij mijn baas en begin vrijdag bij een andere).

Gaat om het idee om de juiste namen uit je comboboxen te zoeken in je werkblad.
Krijg de selectie nog niet omgekeerd. Kan ze wel verbergen alleen het moet andes om zijn (de andere regels moeten verborgen worden). Misschien handiger om ze per regel even over te zetten naar een ander blad, nadeel is dat je ze dan niet makkelijk kan aanpassen.

Hou hem in ieder geval warm, en als je er zelf uitkomt dan zien we dat graag hier vermeldt worden.

Succes.

Code:
Private Sub cmdFilter_Click()
Dim c As Range
Dim laatsteregel As Long
Dim cCont As Control

Application.ScreenUpdating = False

laatsteregel = Sheets("P&SO - Masterplanning").Range("B65536").End(xlUp).Row
Sheets("P&SO - Masterplanning").Rows("6:" & laatsteregel).Hidden = False

    With Sheets("P&SO - Masterplanning").Range("B6:B" & laatsteregel)
        'hier lopen we door de elementen op je userform heen
        For Each cCont In Me.Controls
           'voor ieder element wat een combobox is lopen we de volgende code door
            If TypeName(cCont) = "ComboBox" Then
                Set c = .Find(cCont, LookIn:=xlValues)
                If Not c Is Nothing Then
                    firstAddress = c.Address
                    Do
                        c.EntireRow.Hidden = True
                        Set c = .FindNext(c)
                    Loop While Not c Is Nothing And c.Address <> firstAddress
                End If
            End If
        Next cCont
    End With
    
Application.ScreenUpdating = True

End Sub
 
Status
Niet open voor verdere reacties.

Nieuwste berichten

Terug
Bovenaan Onderaan