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

Alfabetisch ordenen

Status
Niet open voor verdere reacties.

wieter

Terugkerende gebruiker
Lid geworden
26 jun 2009
Berichten
1.128
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
    'If Target.Address = "??" Then
    Range("$C$5:$J$54").Sort Key1:=Range("C5"), Order1:=xlAscending
    'End If
End Sub

Bovenstaande code voert onmiddellijk een alfab.ordening uit.
Die actie zou echter pas mogen starten, als zowel in kolom C, D en E iets ingevuld is.

Ik vermoed dat er een "If - Then" -routine moet bijgevoegd worden.
En dat lukt me niet.
De code achter een knop is natuurlijk een oplossing, maar het zou zonder knop moeten.

Bekijk bijlage 155369
 
Laatst bewerkt:
Natuurlijk, de intersect-functie, met Range("E5:E54") als bepalende factor.
Het was me even ontgaan.
Bedankt voor de hulp.
 
Dan nog wel rekening houden met het feit dat in de invoerrij zowel de A-, B-, Als C-kolom is ingevuld.
Want dat wilde je toch?
 
Laatst bewerkt door een moderator:
Zo dus:
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
ActiveSheet.Unprotect
    If Not Intersect(Target, Range("E5:E54")) Is Nothing Then
    Range("$C$5:$J$54").Sort Key1:=Range("C5"), Order1:=xlAscending
    End If
ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True
End Sub

Bij deze bedankt
 
wieter,
lijkt me niet helemaal juist.
Als men met jouw code de A- en/of B-cel in een rij niet invult maar de C-cel wel, dan wordt de macro wel uitgevoerd. Volgens je eerste bericht moeten alle drie de cellen worden ingevuld. Je kunt daarom m.i. beter dit gebruiken:
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Range("c5:e54"), Target) Is Nothing Then
'Deze code is geschreven door Zapatr
ActiveSheet.Unprotect
If WorksheetFunction.CountA(Range(Cells(Target.Row, 3), Cells(Target.Row, 5))) = 3 Then
Range("c5:j54").Sort Key1:=Range("c5")
End If
ActiveSheet.Protect
End If
End Sub
waarbij je er ook voor moet opletten dat in (c5:j54) de cellen niet geblokkeerd staan (dat is in je voorbeeldbestand wel het geval).
 
@zapatr

Het werkt (vind ik ) nog niet lekker.
Na elke invoer springt hij toch weer op 'beveiligd'
De sortering begint zodra Kolom E is ingevuld.
Maar dat is lastig als je kolom F tm .... nog moet invullen
Is het niet verstandiger de sortering te starten op het moment dat je de cursor in kolom C plaatst?
 
popipo,
het hangt ervan af wat de vragensteller precies wil.
Even de beveiliging buiten beschouwing gelaten: als per rij zowél de A-, B-, als C-kolom beslist moeten zijn ingevuld alvorens er gesorteerd mag worden (volgens bericht #1 was dat een vereiste), dan moet je daar ook op controleren; vandaar de counta-functie in mijn macro, hoewel dat ook op een andere manier kan.Ik weet niet wat de beweegredenen van wieter zijn om (alleen) voor die 3 kolommen te kiezen alvorens te sorteren.
En wat de beveiliging betreft: je kunt toch geen gegevens in cellen plaatsen als de cellen beveiligd zijn? Want dat is juist de bedoeling van beveiligen. Vandaar in mijn vorig bericht de zin onder de macro.
 
Ik ging er vanuit dat de beveiliging op het inlog nivo geregeld werd.
Het wordt wel lastig invoeren als je na elke invoer (evt via een WW) de beveiliging er af moet halen.

De TS heeft het inderdaad over de 3 kolommen en je hebt dat ook keurig opgelost met de counta functie.
Dat was ook mijn eerste gedachte, maar in de praktijk is dat lastig.
Je vult 3 waarden in en daarna gaat hij sorteren wil je een 4e waarde invullen dan moet je de originele regel eerst weer opzoeken.

Mijn reactie ging ook niet zo zeer op hoe je het hebt opgelost want dat voldoet keurig aan de TS zijn eisen.
De TS moet volgens mijn zijn sorteer moment aanpassen en niet alleen laten afhangen van de 3 cellen.

het hangt ervan af wat de vragensteller precies wil.
 
popipipo,
Ik ben het met je inzichten eens.
 
Laatst bewerkt:
Sorry voor mijn slordigheid, ik had die "unprotect" en "protect" moeten weglaten.
Ze hoorden nog bij het originele bestand, en waren in mijn bijlage overbodig.

@Zapatr, je hebt gelijk, mijn code werkte alleen als je kolom E als laatste invult.
Dank zij jou code is het nu perfect.
@Popi
De andere cellen mogen pas na het sorteren ingevuld worden

Bedankt allen voor het denkwerk
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan