Help!

PC-Problemen?
De vrijwilligers van Oplossing.be zoeken gratis met u mee!

Hulp bij posten

Recente topics

Auteur Topic: een rij invoegen tussen twee verschillende datums  (gelezen 8078 keer)

0 leden en 1 gast bekijken dit topic.

Offline denisvt

  • Nieuw lid
  • Berichten: 4
  • Oplossing.be
een rij invoegen tussen twee verschillende datums
« Gepost op: 26 december 2017, 13:34:12 »
Hallo

Puur voor de layout en het gemak zou ik via een macro een lege rij willen toevoegen tussen twee rijen met verschillende datums zodat er dus een lege rij komt te staan telkens er een nieuwe datum begint. De datums verschillen steeds van elkaar en staan ook niet altijd in dezelfde rij. Dit zou ik dan willen integreren in een bestaande macro.

Is dit mogelijk?

Hou er aub rekening mee dat ik hier niet voor opgeleid ben  :(

Groet
Denis

Offline SoftAid

  • Administrator
  • Ambassadeur
  • *****
  • Berichten: 20.169
  • Geslacht: Man
  • Nobody is perfect, not even me...
Re: een rij invoegen tussen twee verschillende datums
« Reactie #1 Gepost op: 26 december 2017, 14:23:52 »
Hallo denisvt,

Welkom op Oplossing.be  :)

Is het mogelijk om je bestand aan te hangen als bijlage, eventueel maak je een copy en vervang gevoelige data (namen, adressen, prijzen enz ) door verzonnen data. Enkele rijen data is ook al voldoende als voorbeeld. Laat de macro wel intact, zo zien we wat je hebt, en waar er code kan toegevoegd worden.

Hoe kan ik een Bijlage posten??

Groeten,

:) SoftAid :)             
Maximum grootte bijlagen vergroot naar 4 MB
Dubbelposten, het posten op verschillende forums van dezelfde vraag, dient op
voorhand gemeld te worden, met een link naar het topic op de andere site.
Overtreding van deze regel kan bestraft worden met verbanning !

Offline denisvt

  • Nieuw lid
  • Berichten: 4
  • Oplossing.be
Re: een rij invoegen tussen twee verschillende datums
« Reactie #2 Gepost op: 26 december 2017, 14:31:37 »
Hallo

Bij deze.
Ik heb alles gewoon gelaten zoals het is.
Wat er nu opstaat is reeds aangepast door de macro.

Groet
Denis

Offline denisvt

  • Nieuw lid
  • Berichten: 4
  • Oplossing.be
Re: een rij invoegen tussen twee verschillende datums
« Reactie #3 Gepost op: 26 december 2017, 14:54:42 »
Hallo

Misschien nog een kleinigheid. Op dit blad zie je de startdatums van 'start priming' samen staan per datum. Hier zou dus de rij moeten tussen komen.

Groet
Denis

Offline Ex-lid

  • Oplosser
  • ****
  • Berichten: 670
  • Geslacht: Man
  • dit lid is verbannen
Re: een rij invoegen tussen twee verschillende datums
« Reactie #4 Gepost op: 26 december 2017, 15:34:37 »
Als ik uw vraag goed heb begrepen, is zoiets de bedoeling.
Sub rij_invoegen()
Application.ScreenUpdating = False
   Dim lRow As Long
   For lRow = Cells(Cells.Rows.Count, "F").End(xlUp).Row To 2 Step -1
      If Cells(lRow, "F") <> Cells(lRow - 1, "F") Then Rows(lRow).EntireRow.Insert
   Next lRow
Application.ScreenUpdating = True
End Sub

Offline SoftAid

  • Administrator
  • Ambassadeur
  • *****
  • Berichten: 20.169
  • Geslacht: Man
  • Nobody is perfect, not even me...
Re: een rij invoegen tussen twee verschillende datums
« Reactie #5 Gepost op: 26 december 2017, 18:09:58 »
Dotchiejack,

ook mijn gedacht als code, maar je was me voor.
Deze code maakt wel een foutje, hij maakt bij elke uitvoer een extra lege rij aan onder rij 1.

Omdat de code "Worksheet_Change()" zal moeten worden gebruikt, gaan daar héél véél rijen bijkomen, daarboven.
Ik zie wel niet dadelijk hoe het op te lossen is.

:) SoftAid :)             

Maximum grootte bijlagen vergroot naar 4 MB
Dubbelposten, het posten op verschillende forums van dezelfde vraag, dient op
voorhand gemeld te worden, met een link naar het topic op de andere site.
Overtreding van deze regel kan bestraft worden met verbanning !

Offline pitufo

  • Ambassadeur
  • *****
  • Berichten: 1.343
  • Geslacht: Man
Re: een rij invoegen tussen twee verschillende datums
« Reactie #6 Gepost op: 27 december 2017, 10:43:55 »
Hallo,

Mocht dat het enige probleem zijn, dan zou het nog redelijk meevallen :
In "For lRow = Cells(Cells.Rows.Count, "F").End(xlUp).Row To 2 Step -1" de 2 door een 3 vervangen zou volstaan.

De kwestie is dat er overal continu lege rijen zullen bijkomen, enerzijds omdat er al staan na de eerste uitvoering van de macro, anderzijds omdat er in "F" niet enkel de datum maar ook de tijd staat.
Maar niet getreurd : onderstaande code (uit gemakzucht verder gebouwd op die van Dotchiejack...) mag zo vaak als men wil worden uitgevoerd zonder dat er te veel lege rijen zullen komen.
Sub rij_invoegen()
Application.ScreenUpdating = False
Dim lRow As Long
For lRow = Cells(Cells.Rows.Count, "F").End(xlUp).Row To 3 Step -1
    datum1 = ""
    datum2 = ""
    d = Cells(lRow, "F")
    If d <> "" Then
        datum1 = DateSerial(Year(d), Month(d), Day(d))
    End If
    d = Cells(lRow - 1, "F")
    If d <> "" Then
        datum2 = DateSerial(Year(d), Month(d), Day(d))
    End If
    If datum1 <> "" And datum2 <> "" Then
        If datum1 <> datum2 Then
            Rows(lRow).EntireRow.Insert
        End If
    End If
Next lRow
Application.ScreenUpdating = True
End Sub

Groeten,
pitufo
"De computer doet wel degelijk wat je hem vraagt,
 maar NIET wat je DENKT dat je hem vraagt"

Offline SoftAid

  • Administrator
  • Ambassadeur
  • *****
  • Berichten: 20.169
  • Geslacht: Man
  • Nobody is perfect, not even me...
Re: een rij invoegen tussen twee verschillende datums
« Reactie #7 Gepost op: 27 december 2017, 13:00:24 »
Hallo Dennis,

Ik heb je bestand wat opgeruimd, en verbeterd.
De macro-code van dotchiejack, nog bijgewerkt door pitufo heb ik als een Event-macro geplaatst.
Zodoende wordt de code uitgevoerd telkens je nieuwe data invoegt.

Die overbodige code die je had opgeslagen met de macrorecorder heb ik ook verwijderd.
Met de knop "Data wissen" in je werkblad wordt alle data gewist en de formules hersteld.
Ook zal je geen datum meer zien staan in kolom E: als er niets staat in kolom D:  (en idem voor kolom G: en F: )
Ik heb ook de opmaak van de datums veranderd naar d/mm/jjjj uu:mm, dat lijnt beter uit.

Bekijk het maar even, en experimenteer er mee. Mocht je nog aanpassingen willen dan horen we het graag.

In bijlage jou aangepast bestand.

:) SoftAid :)             
Maximum grootte bijlagen vergroot naar 4 MB
Dubbelposten, het posten op verschillende forums van dezelfde vraag, dient op
voorhand gemeld te worden, met een link naar het topic op de andere site.
Overtreding van deze regel kan bestraft worden met verbanning !

Offline pitufo

  • Ambassadeur
  • *****
  • Berichten: 1.343
  • Geslacht: Man
Re: een rij invoegen tussen twee verschillende datums
« Reactie #8 Gepost op: 27 december 2017, 15:01:00 »
Hallo SoftAid,

Ziet er goed uit, mits een kleine bedenking : al dan niet met toevoeging van rijen zal de code nu volledig worden doorlopen telkens er een cel wordt gewijzigd op het werkblad, bv. in de kolommen D of I tot R.
Een extra conditie rond de integrale code kan dit voorkomen (ik ga hier als voorbeeld tot rij 200 omdat je die ook ergens hebt voorzien):
If Not Intersect(Target, Range("F3:F200")) Is Nothing Then
    (code)
End If
Er kan misschien ook overwogen worden om nog gegevensvalidatie ("tijd") te gebruiken voor de datumkolommen (dit kan anders fouten geven, zowel in de formules als in de macro).

Groeten,
pitufo


"De computer doet wel degelijk wat je hem vraagt,
 maar NIET wat je DENKT dat je hem vraagt"

Offline SoftAid

  • Administrator
  • Ambassadeur
  • *****
  • Berichten: 20.169
  • Geslacht: Man
  • Nobody is perfect, not even me...
Re: een rij invoegen tussen twee verschillende datums
« Reactie #9 Gepost op: 27 december 2017, 16:01:43 »
Hallo pitufo,

Een extra conditie...
daar heb je een punt. Ik heb de macro aangepast.

Er kan misschien ook overwogen worden om nog gegevensvalidatie ("tijd") te gebruiken voor de datumkolommen (dit kan anders fouten geven, zowel in de formules als in de macro).
Datum en tijd zijn 2 verschillende notaties, en die kan je enkel combineren in "Aangepast" zo ver ik weet?
En dat is gebeurd voor alle cellen met datums ("D3:G300").

:) SoftAid :)             

Maximum grootte bijlagen vergroot naar 4 MB
Dubbelposten, het posten op verschillende forums van dezelfde vraag, dient op
voorhand gemeld te worden, met een link naar het topic op de andere site.
Overtreding van deze regel kan bestraft worden met verbanning !

Offline pitufo

  • Ambassadeur
  • *****
  • Berichten: 1.343
  • Geslacht: Man
Re: een rij invoegen tussen twee verschillende datums
« Reactie #10 Gepost op: 27 december 2017, 17:35:15 »
Hey SoftAid,

Ondertussen zitten we al voor een significant percentage off topic  ;) :
Je hebt gelijk als het celopmaak betreft, maar ik had het over gegevensvalidatie waar perfect met "tijd" kan worden gewerkt. Als je nu (per ongeluk of om eens iets te proberen) tekst invoert in kolom F krijg je gegarandeerd een fout.

Ik zie overigens nog iets : je procedure "wissen" zal ook herhaaldelijk je change-event aanroepen.
Dat kan je voorkomen met daarin als eerste instructie "Application.EnableEvents = False" te zetten en "Application.EnableEvents = True" als laatste.

Groeten,
pitufo
"De computer doet wel degelijk wat je hem vraagt,
 maar NIET wat je DENKT dat je hem vraagt"

Offline SoftAid

  • Administrator
  • Ambassadeur
  • *****
  • Berichten: 20.169
  • Geslacht: Man
  • Nobody is perfect, not even me...
Re: een rij invoegen tussen twee verschillende datums
« Reactie #11 Gepost op: 27 december 2017, 17:46:54 »
Je hebt gelijk als het celopmaak betreft, maar ik had het over gegevensvalidatie waar perfect met "tijd" kan worden gewerkt. Als je nu (per ongeluk of om eens iets te proberen) tekst invoert in kolom F krijg je gegarandeerd een fout.
Je kan met gegevensvalidatie ook maar kiezen tussen tijd of datum (of aangepast), daar zie ik geen werkbare methode tussen.
Foutieve invoer kan je altijd maken. die moet je dan herstellen door de juiste invoer. Hoe zou je anders willekeurige datum en tijd invoeren?
Ik zie overigens nog iets : je procedure "wissen" zal ook herhaaldelijk je change-event aanroepen.
Niet meer dan 1 keer de macro. Als "Wissen" de kolom "F" verwijderd. Getest.

:) SoftAid :)             
Maximum grootte bijlagen vergroot naar 4 MB
Dubbelposten, het posten op verschillende forums van dezelfde vraag, dient op
voorhand gemeld te worden, met een link naar het topic op de andere site.
Overtreding van deze regel kan bestraft worden met verbanning !

Offline pitufo

  • Ambassadeur
  • *****
  • Berichten: 1.343
  • Geslacht: Man
Re: een rij invoegen tussen twee verschillende datums
« Reactie #12 Gepost op: 27 december 2017, 18:33:54 »
Niet meer dan 1 keer de macro. Als "Wissen" de kolom "F" verwijderd. Getest.
Ja en neen : de procedure wordt meermaals aangeroepen, maar het relevante gedeelte slechts één maal uitgevoerd door de aanpassing die we eerder hebben gedaan. Het is sowieso aangeraden om in dit soort situaties EnableEvents op False te zetten.

Foutieve invoer kan je altijd maken. die moet je dan herstellen door de juiste invoer.
Foutieve invoer leidt hier niet alleen tot een niet-werkende formule maar ook tot een fout in de macro. Herstel vergt dan toch een beetje (te vermijden) inspanning..., want :

Je kan met gegevensvalidatie ook maar kiezen tussen tijd of datum (of aangepast), daar zie ik geen werkbare methode tussen.
Hoe zou je anders willekeurige datum en tijd invoeren?
Dat kan ook nog meevallen : in Excel is "tijd" de decimale vorm van "datum". Aangezien hier niet enkel datums maar daarbinnen ook de tijd moet kunnen ingevoerd worden kiezen we bij Gegevensvalidatie voor "tijd", bij "gegeven" voor "groter dan of gelijk aan" en bij "begintijd" bv. "=DATUM(2018;1;1)" (zonder de aanhalingstekens).

Groeten,
pitufo


"De computer doet wel degelijk wat je hem vraagt,
 maar NIET wat je DENKT dat je hem vraagt"

Offline SoftAid

  • Administrator
  • Ambassadeur
  • *****
  • Berichten: 20.169
  • Geslacht: Man
  • Nobody is perfect, not even me...
Re: een rij invoegen tussen twee verschillende datums
« Reactie #13 Gepost op: 27 december 2017, 18:54:24 »
Ja en neen : de procedure wordt meermaals aangeroepen, maar het relevante gedeelte slechts één maal uitgevoerd door de aanpassing die we eerder hebben gedaan. Het is sowieso aangeraden om in dit soort situaties EnableEvents op False te zetten.
Sorry, dat lijkt me toch overkill als de procedure maar één keer wordt aangeroepen.
Foutieve invoer leidt hier niet alleen tot een niet-werkende formule maar ook tot een fout in de macro. Herstel vergt dan toch een beetje (te vermijden) inspanning..., want :.....
Je kan met gegevensvalidatie ook maar kiezen tussen tijd of datum (of aangepast), daar zie ik geen werkbare methode tussen.
in Excel is "tijd" de decimale vorm van "datum". Aangezien hier niet enkel datums maar daarbinnen ook de tijd moet kunnen ingevoerd worden kiezen we bij Gegevensvalidatie voor "tijd", bij "gegeven" voor "groter dan of gelijk aan" en bij "begintijd" bv. "=DATUM(2018;1;1)" (zonder de aanhalingstekens).
Dit resulteert niet in datum & tijd, enkel in datum. Of je moet, zoals ik deed, de eigenschappen van die cellen aanpassen naar "dd/mm/jjjj uu:mm" in "Aangepast".... Niet? (... getest)

:) SoftAid :)             
Maximum grootte bijlagen vergroot naar 4 MB
Dubbelposten, het posten op verschillende forums van dezelfde vraag, dient op
voorhand gemeld te worden, met een link naar het topic op de andere site.
Overtreding van deze regel kan bestraft worden met verbanning !

Offline pitufo

  • Ambassadeur
  • *****
  • Berichten: 1.343
  • Geslacht: Man
Re: een rij invoegen tussen twee verschillende datums
« Reactie #14 Gepost op: 27 december 2017, 19:04:48 »
SoftAid,

Laten we niet blijven herhalen, maar die knop om te wissen kan eindeloos worden gebruikt (in de praktijk vermoedelijk niet, natuurlijk), en bij iedere klik wordt het event enkele keren aangeroepen. I rest my case  :)

Celeigenschappen en gegevensvalidatie staan helemaal los van elkaar.
In het bestand dat je had bijgevoegd staan celeigenschappen toch al op "dd/mm/jjjj uu:mm" ingesteld.
Dan volstaat mijn werkwijze om gegevensvalidatie toe te passen echt wel.

Groeten,
pitufo
"De computer doet wel degelijk wat je hem vraagt,
 maar NIET wat je DENKT dat je hem vraagt"

 


www.combell.com