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

Opgelost Auto. terugzetten regel, op basis van datum, komt buiten de tabel (Excel365)

Dit topic is als opgelost gemarkeerd

Michael_B

Gebruiker
Lid geworden
17 nov 2025
Berichten
12
(Excel365)
Ik heb al enige hulp gekregen op dit forum, echter lopen we beide vast bij het volgende:
Het is een actielijst die mbv een status de gehele regel wegzet in een ander tabblad. Er is 1 uitzondering. En dat is de status HOLD. Die krijgt een datum mee en wanneer deze weer terug moet komen, op die datum, in Tabblad Actielijst dan gaat het niet hellemaal goed. De regel komt dan onderaan buiten de tabel. Met het +sje kan ik hem wel onderdeel maken van de tabel, maar dan sorteert deze weer niet.

Op het te reproduceren heb ik naast het document toegevoegd ook de stappen hieronder benoemd:

In tab Actielijst nieuw Actiepunt aanmaken. (tabel uitbreiden door tab)
In kolom A datum van vandaag selecteren.
In kolom B het eerstvolgende vrije actienummer.
Overige velden bla bla
Selecteer de STATUS HOLD in kolom G en kies de datum van morgen.

Ga naar tab HOLD en zoek het net aangemaakte actiepunt
In kolom A de datum aanpassen naar vandaag.

Excel
opslaan, sluiten en weer openen.
Na openen zie je het Actiepunt verdwijnen uit tab HOLD.
Ga terug naar tab Actielijst en zie het resultaat.
Het actiepunt staat nu onderaan buiten de tabel.
Misschien ziet iemand in de code de fout. Ben zelf niet thuis in VBA.

Gr.
Michael
 

Bijlagen

Gebruik autofilter om de status van opdrachten te filteren; verplaatsen is overbodig.
 
Het komt door de code in ThisWorkbook "Private Sub Terugzetten".
Daar staat indien de datum in kolom A kleiner of gelijk is dan Vandaag() deze rij verwijderen.
 
Laatst bewerkt:

Hier had je de vraag toch ook gesteld en een aantal oplossingen gekregen.
Dat was idd een issue toen. Echter, is er door een Forum gebruiker een hele nieuwe opzet gemaakt. Het staat nu allemaal in een tabel wat voorheen niet zo was. Maar wel scherp van je. Dankjewel.
Bericht automatisch samengevoegd:

Het komt door de code in ThisWorkbook "Private Sub Terugzetten".
Daar staat indien de datum in kolom A kleiner of gelijk is dan Vandaag() deze rij verwijderen.
Kun je me wat meer richting geven aub?
Dit is de code. Wat moet ik precies weghalen?

Dank alvast.
Gr.
Michael


Private Sub Workbook_Open()
Terugzetten
End Sub

Private Sub Terugzetten()
' Alle acties tergugzetten waarvoor de holddatum verstreken is.
With Sheets("Hold")
lastrow = .Cells(Rows.Count, "A").End(xlUp).Row
For r = lastrow To 10 Step -1
If .Cells(r, 1) <= Now() Then
Application.EnableEvents = False
' Copy columns A to H to Actielijst sheet in next available row
.Rows(r).Copy Sheets("Actielijst").Cells(Rows.Count, "A").End(xlUp).Offset(1, 0)
Sheets("Actielijst").Cells(Rows.Count, "A").End(xlUp).Offset(, 6) = "OPEN"
' Delete current row after copied
.Rows(r).Delete shift:=xlUp
End If
Next
End With
Application.EnableEvents = True
End Sub
 
Laatst bewerkt:
Gebruik advancedfilter en neem op met de macrorecorder.
 
Mocht je geen zin of er verstand van hebben wat @snb schrijft probeer je dit.
Geen idee of het zo goed gaat, maar het staat binnen de tabel.
Code:
Private Sub Terugzetten()
Application.EnableEvents = False
'   Alle acties tergugzetten waarvoor de holddatum verstreken is.
    With Sheets("Hold").ListObjects(1)
        For r = .DataBodyRange.Rows.Count To .ListRows(1).Index Step -1
            If .DataBodyRange(r, 1) <= Now() Then
    '           Copy columns A to H to Actielijst sheet in next available row
                .DataBodyRange.rows(r).Copy Sheets("Actielijst").ListObjects(1).ListRows.Add.Range
                  With Sheets("Actielijst").ListObjects(1)
                    .Range(.ListRows.Count - 1, 7) = "OPEN"
                  End With
    '           Delete current row after copied
                .DataBodyRange.Rows(r).Delete
             End If
         Next
     End With
  Application.EnableEvents = True
End Sub
 
Laatst bewerkt:
@HSV
Zoals ik even snel heb kunnen testen... werkt het perfect. Erg blij mee.
Morgen wat uitgebreider testen. Bedankt voor je hulp.

Gr.
Michael
 
Mocht je geen zin of er verstand van hebben wat @snb schrijft probeer je dit.
Geen idee of het zo goed gaat, maar het staat binnen de tabel.
Code:
Private Sub Terugzetten()
Application.EnableEvents = False
'   Alle acties tergugzetten waarvoor de holddatum verstreken is.
    With Sheets("Hold").ListObjects(1)
        For r = .DataBodyRange.Rows.Count To .ListRows(1).Index Step -1
            If .DataBodyRange(r, 1) <= Now() Then
    '           Copy columns A to H to Actielijst sheet in next available row
                .DataBodyRange.rows(r).Copy Sheets("Actielijst").ListObjects(1).ListRows.Add.Range
                  With Sheets("Actielijst").ListObjects(1)
                    .Range(.ListRows.Count - 1, 7) = "OPEN"
                  End With
    '           Delete current row after copied
                .DataBodyRange.Rows(r).Delete
             End If
         Next
     End With
  Application.EnableEvents = True
End Sub
Dankjewel @HSV Heb eea getest en idd staat nu alles binnen de tabel. Wat ik bij het testen opgemerkt heb is dat wanneer er een aantal, automatisch (op datum), regels terugkomen van HOLD naar Actielijst er structureel 2 de status HOLD blijven weergeven ipv OPEN op het tab Actielijst. En ik krijg onderstaande melding. Zou je er nog eens naar willen kijken?


1769546764479.png
Bericht automatisch samengevoegd:

Zo kan het ook.
Zodan... dat is idd een hele ander insteek.:D
Ik snap alleen helemaal niets van de nummering van de Actiepunten. Klikken op de datum doet het Actienummer ophogen. Wat er verder gebeurt snap ik niet. En ik zie in de code dat er ook een agenda zou moeten zijn. Echter, die komt niet te voorschijn.

Zou je daar nog naar willen kijken?
 

Bijlagen

Laatst bewerkt:
Kleine aanpassing:
Code:
Private Sub Terugzetten()
Application.EnableEvents = False
'   Alle acties tergugzetten waarvoor de holddatum verstreken is.
    With Sheets("Hold").ListObjects(1)
     If .ListRows.Count > 0 Then
        For r = .ListRows.Count To .ListRows(1).Index Step -1
            If .DataBodyRange(r, 1) <= Now() Then
    '           Copy columns A to H to Actielijst sheet in next available row
                .DataBodyRange.Rows(r).Copy Sheets("Actielijst").ListObjects(1).ListRows.Add.Range
                  With Sheets("Actielijst").ListObjects(1)
                    .DataBodyRange(.ListRows.Count, 7) = "OPEN"
                  End With
    '           Delete current row after copied
                .DataBodyRange.Rows(r).Delete
             End If
         Next
      End If
     End With
  Application.EnableEvents = True
End Sub
 
Is bij deze opgelost, er wordt het nummer wordt enkel verhoogd bij een nieuwe datum onderaan de lijst
Die agenda stond erin en heb hem dan maar laten staan, ik weet niet wat er de bedoeling van was.
 

Bijlagen

Is bij deze opgelost, er wordt het nummer wordt enkel verhoogd bij een nieuwe datum onderaan de lijst
Die agenda stond erin en heb hem dan maar laten staan, ik weet niet wat er de bedoeling van was.
Dankjewel.

Zodra ik een regel toevoeg middels Tab, krijg ik toch weer direct een foutmelding. 1769618255143.png
De agenda werd gebruikt om in kolom A en bij de HOLD status een datum in te geven.
Verder zijn het geen unieke Actiepunt nummers in kolom B en wordt deze ook niet automatisch gesorteerd. Dat was nou juist iets wat we graag willen.
 
Waarom zou je tab een regel invoegen? Selecteer de eerste lege cel in kolom A en de datum verschijnt net als het actienummer de tabel maakt zelf een extra regel aan. Aangezien er nooit iets verplaatst zal worden blijven de actienummers altijd gesorteerd staan. Enkel op blad "Overleggen" wordt bij het openen van het blad de datums gesorteerd een de oude datums verborgen. Als je HOLD kiest komt er userform waar je de datum kan invullen. Eventueel kan je daar ook een datepicker op zetten.
 

Bijlagen

Probeer deze eens.
Ben geen deskundige maar chatgpt helpt soms.
Nou heel slim van Chat GPT. Want het werkt nu op het eerste gezicht goed. Net als de oplossing van @HSV
Ga nog even verder testen.

Dankjewel.
Bericht automatisch samengevoegd:

Waarom zou je tab een regel invoegen? Selecteer de eerste lege cel in kolom A en de datum verschijnt net als het actienummer de tabel maakt zelf een extra regel aan. Aangezien er nooit iets verplaatst zal worden blijven de actienummers altijd gesorteerd staan. Enkel op blad "Overleggen" wordt bij het openen van het blad de datums gesorteerd een de oude datums verborgen. Als je HOLD kiest komt er userform waar je de datum kan invullen. Eventueel kan je daar ook een datepicker op zetten.
Je hebt gelijk. Na testen komt er idd een regel bij met datum en actienummer. Dit werk best goed. Bij het verwijderen van een regel, en dat komt wel eens voor, dan komt er wel een foutmelding. Misschien een optie delete oid?
Dat blad "Overleggen" dat is wel even wennen.
Een Date Picker zou zeker handig zijn. ;)

Dankjewel nogmaals.
Bericht automatisch samengevoegd:

Kleine aanpassing:
Code:
Private Sub Terugzetten()
Application.EnableEvents = False
'   Alle acties tergugzetten waarvoor de holddatum verstreken is.
    With Sheets("Hold").ListObjects(1)
     If .ListRows.Count > 0 Then
        For r = .ListRows.Count To .ListRows(1).Index Step -1
            If .DataBodyRange(r, 1) <= Now() Then
    '           Copy columns A to H to Actielijst sheet in next available row
                .DataBodyRange.Rows(r).Copy Sheets("Actielijst").ListObjects(1).ListRows.Add.Range
                  With Sheets("Actielijst").ListObjects(1)
                    .DataBodyRange(.ListRows.Count, 7) = "OPEN"
                  End With
    '           Delete current row after copied
                .DataBodyRange.Rows(r).Delete
             End If
         Next
      End If
     End With
  Application.EnableEvents = True
End Sub
Dit lost het probleem op. Heb alle mogelijkheden getest en geen fout meer ontdekt.
Dankjewel. Ik kan hiermee verder. 👍
 
Laatst bewerkt:
zoiets.
voor het verwijderen kies Alles --> rechts klikken in 1cel --> verwijderen --tabelrijen.
Dit werkt nu zonder foutmelding. Top. Dankjewel.
Bericht automatisch samengevoegd:

Heb nu 3 goede oplossingen gekregen. Nu een keuze maken.

Iedereen bedankt. Ga de vraag op opgelost zetten.
 
Terug
Bovenaan Onderaan