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

Combinatie vertikaal zoeken, verschuiving, gegevensvalidatie, ...

Status
Niet open voor verdere reacties.

Hillaert

Gebruiker
Lid geworden
28 jan 2012
Berichten
12
Beste,

Ik zit wat vast met het bestand in bijlage. Het betreft een planning voor mijn werktechniekers. Het bestand pas ik jaar na jaar een beetje aan, meestal door gebruik te maken van info op forums en dergelijke.

Nu zit ik met een situatie, waar ik niet onmiddellijk een antwoord op weet. Ik tracht even wat uit de doeken te doen.

- Op blad 1 – “beveiligd” vul ik per dag de planning in, soms voor weken ver (grote werkzaamheden). Samen met wat extra informatie (tijdstip van de werken, ploegchef, klantnaam, techniekers, aard van het werk, hoogtewerker, type hoogtewerker, contactpersoon klant, duur van de werken en status van de werken).
- Rechts kan ik zien hoeveel techniekers ik nog vrij heb (aan de hand van de kleuren)
- Op blad 2 – “verlofkalender” kunnen de techniekers op een andere computer (het is normaal een gedeeld bestand) hun verlof gaan plannen. Ze kunnen gaan kiezen “welk” verlof ze opnemen. Compensatie, gewoon verlof, ziekte, … Die “toestand” verschijnt dan op blad 1, rechts. Zo kan ik dan zien of ik geen “verkeerde” boeking van een technieker gedaan heb (komt rood). Zo vermijd ik dat ik een technieker inplan op een dag dat deze verlof genomen heb.

Tot op heden werkt dit zeer goed.

Echter, heb ik gemerkt dat het eigenlijk ook omgekeerd zou moeten werken.

- Als ik op blad 1 een werk gepland heb, zou de mogelijkheid moeten bestaan dat ze op blad 2 geen “verlof” meer kunnen nemen die dag. Zo vermijd ik dat ik techniekers bijvoorbeeld plan voor 2 weken en dat zij bijv. tijdens die twee weken verlof nemen. Als ze me dit niet zeggen en ik hou de planning niet nauwgelet in het oog, dan kan dit voor problemen zorgen.

Praktisch voorbeeld, aan de hand van het bestand in bijlage:
- Op 4 januari heb ik Ploeg 1 gepland. Hun toestand rechts is dus “werkt”. Diezelfde toestand zou moeten verschijnen in blad 2 “verlofkalender”, bij de desbetreffende dag en ploeg. Tegelijk zou in blad 2 die cel van Ploeg 2 en die dag, moeten “geblokkeerd” worden, zodat zij zelf niet meer kunnnen kiezen of ze die dag verlof nemen. Optioneel zou er een melding kunnen komen: “Gelieve u verlof te bespreken met uw overste”
- Tegelijk zou de mogelijkheid van het keuzemenu nog actief moeten blijven, zodat,als er geen werken gepland staan, ze voor die dag een andere toestandscode kunnen kiezen.

Ik heb zelf al wat lopen zoeken met "verschuiving", "vertikaal zoeken", ... Maar ik geraak er niet...

Hopelijk is dit wat duidelijk?


Alvast bedankt!
 

Bijlagen

  • Planning2016_1.xlsm
    79,6 KB · Weergaven: 41
Dit kun je niet oplossen met formules. Bijgaand een oplossing met VBA.
Toelichting: Als je een ploeg inplant wordt op tabblad Verlofkalender de validatie op die datum, voor die ploeg, aangepast. Er kan dan alleen nog "ziek" geselecteerd worden.
 

Bijlagen

  • Planning2016_1.xlsm
    85,6 KB · Weergaven: 58
Laatst bewerkt:
Hey Timshel,

Perfect!!

Ik kon zo nog uren zoeken met formules :)

Nog een klein vraagje (mijn VBA-kennis is heel beperkt): is het mogelijk om in de desbetreffende cel in tabblad Verlofkalender het woordje "werkt" te zetten, maar dat er tegelijk nog "ziek" kan geselecteerd worden? Of wordt dat te moeilijk?

Bedankt!

Hillaert
 
Dat is mogelijk. Het gevolg is wel dat de kolom toestand in werkblad "beveiligd" vervolgens ook wordt gewijzigd. Er komt dan bijvoorbeeld "Werkt | Werkt" te staan. Vind ik persoonlijk niet de fraaiste oplossing. Zie bijlage 1.
In bijlage 2 is het anders aangelegd. De betreffende validatielijst wordt nog steeds aangepast. De cel in kwestie krijgt geen waarde maar een kleurtje en een inputmessage.
 

Bijlagen

  • Planning2016_1.xlsm
    86,1 KB · Weergaven: 32
  • Planning2016_1_v2.xlsm
    81,7 KB · Weergaven: 44
Hey Timshel,

Bijlage 2 is net wat ik zocht! Perfect!

Ik testte dit reeds uitvoering op mijn volledig bestand, en het werkt goed! Bedankt!

Nog twee kleine opmerkingen:
- Als er een cel roodgekleurd is, of status "ziek" wordt geplaatst, kan met door op "delete" te drukken de rode kleur weer weg doen...
Dan moet men opnieuw op blad 1 de ploeg gaan invullen, waarna hij opnieuw de desbetreffende cel op blad 2 weer kleurt.
- Als je zelf wat probeert te typen in een rode cel, krijg je de foutmelding (perfect). Maar als je "annuleren" klikt, verdwijnt de rode kleur

Bestaat er een mogelijkheid dat de "bezette" cel volledig blokkeert? De optie "ziek" moet in principe niet meer beschikbaar zijn. Die cel zou gewoon rood moeten kleuren... Als ze er iets wensen te typen, mag diezelfde foutmelding komen. Maar in elke omstandigheid moet de kleur rood blijven.

Want ik ken mijn techniekers :) Eens ze ontdekt hebben dat ze met "delete" de rode kleur kunnen weg doen, gaan ze daar maar al te graag misbruik van maken :)

Bedankt!!
 
Iets met voorwaardelijke opmaak:
Code:
Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim dDatum As Date
    Dim Br
    Dim i As Long, j As Long
    Dim Cld As Range, Clp As Range
    
    If Intersect(Target, Range("A21").CurrentRegion.Columns(5).Resize(, 4)) Is Nothing Then Exit Sub
    With Sheets("Verlofkalender")
        dDatum = Cells(21 + Int((Target.Row - 21) / 13) * 13, 2).Value
        Set Cld = .Range("A13:A23").Find(Format(dDatum, "dddd d mmmm yyyy"), LookIn:=xlValues)
        If Not Cld Is Nothing Then
            With Cld.Offset(, 1).Resize(, 8).Validation
                .Delete
                .Add 3, , , "=$A$1:$A$9"
                .ErrorTitle = "Dat kan dus niet!"
                .ErrorMessage = "Kies een item uit de lijst."
                .InputTitle = ""
                .InputMessage = ""
            End With
            Cld.Offset(, 1).Resize(, 8).FormatConditions.Delete
        Else
            MsgBox "Geen datum gevonden in verlofkalender."
            Exit Sub
        End If
        Br = Cells(22 + Int((Target.Row - 21) / 13) * 13, 5).Resize(12, 4)
        For i = 1 To 12
            For j = 1 To 4
                If Br(i, j) <> "" Then
                    Set Clp = .Range("B12:I12").Find(Br(i, j), LookAt:=xlWhole)
                    If Not Clp Is Nothing Then
                        With .Cells(Cld.Row, Clp.Column)
                            .FormatConditions.Add Type:=xlExpression, Formula1:="=" & .Address & "="""""
                            .FormatConditions(1).Interior.ColorIndex = 3
                            With .Validation
                                .Modify 3, , , ","
                                .InputTitle = "Bezet"
                                .InputMessage = "Neem contact op met uw overste om verlof te bespreken."
                            End With
                        End With
                    End If
                End If
            Next
        Next
    End With
End Sub
 
Laatst bewerkt:
Oej,

net iets te vroeg gejuigd...

Het bestand werkt perfect, echter, van zodra ik de werkmap deel, krijg ik steeds fout 1004 (de door de toepassing of door object gedefineerde fout) als ik op het eerste blad wat in geef...

Ik heb even de zoekfunctie op dit forum gebruikt. Uit een aantal topics probeerde ik wat tips uit, maar geen enkele kon helpen.
Ik kwam alvast tot de conclusie dat een werkmap delen, hier door enkelen wordt afgeraden. Nochtans werkt dit reeds jaren goed bij ons...

Enig idee wat de oorzaak van de fout kan zijn?
 

Bijlagen

  • Planning2016_1_v2.xlsm
    85,6 KB · Weergaven: 49
Er wordt vaak melding van gemaakt dat gedeelde bestanden minder stabiel zijn en dat er een verhoogd risico is op gegevensverlies, maar dit is ook niet mijn ervaring.
Wat wel aan de orde is, is dat een aantal functies niet bruikbaar/wijzigbaar is in gedeelde bestanden. Dat geldt onder andere voor celvalidatie en voorwaardelijke opmaak. Bestaande celvalidatie en voorwaardelijke opmaak blijft behouden, maar kan niet gewijzigd worden. En laat dat nou net de belangrijkste functionaliteit zijn in de macro.
Hier is geen work-around voor. Het is het een of het ander. Of je deelt het bestand en dan werkt de macro niet. Of je gebruikt het bestand ongedeeld zodat je beperkingen kunt aanbrengen op het werkblad voor je techniekers. Dit is een harde beperking van Excel.
 
Laatst bewerkt:
In de afgelopen vier jaar dat we dit bestand gedeeld gebruiken, hebben we slechts éénmaal "grote" problemen gehad. De bestandsgrootte bedraagt normaal ongeveer 1MB. Maar plots steeg dit na een aantal keer opslaan tot zo'n 700MB.. Waarna het heel onstabiel werd.
Na wat zoeken bleek dat er één gebruiker met een andere Office-versie werkte dan de andere 4 gebruikers. Toen we alle versies gelijkzetten naar Office2013, was het probleem van de baan.
Dit geheel ter info :)

Het is een spijtige zaak dat de macro niet werkt in een gedeeld bestand. Het doet perfect wat ik wens...

Ik heb nog wat proberen te prutsen in de code, op zoek naar een alternatief, maar geraak er niet aan uit...

Echt spijtig... Maar het was misschien te mooi geweest om waar te zijn :)

Toch bedankt voor de inspanningen!!
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan