gibra ha scritto:
...Il codice sotto restituisce il risultato che vedi qui:...
Perfetto, per questa definizione:
nibbio ha scritto:
... Se le date risultanti cadono in un periodo compreso tra 1 agosto e 15 settembre, tale periodo non viene contato e si riprende il conteggio dal 16 settembre...
ma dopo la conferma di
nibbio ha scritto:
Grazie, Philcattivocarattere, hai compreso perfettamente le mie esigenze forse perché sei del mestiere come tu stesso hai detto e io mi sono espresso in maniera insufficiente.
Comunque, per usare il tuo esempio, se la data iniziale è 20 luglio, la data a 60 giorni sarà 3 novembre e quella a sei mesi, 7 marzo dell'anno successivo.
ho adattato il codice, in modo che la procedura affronti le 4 situazioni:
1) calcolo normale (non si incontra mai il periodo vietato)
2) data finale del calcolo normale che cade nel periodo vietato
3) data di partenza prima del periodo vietato e data finale del calcolo normale successiva al periodo vietato
4) data di partenza nel periodo vietato
(metto le note esplicative fuori dal codice, altrimenti c'è troppa confusione)
...
Data1 = txtData1.Value 'Phil - prende il valore da una casella di testo
txtScadenza1.Value = 60
txtScadenza2.Value = 180
'Phil - ora si adatta a tutti gli anni
DataStop1 = DateSerial(Year(Data1), 8, 1)
DataStop2 = DateSerial(Year(Data1), 9, 15)
' calcolo normale delle scadenze
Data2 = DateAdd("d", txtScadenza1, Data1)
Data3 = DateAdd("d", txtScadenza2, Data1)
Label1.Caption = Data2
Label2.Caption = Data3
' calcolo le scadenze in funzione del periodo vietato
If (Data2 >= DataStop1 And Data2 <= DataStop2) Or _
(Data1 < DataStop1 And Data2 > DataStop2) Then 'Nota1
Data2 = DateAdd("d", DateAdd("d", 1, DateDiff("d", DataStop1, DataStop2)), Data2)
ElseIf Data1 >= DataStop1 And Data1 <= DataStop2 Then 'Nota2
Data2 = DateAdd("d", txtScadenza1.Value, DataStop2)
End If
Label3.Caption = Data2
...
Nota1: aggiunge i giorni compresi nel periodo vietato anche quando la data da cui partire inizia prima e la data con i normali 60 giorni va oltre il periodo vietato che è di 46 giorni, ecco perché c'è
DateAdd("d", 1, DateDiff(...))
mentre
DateDiff("d", DataStop1, DataStop2)
dà 45 (si saltano i giorni dal 01/08 al 15/09 compresi gli estremi). In questo modi si affrontano le situazioni elencate prima ai punti 2) e 3)
Nota2: se la data di partenza si trova nel periodo vietato inizia a contare dalla fine del periodo vietato (situazione di cui al precedente punto 4) )
Il calcolo dei 181 giorni non l'ho ancora analizzato.
Ottimo input, Gibra, grazie. Questa routine entra a far parte del mio kit di programmi autorealizzati per la gestione dell'ufficio (ogni volta con il foglio a calcolare giorni non era il max)