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

Macro rijen verbergen die buiten range 2 celwaarden liggen

Status
Niet open voor verdere reacties.

formule

Gebruiker
Lid geworden
25 mei 2016
Berichten
37
Ik probeer met een macro rijen te verbergen die een waarde in de eerste cel hebben die kleiner is dan cel1 of hoger is dan cel 2

Met andere woorden, de 2 cellen geven aan welke range rijen zichtbaar moet zijn

Ik voeg een bestandje toe ter verduidelijking

De waarde in cel D5 (24) moet de eerste rij zijn die zichtbaar is, de waarde in D6 (47)moet de laatste rij zijn die zichtbaar is.

Alle rijen waarvan de waardes in kolom1 daar boven of onder liggen moeten worden verborgen.

Ik ben niet zo handig met VBA, heb zelf wat geprobeerd aan de hand van een vergelijkbare vraag op dit forum, maar ik doe iets fout.

Het liefst zou ik bij het invullen van de cellen meteen de macro's willen activeren (dus de rijen worden meteen verborgen zonder dat je eerst op een knop moet drukken)

Hoop dat het zo duidelijk is

Alvast bedankt voor jullie hulp!
 

Bijlagen

Probeer deze eens:

Code:
Sub verbergen()
Application.ScreenUpdating = False
 Rows.Hidden = False
For Each c In Range("$B$12:$B$" & Range("B65500").End(xlUp).Row)
 If c.Row < Cells(5, 4) Or c.Row > Cells(6, 4) Then
  Rows(c.Row).Hidden = True
 End If
Next
Application.ScreenUpdating = True
End Sub
 
Als je gebruik maakt van een tabel, blijf dan met de code binnen de tabel. Waarschijnlijk bedoel je wat anders dan de vraagstelling. Je wilt alle waarden in de tabel zien die voldoen aan de voorwaarden die gesteld zijn in D5 en D6?
Ik kom dan tot zoiets
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, [D5:D6]) Is Nothing And Target.Count = 1 Then
    Dim r As Range, j As Long
    With ActiveSheet.ListObjects("Tabel1").DataBodyRange
        .Rows.Hidden = True
        For j = 1 To .Rows.Count
            If .Cells(j, 1) >= [D5] And .Cells(j, 1) <= [D6] Then
                If r Is Nothing Then Set r = .Cells(j, 1) Else Set r = Union(r, .Cells(j, 1))
            End If
        Next j
        If Not r Is Nothing Then r.Rows.Hidden = False
    End With
End If
End Sub
 

Bijlagen

Geweldig!

Ik moet er even mee stoeien om het te begrijpen, maar ik denk dat ik er wel uit kom.

Hartelijk dank zover!
 
Hmmm... Bijlage niet bekeken, maar als ik de vraag zo lees zou ik zeggen dat een filter voldoende is?
 
Was wel aan het stoeien met het filter maar werd door de macrorecorder op het verkeer been gezet. (een array opbouwen met geldige waarden):rolleyes:

Met filter wordt het een beetje korter en sneller en dus efficiënter.

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, [D5:D6]) Is Nothing And Target.Count = 1 Then
    ActiveSheet.ListObjects("Tabel1").Range.AutoFilter 1, ">=" & [D5], xlAnd, "<=" & [D6]
End If
End Sub
 
Ik heb de VBA code werkend. De filter variant kreeg ik niet aan de praat.

Nu wil ik de cellen die de zichtbare range bepalen laten verwijzen naar cellen in een andere worksheet, waar dus de range ingevuld of geimporteerd zal worden

Als ik dat doe en ik verander in dat andere worksheet de getallen, de getallen in de cellen waarnaar verwezen wordt in de VBA veranderen dan netjes mee, dan heeft dat geen effect.

Ik denk dat dat te maken heeft met het feit dat ik niet zelf direct iets wijzig, waardoor de Worksheet_change niet getriggerd wordt?

Hoe kan ik dat oplossen?

Cheers!
 
Wat gaat er mis met de filter variant? Wat je met het tweede gedeelte bedoelt, begrijp ik niet. Laat het maar even een voorbeeldbestandje zien.
 
In VBA heb ik even een voorbeeldje gemaakt, zie bijlage

Ik wil dus op blad 2 de waardes veranderen, op blad 1 veranderen ze dan mee, alleen werkt de VBA dan niet...

Cheers
 

Bijlagen

Probeer het zo eens

Code:
Private Sub Worksheet_Activate()
  ActiveSheet.ListObjects("Tabel1").Range.AutoFilter 1, ">=" & Sheets("Blad2").[D2], xlAnd, "<=" & Sheets("Blad2").[D3]
End Sub

Waarbij je ActiveSheet. eventueel kan weglaten.
 
Laatst bewerkt:
Veelbelovend!

Ik zou alleen een andere actie willen voor Worksheet_activate.

Ik heb namelijk weer een andere worksheet waar een grafiek wordt weergegeven op basis van de tabel waarvan we dus de zichtbare range aanpassen.

Dus ik wijzig in blad 1 de variabelen die op blad 2 de zichtbare rijen van de tabel bepalen, op blad 3 staat een grafiek met data uit de tabel op blad 2 weergeeft en dus data weglaat die verborgen wordt.

Jouw filter werkt perfect! Echter moet ik een keer het blad met de tabel aanklikken voordat de tabel zich aanpast, waarop de grafiek zich weer aanpast.

Ik zou graag het aanklikken van het blad met de tabel onnodig willen maken, aangezien ik dat blad zal gaan verbergen.

Ik hoop dat je me kunt volgen.

Bedankt zover, dat filter is mooi!
 
Best wel moeilijk om zelf wat te bedenken. Aan u de keuze waar neer te zetten.
Code:
Private Sub Worksheet_Activate()
  Sheets("Blad1").ListObjects("Tabel1").Range.AutoFilter 1, ">=" & Sheets("Blad2").[D2], xlAnd, "<=" & Sheets("Blad2").[D3]
End Sub
 
Nou Nou,

Als ik het zelf had geweten had ik het hier niet hoeven vragen.

Het duurde even voor ik in de gaten had waar ik de code moest toepassen, maar het is uiteindelijk gelukt.

Bedankt voor de hulp
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan