Ore lavorative



  • Ore lavorative
    di Sbizzy data: 21/01/2014 16:43:05

    Buongiorno a tutti,

    nuovo problema: devo calcolare a ritroso una data in modo che vengano considerate le sole ore lavorative.
    Dal file allegato si vede il calendario lavorativo dal lunedi al venerdi con orario di inizio fisso e orario di fine variabile, mentre il sabato può essere lavorativo o meno (vedi commento).
    L'obbiettivo è calcolare la DATA X e ORA X con una logica particolare, ovvero devo considerare la minore delle date ottenute in questo modo:

    data 1: prendere DATA INIZIO e ORA INIZIO e sottrarre 10 ore lavorative

    data 2: prendere DATA FINE e ORA FINE, sottrarre 10 ore lavorative e sottrarre DURATA

    Si può fare? Possibilmente con sole formule di excel, perchè vorrei avere un file dinamico in cui posso cambiare la data fine o il sabato e visualizzare subito le modifiche, ma se fossero necessarie macro, non c'è problema!

    Grazie, ciao.



  • di Mister_x (utente non iscritto) data: 22/01/2014 14:59:44

    Ciao

    Visto che fino ad ora nessuno ti a risposto al tuo problema,
    in quanto come penso che quelli che hanno aperto il tuo file non sono riusciti a decifrare veramente cosa vuoi ottenere,
    comunque partiamo con le varie domande in base al tuo file analizzando riga per riga

    riga 1 cella B1 lun-ven C1 ore 7.00 fisso, D1 Ore 17.00 variabile
    riga 2 cella C2 si-no per il sabato , e qui comincia il rebus
    se tu metti SI tutti i sabati nell’arco dell’anno vanno conteggiati ???

    passiamo alla riga 5
    DURATA (ORE) DATA INIZIO ORA INIZIO DATA FINE ORE FINE DATA X ORA X
    40 20.01.2014 08.05.23 22.01.2014 07.00.00
    4 22.01.2014 07.00.00 22.01.2014 12.50.00
    15 22.01.2014 12.50.00 24.01.2014 07.44.42
    1 24.01.2014 07.44.42 24.01.2014 11.50.20
    60 24.01.2014 11.50.20 31.01.2014 11.00.20
    Metti un 40 in A5 ma se facciamo il conto con data e ora inizio e fine non risulta questo dato se noi andiamo a calcolarlo su cella C1-D1
    Ora spiega come fai a trovare 40 ore lavorative ????
    In F5-G5 cosa bisogna mettere , quale data e quale ora ???
    Altro errore in riga 8 tu riporti 1ora , ma se la matematica non e’ un opinione facendo i calcoli sono piu di 3ore
    Riga 9 metti 60 ma stando ai tuoi parametri in riga1 escludendo sabati e domeniche ad un calcolo approssimativo risultano 51ore
    Detto questo come la mettiamo con le festivita’ infrasettimanali???

    A questo punto sta a te dare delle risposte concrete al tuo problema per far si che qualcuna ti possa aiutare e proporre delle soluzioni a riguardo

    ciao Mister_x





  • di Sbizzy data: 22/01/2014 17:56:55

    Ciao misterX,

    provo a fare chiarezza.

    Per prima cosa TUTTI i dati che vedi nel file excel sono INPUT presi da un altro file e sono corretti.
    La colonna DURATA non c'entra niente con la data/ora fine e data/ora inizio perchè sono relativi a due lavorazioni diverse. La DURATA è relativa alla lavorazione 1, la data/ora fine e data/ora inizio sono relative all'inizio e alla fine della lavorazione 2. Il mio obiettivo è calcolare la dataX/oraX che sarà l'inizio della lavorazione 1 in modo tale che sia in "vantaggio" sulla lavorazione 2 di 10 ore lavorative. Infatti, se la DURATA è inferiore al tempo che impiego a fare la lavorazione 2, mi basta partire 10 ore prima (vedi data 1 nel mio primo post), altrimenti devo fare in modo che la lavorazione 1 finisca 10 ore prima della fine della lavorazione 2 e quindi inizierà più di 10 ore lavorative prima (data 2).

    Per quanto riguarda il calendario lavorativo, effettivamente mi sono dimenticato di contemplare le festività infrasettimanali e sarebbe perfetto se si trovasse un modo per escluderle.

    Per il sabato stessa cosa, ma basterebbe il SI/NO per contemplare tutti i sabato o nessuno (praticamente se fosse SI e dataX cade di sabato, facendolo diventare NO dovrebbe automaticamente scalare a venerdi perchè perde 4 ore di lavoro).

    Spero di aver risposto a tutto!

    Ciao.



  • di Mister_x (utente non iscritto) data: 23/01/2014 00:55:59

    ciao

    diciamo che la spiegazione non fa una piega, e ammettiamo di avere ttuto sotto controllo,
    la mia domanda era anche cosa mettiamo nella colonna con Data X Ora X, quali valori troviamo??
    la sottrazione di datiniz orainz- 10 ore o datafine orafine -10ore + 40 ??

    prova in questo caso a postare il file con risultati concreti fatti a mano senza formule, con un calendario davanti una calcolatrice e un notes per eseguire i calcoli in colonna DataX OraX, per avere un'idea di come pensi il calcolo iniziando con i tuoi dati esposti

    PS non ti stupire se ti dico questo, sappi che anch'io,e penso anche gli altri sviluppatori, di solito quando faccio delle operazioni complesse me le scrivo su carta poi le sviluppo su formule o in VBA ( macro )

    ciao Mister_x





  • di Sbizzy data: 23/01/2014 18:59:36

    Ciao,

    perdonami ma nel primo post ho messo che la data doveva essere la minore fra data1 e data2...

    Comunque per fugare dubbi ho messo nel file excel data1, data2 e dataX, cosi si vede che dataX altro non è che il min(data1;data2). Ho messo data e ora in un unica cella, ma se restano separate è la stessa cosa (le date/ora inizio e fine sono separate perchè prese da un file esterno).

    Non so se può creare problemi nella soluzione, ma visto che il calendario lavorativo delle due lavorazioni è diverso, la data/ora d'inizio e di fine possono cadere in un periodo non lavorativo...in quel caso bisognerebbe partire a contare a ritroso dall'ora del calendario lavorativo più vicina (a ritroso ovviamente).

    Grazie ancora, se manca ancora qualcosa fammi sapere!

    Ciao.



  • di Mister_x (utente non iscritto) data: 24/01/2014 00:44:45

    ciao

    mi e' scaturita, in base ai tuoi dati questa funzione per i tuoi calcoli
    ti ho allegato il tuo file con gia questa inserita per capire il suo utilizzo
    la troverai in un modulo
    per il sabato la puoi utilizzare in due modi vedi le due colonne come sono programmate
    PS ho riscontrato un calcolo errato in riga 7
    facendo i calcoli a matita a mio parere e giusto quello della funzione fai prove e verifiche

    ciao mister_x

     
    Public Function DATA_X(Data_f As Date, Ora_i As Date, Durata As Long, Sabato As String)
    Dim data_i As Date, Data_s As Date
    Dim Giorni As Long, i As Long
    data_i = Application.WorkDay(Data_f, -Int((Durata + 10) / 10))
    Giorni = Data_f - data_i - 1
    Data_s = data_i
    For i = 0 To Giorni
      If Weekday(Data_s + i) = 7 And UCase(Sabato) = "SI" Then data_i = data_i + 1
    Next i
    DATA_X = data_i + Ora_i
    End Function
    






  • di Sbizzy data: 24/01/2014 11:50:14

    Ciao mister_x

    prima di tutto grazie del tempo che mi stai dedicando (ho visto che rispondi a mezzanotte passata!!!).

    Però ci sono molti errori nella tua soluzione:
    _ il sabato quando è "SI" ha orario lavorativo dalle 7 alle 11, mentre se metto "SI" la tua formula calcola 7-17
    _se modifico l'orario di fine giornata lavorativa da 17 a 19 le dataX di alcune righe dovrebbero variare, invece non succede nulla!
    _la riga 7 è giusta com'era e sbagliata la formula, anche perchè come dataX mi da la stessa data/ora inizio (celle B7 e C7), ma se dataX è il minore fra data1 e data2 dove data1 è data/ora inizio - 10 ore lavorative, è impossibile che dataX sia uguale a B7-C7!!!

    Secondo me non ti è chiara la logica. Provo a rispiegare tutto:
    Allora, io ho due reparti, li chiameremo A e B.
    A svolge una lavorazione, B ne svolge una successiva, utilizzando i pezzi prodotti da A.
    A e B hanno due orari lavorativi che spesso non coincidono; quello che ho messo nel file excel è l'orario lavorativo di A, NON di B.
    La colonna DURATA indica quante ore lavorative servono a A per eseguire la lavorazione (ad esempio A7 indica che il reparto A ha bisogno di 14 ore per lavorare l'ordine 7).
    Le quattro colonne da B a E sono date e ora in cui il reparto B inizia e finisce di lavorare l'ordine relativo. Queste date sono vincolanti, perchè precedentemente pianificate.
    Ora io devo pianificare data e ora in cui il reparto A deve iniziare a lavorare l'ordine relativo in modo che il raparto B non subisca ritardi. Per questo si applica il gap delle 10 ore. Se, considerando durata e orario lavorativo di A, il reparto A è più veloce di B, prevale data1 quindi basta scalere le 10 ore da data inizio; altrimenti prevale data2 e se io facessi iniziare il raparto A in data1, esso finirebbe di lavorare meno di 10 ore prima che finisca B o addirittura dopo che finisca B (cosa che ovviamente rallenterebbe B e non deve succedere!)

    Grazie ancora, ciao.



  • di Sbizzy data: 24/01/2014 12:57:59

    Ah un'altra cosa, nell'esempio che ho messo, le date/ora di fine lavorazione di una riga coincidono con le date/ore inizio di quella successiva (D7-E7 coincide con B8-C8) ma non è sempre cosi, ovvero il reparto B potrebbe finire una lavorazione oggi alle 15 e iniziare la successiva domani alle 8, per esempio.



  • di Mister_x (utente non iscritto) data: 24/01/2014 13:16:03

    ciao

    io ho seguito la tua logica di esempio che hai postato come risultato finale,
    adesso inserisci anche che l'orario puo' terminare alle ore 15.00 del giorno prima e iniziare una lavorazione il giorno seguente alle ore 8.00, quindi in questo caso esiste un fermo macchina quantificabile in 2 ore lavorative
    ecco perche' ti avevo chiesto di inserire esempi concreti in base alle varie probabilita' che si vanno a riscontrare nel tuo lavoro,
    nel mio caso non posso entrare nella tua mente e capire i tuoi pensieri,ma sta a te spiegare con esempi concreti come sono definiti i calcoli degli esempi posti e il perche' di questi
    poi si potra portarli in VBA e costuire una sub() per il calcolo di tutto con inerenti SABATI e FESTIVITA infrasettimanali.

    ciao Mister_x






  • di Sbizzy data: 24/01/2014 21:19:27

    Mi viene il dubbio che tu abbia saltato un post, perchè ne ho messi due di fila!

    Comunque secondo me il fatto che ci siano troppi esempi e troppi dati è il problema. Facciamo finta che io non ti abbia detto niente fino ad ora.

    A me servono due cose: una funzione o macro che crei un calendario lavorativo in cui posso variare l'orario di fine turno (l'inizio è fisso alle 7 del mattino), impostare eventuali festività e infine decidere di volta in volta se il sabato è lavorativo o no (se fosse lavorativo l'orario è fisso dalle 7 alle 11).

    In un altro foglio mi serve una funzione che, considerando solo le ore lavorative, posso prendere una i valori contenuti nella cella B5 (data) e C5 (ora) e sottrarre un numero di ore pari al valore di A5. (Riferimenti dei 3 file già condivisi)

    Se ho queste due cose, il resto è facilissimo ricavarlo e non serve che ti elenchi tutti i casi particolari!



  • di Mister_x (utente non iscritto) data: 25/01/2014 00:58:13

    ciao

    cit^-^ Mi viene il dubbio che tu abbia saltato un post, perchè ne ho messi due di fila!
    non ho saltato i tuoi post,il dubbio viene a me che non vuoi far sapere le tue idee,
    sappi che una buona spiegazione del problema e il risultato del problema, vedi un post di quelli attuali dove il richiedente a inserito le problematica e la cosa lo risolta con una macro seguendo la logica che lui pensava ma non riusciva a inquadrarla

    adesso io ti ho fatto un calendario che varia in base ai tuoi dati, questo se conosci un po di formule lavresti fatto ad occhi chiusi

    le altre cose essendo piu' facili di queste con un pochino di impegno le puoi risolvere,
    resta sempre se fai delle prove di continuazione al file che ti posto e non riesci devi postare questi e non un altro file con dati che non si capiscono e dire il perche' non risolvi larcano argomento
    detto questo sappi che ho gia' quasi risolto il tuo problema ma lascio a te il divertimento di farlo

    ciao Mister_x





  • di Sbizzy data: 27/01/2014 13:03:14

    Di dubbi ne avevo io, ma dopo la tua ultima risposta ho capito tutto. Ti avevo chiesto un calendario con la possibilità di mettere il sabato e le festività infrasettimanali, ma ne hai fatto uno che contempla la domenica (perchè??? mah ) e senza festività. Ti avevo fatto notare che la riga 7 è un errore tuo e il perchè, ma dici solo che adesso posso risolverlo da solo (non è cosi perchè la riga 7 era e resta sbagliata).

    Secondo me non sei in grado di risolvere il problema e magari pure il calendario l'hai preso in prestito da altri utenti senza mettere le cose che ti ho richiesto.

    Grazie lo stesso, ciao.

    PS: una persona scrive sul forum perchè non è in grado di usare excel al meglio, quindi evita di scrivere frasi del tipo:
    "se conosci un po di formule lavresti fatto ad occhi chiusi"
    "con un pochino di impegno le puoi risolvere"
    "ho gia' quasi risolto il tuo problema ma lascio a te il divertimento di farlo"
    perchè è ovvio che qualcuno scrive qui perchè non è in grado di risolvere il problema.
    Se non sei in grado di autarmi, evita di scaricare fantomatiche colpe su di me o peggio ancora farmi credere che basta poco per risolverlo quando le poche cose che hai fatto sono errate o diverse da quelle espressamente ed inequivocabilmente richieste.



  • di Mister_x (utente non iscritto) data: 27/01/2014 18:04:25

    ciao

    ^_^ Secondo me non sei in grado di risolvere il problema e magari pure il calendario l'hai preso in prestito da altri utenti senza mettere le cose che ti ho richiesto.

    cose' questa cosa, mi sembra una sfida tra chi e' in grado di fare le cose e chi vuol risolvere il tutto senza fare fatica sulle spalle degli altri,
    questo mi sembra un atteggiamento da chi a studiato una pagina in piu di un libro,
    tanto per dirti io arrivo dalla programmazione di C++ , Clipper , DOS quindi penso che in una scala da 1 a 10 con il VBA o Excel di arrivare a 5

    comunque dato che pensi, ma forse pensi troppo, ti ho messo nel file allegato al foglio2, tanto per farti vedere cosa si puo' fare in 30minuti di programmazione, un calendario che basta una data in A1 e si sviluppa un calendario di 35 giorni, con o senza sabati e domeniche
    e basta che metti nella colonna delle festivita e ferie le date che vuoi escludere e non verranno inserite nel calendario
    sappi che si puo' automatizzare ancora di piu', ma cosi per questo momento e' abbastanza per farti capire dove posso arrivare con il VBA o le formule di excel

    ciao Mister_x





  • di Mister_x (utente non iscritto) data: 27/01/2014 18:06:51

    mi sono scordato la sub() in Foglio2
    per chi volesse visionarla
     
    Private Sub Worksheet_Change(ByVal Target As Range)
    If Intersect(Target, Range("A1")) Is Nothing Then Exit Sub
    Dim DataA1 As Date
    Dim i As Long, v As Long
    Dim Nriga As Long
    '''''''''''''''
    DataA1 = [A1]
    Nriga = 2
    On Error Resume Next
    Application.EnableEvents = False
      Range("A2:A35").ClearContents
       For i = 2 To 35
    Ricontrolla:
         For v = 2 To 35
           If DataA1 = Cells(v, "J") Then
             DataA1 = DataA1 + 1
             GoTo Ricontrolla
           End If
         Next v
      If Weekday(DataA1) = [E2] Then
        DataA1 = DataA1 + 1
        GoTo Ricontrolla
      End If
      If Weekday(DataA1) = [F2] Then
        DataA1 = DataA1 + 1
        GoTo Ricontrolla
      End If
    Cells(Nriga, "A") = DataA1
    Nriga = Nriga + 1
    DataA1 = DataA1 + 1
       Next i
    Application.EnableEvents = True
    End Sub