Ga naar inhoud

Planning in excel


Aanbevolen berichten

Geplaatst:

1. Doelstelling

Het doel is om een Excel-bestand te ontwikkelen waarbij Werkorders vanuit het tabblad Data 2027 automatisch kunnen worden geselecteerd en ingepland in de tabbladen Week 1 tot en met Week 52.

Bij het invoeren van een werkordernummer moeten de bijbehorende gegevens automatisch worden overgenomen. Daarnaast moet Excel de status van de werkorder controleren en bepalen of deze ingepland mag worden.

2. Automatisch overnemen van gegevens

  • De Werkorders bevinden zich in het tabblad Data 2027.
  • De gebruiker voert een werkordernummer in een weekblad in, bijvoorbeeld in cel A2 van Week 1.
  • Excel zoekt dit werkordernummer op in kolom A van Data 2027.
  • Bij een gevonden werkorder worden de naastliggende gegevens automatisch overgenomen uit de overeenkomstige kolommen B, C en D.
  • Deze werking moet identiek zijn voor alle weekbladen, van Week 1 tot en met Week 52.

3. Controle van de Werkorder status

Excel moet de status van de gekozen werkorder automatisch controleren in kolom F van Data 2027.

Werkorders die ingepland mogen worden:

De werkorders met de status INI, WIU, KLR of STP mogen worden geselecteerd voor planning.

Wanneer een gebruiker een dergelijke werkorder invoert, moet Excel de volgende melding weergeven:

“Wil je deze werkorder inplannen?”

  • Bij keuze JA wordt de status van de werkorder in Data 2027 automatisch gewijzigd naar GPL.
  • Bij keuze NEE wordt de werkorder niet ingepland en blijft de bestaande status behouden.

Werkorders die niet ingepland mogen worden:

Wanneer een gebruiker een werkorder met de status WOR, WKK of WAF invoert, moet Excel de volgende melding weergeven:

“Sorry, deze werkorder kan niet ingepland worden.”

De werkorder mag in dat geval niet worden ingepland en de status mag niet worden gewijzigd.

4. Waarschuwing bij dubbele planning

Wanneer een werkorder eerder werd ingepland en de status bijgevolg op GPL staat, mag deze werkorder niet opnieuw ingepland worden in een volgende week.

Als de gebruiker dezelfde werkorder later opnieuw invoert in bijvoorbeeld Week 5, terwijl deze al in Week 2 werd ingepland, moet Excel automatisch een waarschuwing weergeven:

“Let op: deze werkorder staat reeds ingepland (status GPL). Controleer de eerdere planning voordat je verdergaat.”

De werkorder mag niet opnieuw worden ingepland. De bestaande planning moet behouden blijven.

5. Belangrijke voorwaarden

  • De werking moet gelden voor alle weekbladen van Week 1 tot en met Week 52.
  • De statuscontrole gebeurt steeds op basis van de actuele status in Data 2027.
  • Een werkorder die op GPL staat, mag niet opnieuw worden ingepland.
  • Bij een geweigerde werkorder mogen geen ongewenste gegevens in de weekplanning achterblijven.
  • De automatische statuswijziging naar GPL mag uitsluitend gebeuren nadat de gebruiker expliciet JA heeft gekozen.

De bestaande gegevens in Data 2027 mogen niet onbedoeld worden overschrevenMasterplan K1742 2027.xlsx

Geplaatst:

Beste, ik heb de volgende codes gekregen, maar ik kan ze niet toepassen

 

Option Explicit

 

Private Sub Workbook_SheetChange(ByVal Sh As Object, _

                                 ByVal Target As Range)

 

    Dim wsData As Worksheet

    Dim cel As Range

    Dim gevonden As Range

    Dim status As String

    Dim werkorder As String

    Dim antwoord As VbMsgBoxResult

    Dim ws As Worksheet

    Dim controleCel As Range

    Dim laatsteRij As Long

    Dim naamBlad As String

 

    On Error GoTo FoutAfhandeling

 

    'Alleen reageren op wijzigingen in kolom A vanaf rij 2

    If Target.CountLarge > 1 Then Exit Sub

    If Target.Column <> 1 Or Target.Row < 2 Then Exit Sub

 

    'Alleen reageren op de weekbladen

    naamBlad = Sh.Name

    If Left(naamBlad, 5) <> "Week " Then Exit Sub

 

    Set wsData = ThisWorkbook.Worksheets("Data 2027")

    Set cel = Target

 

    'Lege invoer negeren

    werkorder = Trim(CStr(cel.Value))

    If werkorder = "" Then Exit Sub

 

    Application.EnableEvents = False

 

    'Werkorder zoeken in kolom A van Data 2027

    Set gevonden = wsData.Columns("A").Find( _

        What:=werkorder, _

        After:=wsData.Cells(wsData.Rows.Count, "A"), _

        LookIn:=xlValues, _

        LookAt:=xlWhole, _

        SearchOrder:=xlByRows, _

        SearchDirection:=xlNext, _

        MatchCase:=False)

 

    If gevonden Is Nothing Then

        MsgBox "Deze werkorder werd niet gevonden in Data 2027.", _

               vbExclamation, "Werkorder niet gevonden"

        cel.ClearContents

        cel.Offset(0, 1).Resize(1, 3).ClearContents

        GoTo VeiligAfsluiten

    End If

 

    'Status ophalen uit kolom F

    status = UCase(Trim(CStr(wsData.Cells(gevonden.Row, "F").Value)))

 

    'Controleren of de werkorder al in een weekblad voorkomt

    For Each ws In ThisWorkbook.Worksheets

        If Left(ws.Name, 5) = "Week " Then

 

            laatsteRij = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row

 

            If laatsteRij >= 2 Then

                For Each controleCel In ws.Range("A2:A" & laatsteRij)

                    If controleCel.Address(External:=True) <> _

                       cel.Address(External:=True) Then

 

                        If StrComp(Trim(CStr(controleCel.Value)), _

                                   werkorder, vbTextCompare) = 0 Then

 

                            MsgBox "Let op: deze werkorder staat al in " & _

                                   ws.Name & ", rij " & controleCel.Row & _

                                   "." & vbCrLf & _

                                   "De werkorder kan niet opnieuw ingepland worden.", _

                                   vbExclamation, "Dubbele planning"

 

                            cel.ClearContents

                            cel.Offset(0, 1).Resize(1, 3).ClearContents

                            GoTo VeiligAfsluiten

                        End If

                    End If

                Next controleCel

            End If

        End If

    Next ws

 

    'Status GPL: niet opnieuw inplannen

    If status = "GPL" Then

        MsgBox "Let op: deze werkorder heeft status GPL " & _

               "en staat reeds als ingepland geregistreerd." & vbCrLf & _

               "Controleer de bestaande planning.", _

               vbExclamation, "Werkorder reeds ingepland"

 

        cel.ClearContents

        cel.Offset(0, 1).Resize(1, 3).ClearContents

        GoTo VeiligAfsluiten

    End If

 

    'Verboden statussen

    Select Case status

        Case "WOR", "WKK", "WAF"

            MsgBox "Sorry, deze werkorder kan niet ingepland worden." & _

                   vbCrLf & "Huidige status: " & status, _

                   vbExclamation, "Werkorder niet toegestaan"

 

            cel.ClearContents

            cel.Offset(0, 1).Resize(1, 3).ClearContents

            GoTo VeiligAfsluiten

    End Select

 

    'Toegestane statussen

    Select Case status

        Case "INI", "WIU", "KLR", "STP"

 

            antwoord = MsgBox( _

                "Wil je deze werkorder inplannen?", _

                vbYesNo + vbQuestion + vbDefaultButton2, _

                "Bevestiging werkorder")

 

            If antwoord = vbNo Then

                cel.ClearContents

                cel.Offset(0, 1).Resize(1, 3).ClearContents

                GoTo VeiligAfsluiten

            End If

 

            'Gegevens B, C en D overnemen

            cel.Offset(0, 1).Value = wsData.Cells(gevonden.Row, "B").Value

            cel.Offset(0, 2).Value = wsData.Cells(gevonden.Row, "C").Value

            cel.Offset(0, 3).Value = wsData.Cells(gevonden.Row, "D").Value

 

            'Status wijzigen naar GPL

            wsData.Cells(gevonden.Row, "F").Value = "GPL"

 

            MsgBox "De werkorder is ingepland." & vbCrLf & _

                   "De status is gewijzigd naar GPL.", _

                   vbInformation, "Planning bevestigd"

 

        Case Else

            MsgBox "Onbekende of niet-toegestane status: " & status & _

                   vbCrLf & "De werkorder kan niet ingepland worden.", _

                   vbExclamation, "Status controleren"

 

            cel.ClearContents

            cel.Offset(0, 1).Resize(1, 3).ClearContents

    End Select

 

VeiligAfsluiten:

    Application.EnableEvents = True

    Exit Sub

 

FoutAfhandeling:

    MsgBox "Er is een fout opgetreden: " & Err.Description, _

           vbCritical, "Fout in werkorderplanning"

    Resume VeiligAfsluiten

 

End Sub

Doe mee aan dit gesprek

Je kunt dit nu plaatsen en later registreren. Indien je reeds een account hebt, log dan nu in om het bericht te plaatsen met je account.

Gast
Helaas, je inhoud bevat woorden die we niet kunnen toestaan. Gelieve je inhoud te wijzigen en de volgende gemarkeerde woorden uit je bericht te verwijderen.
Reageer op dit topic

×   Geplakt als verrijkte tekst.   Plak in plaats daarvan als platte tekst

  Er zijn maximaal 75 emoji toegestaan.

×   Je link werd automatisch ingevoegd.   Tonen als normale link

×   Je vorige inhoud werd hersteld.   Leeg de tekstverwerker

×   Je kunt afbeeldingen niet direct plakken. Upload of voeg afbeeldingen vanaf een URL in

×
×
  • Nieuwe aanmaken...

Belangrijke informatie

We hebben cookies geplaatst op je toestel om deze website voor jou beter te kunnen maken. Je kunt de cookie instellingen aanpassen, anders gaan we er van uit dat het goed is om verder te gaan.