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

Voorwaardelijke opmaak met VBA

Status
Niet open voor verdere reacties.
@ snb
wat je zegt klopt wel, maar ik heb 13 sheets die uit 1 sheet de informatie halen, de 12 andere sheets waar de data niet in staat opgeslagen die worden ook steeds groter en groter.
dwz de rij met voorwaardelijke opmaken wordt gigantisch lang.

Adile

Je heb toch maar 1 werkblad nodig om gegevens via een koppeling per periode uit het basisbestand te halen ?
Knippen en plakken is volledig overbodig.
 
Laatst bewerkt:
Nou het zit zo, het zijn periode roosters. deze periodes zien er als ze leeg zijn het zelfde uit. De legenda in kolommen BO en BP, waar de informatie voor de voorwaardelijke opmaak gehaald wordt, staat ook in ieder werkblad. Alleen voor de voorwaardelijke opmaak wordt de legenda in per1 gebruikt de andere legenda's worden gebruikt voor een verticaal zoeken functie gebruikt. wanneer ik deze op een ander (data) blad zou zetten wordt de formule weer groter en het bestand ook.

Nu is het zo dat het bestand een rooster is, en deze wijzigen regelmatig dus wordt er een rijtje gekopieerd en geplakt in een andere rij, maar dit komt de voorwaardelijke opmaak niet ten goede.

Adile
 
Zoals je in je andere draad hebt gezien heb je die verticaal zoeken formule niet nodig. Dus ook niet dat gebied in BO:BP

Begin ook eerst eens de goede formules te gebruiken:

C1: "="week " & weeknum(C4;21)
C2: "=C4"
C3: "=C4"
C4: 29-02-2016

E2: "=E5"
E3: "=E5"
E4: "=C4+1"

Een koppeling met het gegevens in een basiswerkblad leg je eenvoudig:
Als het basiswerkblad het hele jaar bevat.
Zet in het periodewerkblad in A1 de periode waarover het moet gaan

bijv
in C4: "=offset(basis!C4;;56*(A1-1))"
in C6: "=offset(basis!C6;;56*(A1-1))"

in E4: "=offset(basis!E4;;56*(A1-1))"
in E6: "=offset(basis!E6;;56*(A1-1))"

etc.

Alle wijzigingen breng je aan in het basiswerkblad (knippen/polakken doe je daar)
Alleen het periodewerkblad bevat voorwaardelijke opmaak(daarin wordt dus nooit iets geknipt of geplakt).
 
Laatst bewerkt:
Zoals je in je andere draad hebt gezien heb je die verticaal zoeken formule niet nodig. Dus ook niet dat gebied in BO:BP

Klopt, die ga ik dus ook gebruiken, dan kan dat gebied eruit en in een datasheet geplaatst worden.

Het tweede gedeelte van je reactie; Ik heb geen problemen met die formules, omdat wanneer ik nu C4 van periode 1 aanpas, de datum weeknummers en dagen in alle 13 periodes worden aangepast.
en daarbij snap ik niet zo heel goed wat je met basisbestand bedoelt, gegevens sheet?


en je formules snap ik ook niet zo goed. met offset heb ik eigenlijk nog nooit zelf gewerkt.
 
En daarom is je bestand onnodig groot/traag.
Je hebt maar twee werkbladen nodig:

1 met het hele jaar, zonder voorwaardelijke opmaak waarin je alle gegevesn/wijzigingen aanbrengt: basiswerkblad
1 werkblad waar je de gegevens van 1 bepaalde periode uit het baaiswerkblad 'filtert'. Hierin staan zonodig voorwaardelijke opmaakregels: periodewerkblad. In dit werkblad mag je maar 1 gegeven wijzigen: het nummer van de periode.
 
V&A,
als ik jouw laatste code gebruik, en ik zet als voorbeeld een dubbele waarde in een kolom, dan worden alle rijen (104:123) van de betreffende kolom wit.
terwijl dan 1 cel juist rood dient te worden. :(

Dan gebruik je een andere code dan die ik geplaatst heb. De oranje cellen worden niet gekleurd maar bij dubbele waarden wordt het toch echt rood. Met een kleine aanpassing waardoor de waarden zichtbaar blijven.
Maar verder is het inderdaad beter om eerst over een goede datastructuur na te denken,:d
 

Bijlagen

Allen,

probleem is opgelost met deze code.

Code:
Private Sub Worksheet_Change(ByVal Target As Range)

    Const sSHEET_NAME   As String = "Dienstkleur"
    Const sDATA_RANGE   As String = "$C$6:$BF$102"

    Dim vaTable         As Variant
    Dim j               As Long

    If Not Intersect(Target, Me.Range(sDATA_RANGE)) Is Nothing And _
       Target.Count = 1 Then

        vaTable = Sheets(sSHEET_NAME).Cells(1).CurrentRegion

        With Target

            For j = 1 To UBound(vaTable)

                If vaTable(j, 1) = .Value Then

                   .Interior.ColorIndex = vaTable(j, 2)
                   .Font.ColorIndex = vaTable(j, 3)
                   Exit For

                End If

            Next j

        End With

    End If

End Sub

De topic is opgelost.


adile
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan