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

opvulkleur van een cel automatisch wijzigen, als er andere cel van kleur verandert

Status
Niet open voor verdere reacties.

HORADADA

Gebruiker
Lid geworden
4 okt 2011
Berichten
37
Dag allemaal,
Ik stel misschien een domme vraag, maar ik kan het maar niet vinden.

In kolom A worden de cellen (rijwaarde) manueel van kleur gewijzigd, en ik wil dat de rijwaarde van kolom XX automatisch dezelfde opvulkleur krijgt als de rijwaarde in kolom A.

in kolom XX worden er andere waarden berekend dan in kolom A.
Ik wil enkel dat de opvulkleur van XX10 altijd gelijk is als die van cel A10
als ik cel A10 van kleur wijzig, dat automatisch de de opvulkleur van cel XX10 dezelfde wordt als die van A10.

Is dat op te lossen met een gewone formule?

dank!
 
Dit is niet op te lossen met een gewone formule.
Misschien is er een mogelijkheid om te werken via Voorwaardelijke Opmaak als je de in te vullen waardes kent.
Anders wordt het VBA.
 
Bedankt Cobbe,
nu moet ik ten minsten geen tijd meer verliezen om dat uit te zoeken.
Ik zal het proberen te doen met VBA

Kan er mij iemand een tip geven hoe ik dat kan doen met VBA?

bedankt
 
Is het echt zo belangrijk dat het met VBA moet? is kolom Kopieren > plakken speciaal > opmaak niet voldoende?

als je dit soort dingen wil automatiseren ben je meestal niet in de goede richting aan het werken.

ik zou dan toch de oplossing in een andere richting gaan zoeken. daar leer je meestal ook nog wat van.
het jammere daarvan is dat je dat altijd pas gaat doen NADAT je tegen een limiet bent aangelopen ;)

gr, Mark.
 
Laatst bewerkt:
Ondertussen kan je wellicht met deze code vooruit.
Het is natuurlijk afhankelijk van het bestand en wat je precies wil bereiken.
Code:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Intersect(Target, Range("A:A")) Is Nothing Then Exit Sub
Cells(ActiveCell.Row, 648).Interior.ColorIndex = ActiveCell.Interior.ColorIndex
End Sub
 
hartelijk bedankt Cobbe!
Ik heb dat uitgeprobeerd, maar kan het nog niet aan de praat krijgen.
Ik ben in ieder geval al tevreden, dat ik nu in de goede richting kan verder zoeken.


@ Mark xl
Het is niet zoals U laat uitschijnen.
wat U voorstelt beantwoord niet aan mijn verwachtingen.
Misschien omdat ik deze optie niet juist gebruik, dat kan zijn.
Als ik de werkwijze toepas die U voorstelt, dan verandert de volledige opmaak. (niet alleen kleur, maar ook lettertype, de bijlage (€, m., kg)), en ik wil enkel en alleen dat de kleur gelijk is aan een andere reeks cellen, maar wil niet dat de andere items veranderen.

Misschien heb ik Uw uitleg niet goed begrepen, maar ik krijg het op de traditionele manier niet voor elkaar.
Ik ben volgens U tegen mijn limiet aangelopen, maar Uw idee werkt ook niet zoals ik wil, zodat ik nog altijd open sta mocht U mij de weg willen wijzen, hoe ik dat kan realiseren, zonder dat ik VBA zou moeten gebruiken.
vriendelijke groet.
 
Wat ik bedoel is dat je misschien een andere oplossing kunt gebruiken .
Er is namelijk geen gebeurtenis in standaard Excel om kleurwijziging van een celaf te vangen. een worksheet_change event wordt niet getriggerd door het wijzigen van de kleur van een cel.

Bottomline: het kan niet automatisch

wat wel kan, is een variant met een change event, die de cel pas opkleurt als je nadat de cel is gekleurd de cel nog een keer selecteert.
namelijk deze manier:

Plaats deze code in de werkblad module van jouw keuze.
verander de waarde van constante MUTATIECEL naar de juiste kolom die je wilt wijzigen.
Code:
Option Explicit

Private Const MUTATIECEL As String = "X"        'pas aan naar behoefte
Private Const CHECK_RANGE As String = "A:A"     'kolom A ,pas aan naar behoefte

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

    On Error GoTo allesgeselecteerd:
    'roept overflow error op als alle cellen worden geselecteerd.
    '   deze moet worden afgevangen
    If Target.Cells.Columns > 1 Then

        Exit Sub

    End If
    
    If Not Intersect(Target, CheckKolom) Is Nothing Then

        'afvangen lege cellen (anders wordt alles wit)
        ColorMutationCell Target

    End If

    On Error GoTo 0

allesgeselecteerd:

End Sub

Private Function CheckKolom() As Excel.Range

    Set CheckKolom = ActiveSheet.Range(CHECK_RANGE)
    
End Function

Private Sub ColorMutationCell(ByVal Target As Range)
'Kleuren cel in rij "mutatierij" met kleur van doorgegeven cel

    If Target.Interior.ColorIndex = xlNone Then
        'deze check is nodig omdat anders cellen een witte achtergrond krijgen
        ActiveSheet.Range(MUTATIECEL & Target.Row).Interior.ColorIndex = xlNone

    Else

        ActiveSheet.Range(MUTATIECEL & Target.Row).Interior.Color = Target.Interior.Color

    End If

End Sub

deze methode is niet consistent en omslachtig, omdat je een cel nogmaals moet selecteren voordat een "selectionchange" event wordt getrigged, nadat de kleur is veranderd (een kleurverandering triggert geen "worksheet_change" event.)

Dan zou je de code kunnen uitbreiden door de volgende methode aan je macro toe te voegen, en deze toe te voegen aan de worksheet_Selectionchange:

Code:
Public Sub Color_all()
'roep deze functie aan om de
    Dim cell as Excel.Range

    For Each cell In Intersect(ActiveSheet.UsedRange, Range(CHECK_RANGE))
        
        ColorMutationCell Cell
        
    Next

End Sub

'voorbeeld:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    ...
    ...
    Color_all
End Sub

deze methode maakt gebruik van de methode ColorMutationCell uit het vorige codeblok. Nu worden alle cellen van de "mutatiekolom" gekleurd met de kleur van de cellen in kolom a die niet "leeg zijn". op deze manier worden de cellen wel gekleurd, maar worden ook alle cellen in kolom "A" van het gebruikte bereik van het werkblad doorlopen, om consistent te blijven(dat lijkt me wel het minste :P )

Als echter alle cellen doorlopen worden met bovenstaande methode, rijst de vraag of de code in de gebeurtenismethode worksheet_change nog wel nodig is.

Ik denk van niet, maar dat zou inhouden dat je na elke verandering van een cel, alle cellen in kolom A zou kunnen laten opkleuren. Dat is niet leuk bij grotere werkbladen, want dat kan aanzienlijke vertraging van de bewerking als gevolg hebben.

Het kan, maar wil je het ook?


Wat ik wel aan kan raden is een knop die de methode "Color_all" aanroept. op die manier wordt het duidelijker wat er precies wanneer gebeurt, dat is ook altijd voor mij een heel fijn idee.

Dat zou dus resulteren met de volgende code in het werkblad:

Code:
Option Explicit

Private Const MUTATIECEL As String = "X"        'pas aan naar behoefte
Private Const CHECK_RANGE As String = "A:A"     'kolom A ,pas aan naar behoefte

Public Sub Color_all()
'roep deze functie aan om de
Dim cell As Range

    For Each cell In Intersect(ActiveSheet.UsedRange, Range(CHECK_RANGE))
        
        ColorMutationCell Cell
        
    Next

End Sub

Private Sub ColorMutationCell(ByVal Target As Range)
'Kleuren cel in rij "mutatierij" met kleur van doorgegeven cel

    If Target.Interior.ColorIndex = xlNone Then
        'deze check is nodig omdat anders cellen een witte achtergrond krijgen
        ActiveSheet.Range(MUTATIECEL & Target.Row).Interior.ColorIndex = xlNone

    Else

        ActiveSheet.Range(MUTATIECEL & Target.Row).Interior.Color = Target.Interior.Color

    End If

End Sub

Rest er nog een knop kunnen toevoegen om de "Color_all" methode aan te roepen, en dan gebeurt het niet elke keer als je een celkleur wijzigt, maar wel als je op de knop drukt, wat opzich toch ook bevredigend moet kunnen zijn.

Groeten,
Mark
 
Laatst bewerkt:
Bedankt Mark XL!
Ik heb gebruik gemaakt van Uw routine, en ook zodanig aangepast (uitgebreid), dat het volledig beantwoord aan mijn wensen.
Zonder de hulp van Jullie had ik niet in de mogelijkheid geweest om mijn doel te bereiken.

nogmaals bedankt!
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan