• 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 ontdubbelen en sorteren naar ander tabblad

Status
Niet open voor verdere reacties.

Ivanhoes

Gebruiker
Lid geworden
6 jun 2015
Berichten
67
Hoi mensen,

Ik heb een macro opgenomen, die uitstekend werkt.
Nu wil ik deze macro alleen automatisch laten draaien, op het moment dat het tabblad "Beheerders" verlaten wordt.
Dus ik dacht: dat moet met onderstaande code:


Code:
Private Sub Worksheet_Deactivate()
    Sheets("Validatielijsten").Select
    ActiveSheet.Unprotect Password:="1234"
    Sheets("Beheerders").Select
    Range("B4:B31").Select
    Selection.Copy
    Sheets("Validatielijsten").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Application.CutCopyMode = False
    ActiveSheet.Range("$B$3:$B$31").RemoveDuplicates Columns:=1, Header:=xlYes
    ActiveWorkbook.Worksheets("Validatielijsten").Sort.SortFields.Clear
    ActiveWorkbook.Worksheets("Validatielijsten").Sort.SortFields.Add Key:=Range( _
        "B4"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
        xlSortNormal
    With ActiveWorkbook.Worksheets("Validatielijsten").Sort
        .SetRange Range("B4:B31")
        .Header = xlNo
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
    ActiveSheet.Protect Password:="1234"
End Sub

Maar dit werkt dus niet. Ik heb totaal geen idee waar dit nu aan ligt. Misschien dat iemand mij kan helpen?

De bedoeling is alsvolgt:

- Kopieer de gegevens van kolom B, tabblad Beheerders naar tabblad Validatielijsten, kolom B
- Verwijder hiervoor eerst de beveiliging, code "1234", op tabblad Validatielijsten
- Kopier alleen de waarden
- Verwijder de dubbele gegevens
- Sorteer de overgebleven gegevens op alfabetische volgorde
- Zet de beveiliging "1234" terug op het tabblad Validatielijsten

Zie ook het bijgevoegde bestand.

Alvast bedankt en groetjes,

Ivanhoes.
 
Bestand

Hahaha....hierbij alsnog het bestand.
 

Bijlagen

  • Ontdubbelen en sorteren naar ander tabblad.xlsm
    17,7 KB · Weergaven: 39
Zet in blad 'validatielijsten' cel B3 → Naam i.p.v. beheerders.
Code in blad 'beheerders'.
Code:
Private Sub Worksheet_Deactivate()
With Sheets("validatielijsten")
 Range("B3").CurrentRegion.AdvancedFilter xlFilterCopy, .Range("b3"), .Range("B3"), True
 .Range("b3").CurrentRegion.Sort .[b3], , , , , , , xlYes
End With
End Sub
 
Hoi Harry,

Bedankt voor je reactie!

Ik heb de code getest in het oorspronkelijke bestand en begrijp er niets van.....maar hij werkt wel
bijna helemaal zoals hij zou moeten doen.

Het enige wat ik nog graag zou willen weten, is of ik de plaats waar ik de gesorteerde lijst wil
plaatsen ook nog kan laten veranderen. Die komt nu steeds op tabblad validatielijsten, cel B4
en verder naar beneden.

Ik wil graag weten hoe ik ervoor kan zorgen dat de gesorteerde lijst bijvoorbeeld op tabblad
validatielijsten, cel G7 begint.

Dit is de code die ik nu heb, enigszins aangepast:

Code:
Private Sub Worksheet_Deactivate()

Application.ScreenUpdating = False
    Worksheets("Validatielijsten").Unprotect Password:=1234
        With Sheets("Validatielijsten")
        Range("B3").CurrentRegion.AdvancedFilter xlFilterCopy, .Range("b3"), .Range("B3"), True
        .Range("b3").CurrentRegion.Sort .[b3], , , , , , , xlYes
        End With
    Worksheets("Validatielijsten").Protect Password:=1234
Application.ScreenUpdating = True
    
End Sub

Je ziet dat ik in deze code ook de beveiliging verwerkt heb.

Alvast bedankt voor je hulp en groetjes,

Ivanhoes.
 

Bijlagen

  • Ontdubbelen en Sorteren naar ander beveiligd tabblad.xlsm
    17,7 KB · Weergaven: 42
Hallo Ivanhoes,

Code:
With Sheets("Validatielijsten")
        Range("B3").CurrentRegion.AdvancedFilter xlFilterCopy, .Range("G7"), .Range("G7"), True
        .Range("G7").CurrentRegion.Sort .[G7], , , , , , , xlYes
        End With
 
Het kan toch niet zo heel moeilijk zijn om zelf even de range aan te passen?

Code:
Private Sub Worksheet_Deactivate()
Application.ScreenUpdating = False
With Sheets("Validatielijsten")
    .Unprotect 1234
    [B3].CurrentRegion.AdvancedFilter xlFilterCopy, .[G7], .[G7], True
    .[G7].CurrentRegion.Sort .[G7], , , , , , , xlYes
    .Protect 1234
End With
End Sub
 
Jongens,

Alweer bedankt voor de reacties! Ik ben hier weer heel blij mee.

@VenA: Op zich zou de range aanpassen niet moeilijk moeten zijn, maar ik ben pas beginnend VBA-gebruiker.
En er zijn hier 5 mogelijkheden en combinaties daarvan om de range aan te passen (alles met B3). Dat probeerde ik ook via trial
and error, maar ik kwam er niet uit.

Dus: weer bedankt voor jullie hulp!

Groetjes,

Ivanhoes.
 
Hoi,

De eerste range("B3") of [B3] zonder voorlooppunt heeft betrekking op het actieve blad die je verlaat.
De .Range(B3") of .[B3] met voorlooppuntje heeft betrekking op Sheets("Validatielijsten").

Code:
With Sheets("Validatielijsten")

Alles wat met een . begint heeft betrekking op dat blad. ;)

Graag gedaan en succes.
 
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan