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

Selection change gebeurtenis op cel met validatielijst

Status
Niet open voor verdere reacties.

tkint

Gebruiker
Lid geworden
5 dec 2011
Berichten
776
Beste,

Ik wil een vba-code starten als ik in cel C6 een nieuw gegeven kies via een validatielijst. Kan dat? Ik zou graag een voorbeeldbestand doorsturen maar ik beschik momenteel alleen over een tablet.
 
Dat kan met dit achter het werkblad:
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Address(0, 0) = "C6" Then
        [COLOR="#008000"]'Je code[/COLOR]
    End If
End Sub
 
Laatst bewerkt:
Beste,

Je code werkt perfect. Ik had een code gevonden op het forum met controle op het bereik en het aantal geselecteerde cellen in de zin van if intersect ........ maar die reageerde niet op een gebeurtenis in C6. Ik stel vast dat wanneer ik met mijn code 2 waarden met elkaar vergelijk en de waarden identiek zijn ik soms toch de boodschap krijg "berekening niet correct". Blijkbaar zijn de waarden niet identiek maar ik kan het verschil niet achterhalen. Excuses voor mijn niet professionele code.
 

Bijlagen

Waarschijnlijk het beruchte afrondingsprobleem in Excel
Probeer het zo eens
Code:
If Round(Abs(Sheets("indiv. aandeel").[C25]), 2) = Round(Abs(Sheets("info 10000-sten per eigenaar").Cells(r, 15).Value), 2) Then
 
Beste Edmoor en VenA,

Bedankt voor jullie inbreng. Je kan je suf zoeken en je vindt de fout niet maar gelukkig bestaat dit forum met leden met zeer veel ervaring. De beruchte afrondingsfout in Excel veroorzaakt de fout. Ik zou daar nooit aan denken. Ik ben weer een ervaring rijker.
 
Excuses voor mijn niet professionele code.
Geen probleem uiteraard, maar als extraatje dan hoe je de inspringpunten hoort te gebruiken, dat verhoogt de leesbaarheid:
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Address(0, 0) = "C6" Then
        For r = 2 To 10
            If Target.Value = Sheets("info 10000-sten per eigenaar").Cells(r, 1).Value Then
                If Round(Abs(Sheets("indiv. aandeel").[C25]), 2) = Round(Abs(Sheets("info 10000-sten per eigenaar").Cells(r, 15).Value), 2) Then
                    MsgBox ("Berekening correct")
                    Sheets("info 10000-sten per eigenaar").Cells(r, 16).Value = "OK"
                Else
                    MsgBox ("Berekening niet correct")
                End If
            End If
        Next
    End If
End Sub

Overigens doen deze 2 regels exact hetzelfde:
Code:
If ActiveCell.Row = 6 And Target.Column = 3 Then
If Target.Address(0, 0) = "C6" Then

Maar in een gebeurtenis macro kan je beter gebruik maken van Target i.p.v. Activecell.
 
Laatst bewerkt:
Beste Edmoor,

Ik pas met genoegen de vermelde tips toe. De eerste programmaregel met activecell.row had ik gebruikt in mijn code bij dubbele klik.
Ik vind het jammer dat in Vlaanderen geen enkel vormingscentrum voor volwassenonderwijs zich waagt aan een cursus vba. En als je een opleiding vba vindt bij bv Syntra, is die ontzettend duur.
 
Ipv een lusje kan je beter een zoekfunctie gebruiken. (is bij veel data een stuk sneller)

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
  If Target.Address(0, 0) = "C6" Then
    With Sheets("info 10000-sten per eigenaar")
      r = Application.Match(Target.Value, .Columns(1), 0)
      If Round(Abs([C25]), 2) = Round(Abs(.Cells(r, 15).Value), 2) Then
        MsgBox ("Berekening correct")
        .Cells(r, 16).Value = "OK"
       Else
        MsgBox ("Berekening niet correct")
      End If
    End With
  End If
End Sub

Omdat je gebruik maakt van een validatielijst die gebaseerd is op de te zoeken waarden hoeft er geen controle in of de waarde die je zoekt wel bestaat.
 
Laatst bewerkt:
Ik zou dit nog even aanpassen, (er wordt weleens op DEL gedrukt in een validatie-lijst):

Code:
If Target.Address(0, 0) = "C6" [B][COLOR="#FF0000"]And Target.Value <> "" [/COLOR][/B]Then
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan