Pagina precedente | 1 | Pagina successiva
Vota | Stampa | Notifica email    
Autore

aiuto assegnazione giorni lavorativi

Ultimo Aggiornamento: 23/01/2017 09:50
Post: 2
Registrato il: 25/11/2016
Città: MILANO
Età: 46
Utente Junior
2007 e precedenti
OFFLINE
04/01/2017 11:55

Buongiorno, in un file condiviso di excel con modifiche da parte di più utenti contemporaneamente ho provato ad inserire nella colonna "Q2" una data e nella colonna "R2" la formula
=giorno lavorativo(Q2;2). La formula funziona correttamente ma, se il file viene condiviso, excel va in crash.
A questo punto sono nelle condizioni di richiedere aiuto per un VBA che possa sostituire la funzione immessa e vedere se, con questo modo alternativo, excel mi permetta di lavorare.

Il lavoro del vba definitivo dovrebbe seguire questa procedura:
in foglio2 vorrei inserire un elenco di giorni festivi
nel foglio dove lavoro e dove vorrei inserire il codice vorrei che per ogni data inserita in una cella della colonna "Q" mi restituisse due giorni lavorativi successi a "Q" al netto delle festività inserite nel foglio2.
Purtroppo sono un utente completamente inesperto di vba e vi chiedo, pertanto, pazienza e aiuto se possibile.
Grazie in anticipo.
Nicola
Post: 3.568
Registrato il: 13/03/2012
Città: LIVORNO
Età: 78
Utente Master
2010
OFFLINE
04/01/2017 12:35

allega un file di esempio

----------
Win 10 - Excel 2010
allega un file di esempio, guadagnerai tempo tu e lo farai risparmiare a chi ti aiuta
Post: 207
Registrato il: 31/01/2010
Città: LIVORNO
Età: 61
Utente Junior
2016
OFFLINE
04/01/2017 15:03

Ciao Nicopedro come già suggerito dall'amico Patel45 che saluto sarebbe opportuno che tu Alleghi un file zippato in formato .zip oppure .rar affinché qualcuno possa aiutarti......

Saluti






--------------
Marco
excel 2013
Post: 2
Registrato il: 25/11/2016
Città: MILANO
Età: 46
Utente Junior
2007 e precedenti
OFFLINE
05/01/2017 10:25

Buongiorno a tutti,
allego il file come da Vs. richiesta e vi ringrazio fin da ora per l'interessamento.
Nico
Post: 3.569
Registrato il: 13/03/2012
Città: LIVORNO
Età: 78
Utente Master
2010
OFFLINE
05/01/2017 12:42


Sub prova()
    LR = Cells(Rows.Count, "Q").End(xlUp).Row
    For r = 2 To LR
      giorno = Cells(r, "Q")
      Cells(r, "R") = Application.WorksheetFunction.WorkDay(giorno, 2)
    Next
End Sub

----------
Win 10 - Excel 2010
allega un file di esempio, guadagnerai tempo tu e lo farai risparmiare a chi ti aiuta
Post: 3
Registrato il: 25/11/2016
Città: MILANO
Età: 46
Utente Junior
2007 e precedenti
OFFLINE
05/01/2017 13:04

grazie patel45. ho inserito questo codice in una macro con tasto rapido attivabile ctrl+e ed in effetti ha saltato i sabati e le domeniche ma non tiene conto delle festività del foglio 2.
Per renderlo condiviso ha trasformato il file in estensione .xlsm per attivare la macro. (spero non sia un problema per la compatibilità con versione antecedenti al 2007).
Infine, come potrei legare questa modifica alla colonna R al mutare della colonna q invece di usare un tasto scelta rapida?
Grazie, Nicola

edit: ti chiedo anche, sempre per favore, se è possibile far in modo da non scrivere nulla in colonna r qualora non vi sia valore in colonna q corrispondente.
[Modificato da nicopedro 05/01/2017 13:13]
Post: 3.570
Registrato il: 13/03/2012
Città: LIVORNO
Età: 78
Utente Master
2010
OFFLINE
05/01/2017 14:29

Re:



Infine, come potrei legare questa modifica alla colonna R al mutare della colonna q invece di usare un tasto scelta rapida?

temo che così facendo ritornino i problemi dovuti alla condivisione.


edit: ti chiedo anche, sempre per favore, se è possibile far in modo da non scrivere nulla in colonna r qualora non vi sia valore in colonna q corrispondente.


Sub prova()
    LR = Cells(Rows.Count, "Q").End(xlUp).Row
    For r = 2 To LR
      giorno = Cells(r, "Q")
      if giorno <> "" then Cells(r, "R") = Application.WorksheetFunction.WorkDay(giorno, 2)
    Next
End Sub



[Modificato da patel45 05/01/2017 19:01]

----------
Win 10 - Excel 2010
allega un file di esempio, guadagnerai tempo tu e lo farai risparmiare a chi ti aiuta
Post: 3.571
Registrato il: 13/03/2012
Città: LIVORNO
Età: 78
Utente Master
2010
OFFLINE
05/01/2017 15:55

prova anche questa
Sub secgiorno()
    LR = Cells(Rows.Count, "Q").End(xlUp).Row
    LR1 = Sheets(2).Cells(Rows.Count, "A").End(xlUp).Row
    For r = 2 To LR
      giorno = Cells(r, "Q")
      If giorno <> "" Then
        giornolav = Application.WorksheetFunction.WorkDay(giorno, 2)
        For rr = 1 To LR1
          If Sheets(2).Cells(rr, 1) = giornolav Then
            giornolav = Sheets(2).Cells(rr, 1) + 1
            giornolav = Application.WorksheetFunction.WorkDay(giornolav, 2)
          End If
        Next
        Cells(r, "R") = giornolav
      End If
    Next
End Sub
[Modificato da patel45 05/01/2017 19:03]

----------
Win 10 - Excel 2010
allega un file di esempio, guadagnerai tempo tu e lo farai risparmiare a chi ti aiuta
Post: 4
Registrato il: 25/11/2016
Città: MILANO
Età: 46
Utente Junior
2007 e precedenti
OFFLINE
09/01/2017 09:01

Re:
patel45, 05/01/2017 15.55:

prova anche questa
Sub secgiorno()
    LR = Cells(Rows.Count, "Q").End(xlUp).Row
    LR1 = Sheets(2).Cells(Rows.Count, "A").End(xlUp).Row
    For r = 2 To LR
      giorno = Cells(r, "Q")
      If giorno <> "" Then
        giornolav = Application.WorksheetFunction.WorkDay(giorno, 2)
        For rr = 1 To LR1
          If Sheets(2).Cells(rr, 1) = giornolav Then
            giornolav = Sheets(2).Cells(rr, 1) + 1
            giornolav = Application.WorksheetFunction.WorkDay(giornolav, 2)
          End If
        Next
        Cells(r, "R") = giornolav
      End If
    Next
End Sub




ciao e grazie. non capisco se sbaglio io in qualcosa ma non riesco a far leggere in foglio 2 le festività. questo nuovo codice che cosa fa di diverso dal primo che mi avevi scritto?
Grazie ancora.
Nico
Post: 3.580
Registrato il: 13/03/2012
Città: LIVORNO
Età: 78
Utente Master
2010
OFFLINE
09/01/2017 09:12

l'ultimo codice dovrebbe, come da te chiesto, tener conto delle festività italiane, ma per funzionare lo devi mettere in un modulo standard e non in quello del foglio1

----------
Win 10 - Excel 2010
allega un file di esempio, guadagnerai tempo tu e lo farai risparmiare a chi ti aiuta
Post: 5
Registrato il: 25/11/2016
Città: MILANO
Età: 46
Utente Junior
2007 e precedenti
OFFLINE
09/01/2017 12:42

funziona...avevo dimenticato soltanto di cambiare il numero (2) del codice dopo sheets in base al numero di fogli che avevo nel file originale... credo vi sia ancora un piccolo errore...
se imposto come data di partenza il giorno 4/1 dovrebbe considerare il giorno 5 come primo giorno lavorativo da saltare e ridarmi il 6/1 che essendo festivo dovrebbe essere saltato...poi vi è il 7/1 e 8/1 che sono sabato e domenica e quindi dovrebbe restituire il 9/1...invece mi restituisce il 10/01... mi pare come se trovando il 06/01 azzerasse il conteggio e ripartisse da capo con il primo giorno utile...
in pratica vede il 05/01 ma poi incontrando errore il giorno 06/01 riparte a contare da capo il gionro 09/01
non so se mi sono spiegato...grazie mille...sei gentilissimo
Post: 3.581
Registrato il: 13/03/2012
Città: LIVORNO
Età: 78
Utente Master
2010
OFFLINE
09/01/2017 15:01

non avevi detto " due giorni lavorativi successivi a "Q" al netto delle festività inserite nel foglio2" ?

----------
Win 10 - Excel 2010
allega un file di esempio, guadagnerai tempo tu e lo farai risparmiare a chi ti aiuta
Post: 6
Registrato il: 25/11/2016
Città: MILANO
Età: 46
Utente Junior
2007 e precedenti
OFFLINE
09/01/2017 15:30

si,
faccio fatica a spiegarti ma se inserisci il codice nel file di esempio che ti ho inviato e provi a inserire nella prima riga di Q il 4/1 e nella seconda riga di Q il 5/1 vedrai che ti accorgerai del problema...non sono stato in grado di spiegarti il problema riscontrato ma sicuramente te ne accorgerai con la prova.
Ty. il risultato è quello riportato di seguito...
mer 4/1/17 mar 10/1/17
gio 5/1/17 lun 9/1/17
Post: 3.583
Registrato il: 13/03/2012
Città: LIVORNO
Età: 78
Utente Master
2010
OFFLINE
09/01/2017 16:41

hai ragione, ma qual'è il risultato corretto secondo te ?
prova questa
Sub secondogiornolav()
    LR = Cells(Rows.Count, "Q").End(xlUp).Row
    For r = 2 To LR
      giorno = Cells(r, "Q")
      Cells(r, "R") = Application.WorksheetFunction.WorkDay_Intl(giorno, 2, , Sheets(2).Range("A2:A24"))
    Next
End Sub
[Modificato da patel45 09/01/2017 16:53]

----------
Win 10 - Excel 2010
allega un file di esempio, guadagnerai tempo tu e lo farai risparmiare a chi ti aiuta
Post: 7
Registrato il: 25/11/2016
Città: MILANO
Età: 46
Utente Junior
2007 e precedenti
OFFLINE
10/01/2017 17:31

ciao patel,
entrambe le date sono scorrette:
se inserisco il 4/1 dovrebbe conteggiare il 5/1 e saltarlo perchè primo giorno...poi considerare il 6/1 come festivo e quindi saltarlo...saltare sabato e domanica e restituire il 9/1

se inserissi il 05/01 allora dovrebbe saltare il 6/1 perchè festivo, saltare sabato e domenica, saltare il primo giorno lavorativo e cioè il 9/1 e restituire il 10/1

ho provato ad inserire il codice in sostituzione a quello precedente ma mi ha restituito errore:
errore di run-time 438: proprietà o metodo non supportati dall'oggetto.aprendo il debug mi segnala la riga
Cells(r, "R") = Application.WorksheetFunction.WorkDay_Intl(giorno, 2, , Sheets(2).Range("A2:A24"))
Post: 3.587
Registrato il: 13/03/2012
Città: LIVORNO
Età: 78
Utente Master
2010
OFFLINE
10/01/2017 17:45

probabilmente dipende dal fatto che hai il 2007, a me funziona col 2010 e il risultato è quello che hai detto tu.
Controlla se tra le funzioni del foglio oltre a GIORNO.LAVORATIVO hai anche GIORNO.LAVORATIVO.INTL

----------
Win 10 - Excel 2010
allega un file di esempio, guadagnerai tempo tu e lo farai risparmiare a chi ti aiuta
Post: 8
Registrato il: 25/11/2016
Città: MILANO
Età: 46
Utente Junior
2007 e precedenti
OFFLINE
11/01/2017 09:07

Re:
patel45, 10/01/2017 17.45:

probabilmente dipende dal fatto che hai il 2007, a me funziona col 2010 e il risultato è quello che hai detto tu.
Controlla se tra le funzioni del foglio oltre a GIORNO.LAVORATIVO hai anche GIORNO.LAVORATIVO.INTL




purtroppo no.
Post: 3.589
Registrato il: 13/03/2012
Città: LIVORNO
Età: 78
Utente Master
2010
OFFLINE
11/01/2017 12:07

ultimo tentativo, prova questa
Sub secgiorno()
Dim giorno As Date
    LR = Cells(Rows.Count, "Q").End(xlUp).Row
    For r = 2 To LR
      If Cells(r, "Q") <> "" Then
        giorno = Cells(r, "Q")
        Cells(r, "R") = GetWorkDaysNum(giorno, 2)
      End If
    Next
End Sub

Public Function GetWorkDaysNum(DateStart As Date, giorni As Integer, Optional WorkDays As Integer = 5) As Long
    Dim dtStart As Date, dtAct  As Date, x As Integer, blFest  As Boolean
    dtStart = DateStart
    dtAct = DateStart - 1
    Do Until x > giorni 
        dtAct = DateAdd("d", 1, dtAct)
        blFest = False
        ' Controllo se il G è all'interno della Settimana LUNGA/CORTA
        ' quindi se è SABATO o DOMENICA.
        If Weekday(dtAct, vbMonday) > WorkDays Then blFest = True
        
        ' Nel caso non sia già SABATO/DOMENICA controllo che non sia
        ' una FESTIVITA'.
        If blFest = False Then blFest = Festivo(dtAct)
        If blFest = False Then x = x + 1
    Loop
    GetWorkDaysNum = dtAct
    
End Function

' VERIFICA SE LA DATA E' UN GIORNO FESTIVO IN ITALIA
Private Function Festivo(myDate As Date) As Boolean
    LR1 = Sheets(2).Cells(Rows.Count, "A").End(xlUp).Row
    Festivo = False
    For rr = 1 To LR1
      If Sheets(2).Cells(rr, 1) = myDate Then
          Festivo = True
          Exit For
      End If
    Next
End Function
[Modificato da patel45 12/01/2017 09:21]

----------
Win 10 - Excel 2010
allega un file di esempio, guadagnerai tempo tu e lo farai risparmiare a chi ti aiuta
Post: 9
Registrato il: 25/11/2016
Città: MILANO
Età: 46
Utente Junior
2007 e precedenti
OFFLINE
12/01/2017 09:08

non posso far altro che ringraziarti per la pazienza e lo splendido lavoro. Mi pare che con questa tutto funzioni a meraviglia. Grazie ancora.
Post: 3.615
Registrato il: 13/03/2012
Città: LIVORNO
Età: 78
Utente Master
2010
OFFLINE
16/01/2017 11:17

se hai ancora problemi continua qui

----------
Win 10 - Excel 2010
allega un file di esempio, guadagnerai tempo tu e lo farai risparmiare a chi ti aiuta
Post: 10
Registrato il: 25/11/2016
Città: MILANO
Età: 46
Utente Junior
2007 e precedenti
OFFLINE
16/01/2017 11:54

ok patel. grazie ancora.

vorrei che nello stesso file quando nelle celle della colonna "AF" (di tutti i fogli esistenti) vi è una data, restituisca nella colonna "B" il valore "OK" e nella colonna "C" il mese scritto in lettere estrapolato dalla data della colonna AF.
Tale macro dovrebbe lavorare al variare di qualsiasi cella della colonna AF rielaborando l'intera colonna.
Come sempre vi ringrazio in anticipo
Nicola
[Modificato da nicopedro 16/01/2017 11:56]
Post: 3.616
Registrato il: 13/03/2012
Città: LIVORNO
Età: 78
Utente Master
2010
OFFLINE
16/01/2017 16:06

allega un file significativo, detta così non capisco, chi fa variare la colonna F ?

----------
Win 10 - Excel 2010
allega un file di esempio, guadagnerai tempo tu e lo farai risparmiare a chi ti aiuta
Post: 11
Registrato il: 25/11/2016
Città: MILANO
Età: 46
Utente Junior
2007 e precedenti
OFFLINE
21/01/2017 10:05

ciao, scusa per il ritardo ma ero malato.
Ti allego il file
ci sono 2 fogli che ho copiato praticamente identici "VS" e "VL" ma che in realtà contengono dati diversi.
Vorrei che inserendo una data nella colonna "AF" di qualsiasi foglio del file, automaticamente cambiasse la colonna "B" in "OK" e la colonna "C" con il nome del mese in cui è stato prodotto.
Grazie ancora.
Post: 3.637
Registrato il: 13/03/2012
Città: LIVORNO
Età: 78
Utente Master
2010
OFFLINE
21/01/2017 16:05

quindi niente a che vedere col quesito precedente ?

----------
Win 10 - Excel 2010
allega un file di esempio, guadagnerai tempo tu e lo farai risparmiare a chi ti aiuta
Post: 12
Registrato il: 25/11/2016
Città: MILANO
Età: 46
Utente Junior
2007 e precedenti
OFFLINE
23/01/2017 08:47

Re:
nicopedro, 16/01/2017 11.54:

ok patel. grazie ancora.

vorrei che nello stesso file quando nelle celle della colonna "AF" (di tutti i fogli esistenti) vi è una data, restituisca nella colonna "B" il valore "OK" e nella colonna "C" il mese scritto in lettere estrapolato dalla data della colonna AF.
Tale macro dovrebbe lavorare al variare di qualsiasi cella della colonna AF rielaborando l'intera colonna.
Come sempre vi ringrazio in anticipo
Nicola


si patel, è lo stesso che avevo chiesto 2 post prima...


Post: 3.641
Registrato il: 13/03/2012
Città: LIVORNO
Età: 78
Utente Master
2010
OFFLINE
23/01/2017 09:50

nella colonna D inserisci questa formula

=SE(AF6 <>"";TESTO(AF6;"mmmm");"")

e nel modulo ThisWorkbook questa macro
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
If Target.Column = 32 And Target <> "" Then
  Sh.Cells(Target.Row, "B") = "OK"
End If
End Sub
[Modificato da patel45 23/01/2017 10:00]

----------
Win 10 - Excel 2010
allega un file di esempio, guadagnerai tempo tu e lo farai risparmiare a chi ti aiuta
Vota: 15MediaObject5,00726 7
Amministra Discussione: | Chiudi | Sposta | Cancella | Modifica | Notifica email Pagina precedente | 1 | Pagina successiva
Nuova Discussione
 | 
Rispondi
Feed | Forum | Bacheca | Album | Utenti | Cerca | Login | Registrati | Amministra
Tutti gli orari sono GMT+01:00. Adesso sono le 15:25. Versione: Stampabile | Mobile | Regolamento | Privacy
FreeForumZone [v.6.1] - Copyright © 2000-2024 FFZ srl - www.freeforumzone.com