Condividi:        

[Excel 2007]Gestione calendario anni multipli

Vuoi potenziare i tuoi documenti Word? Non sai come si fa una macro in Excel? Devi creare una presentazione in PowerPoint?
Oppure sei passato a OpenOffice e non sei sicuro di come lavorare al meglio?

Moderatori: Anthony47, Flash30005

[Excel 2007]Gestione calendario anni multipli

Postdi lucaferr79 » 17/08/12 01:43

scusate sono nuovo non so dove cercare spero che qualcuno mi possa aiutare sto facendo un programmino con excel 2007 vorrei avendo gia formato un calendario con varie formule e colori dei giorni festivi fare difianco un'altra colonna che si aggiorni automaticamente man man che cambio l'anno contenete le ore sindacali di lavoro per poi in un altra mettere quelle effettive e fare la differenza degli straordinari faccio un esempio
Codice: Seleziona tutto
A1                                  b1
gennaio
dom 1 (in rosso)               
lun 2 (in nero)             8
mar                             8 
mer                             8   
gio                              8   
ven (in grigio)              7   
sab (in giallo)
non so se sono stato chiaro
non so piu come fare grazie

Moderazione: splittato e spostato da Programmazione.
lucaferr79
Newbie
 
Post: 5
Iscritto il: 17/08/12 01:29

Sponsor
 

Re: [Excel 2007]Gestione calendario anni multipli

Postdi Flash30005 » 17/08/12 08:33

Ciao Lucaferr79 e benvenuto nel Forum

Ti invio questa macro che crea un calendario "perpetuo" nei dodici fogli contenuti in una cartella
(dovrai inserire in una cartella dodici fogli aventi i nomi dei mesi abbreviati e in maiuscolo: GEN, FEB, MAR ... DIC)

Poi copi il seguente codice e lo incolli in un modulo
Codice: Seleziona tutto
Public AnnoF As Integer, VettS(7), VettM(12) As String, VettF(11) As Date
Sub FormattaF()
Application.ScreenUpdating = False
Application.Calculation = xlManual
AnnoF = Mid(ThisWorkbook.Name, Len(ThisWorkbook.Name) - 7, 4)
VettS(1) = "L"
VettS(2) = "M"
VettS(3) = "M"
VettS(4) = "G"
VettS(5) = "V"
VettS(6) = "S"
VettS(7) = "D"

VettM(1) = "GEN"
VettM(2) = "FEB"
VettM(3) = "MAR"
VettM(4) = "APR"
VettM(5) = "MAG"
VettM(6) = "GIU"
VettM(7) = "LUG"
VettM(8) = "AGO"
VettM(9) = "SET"
VettM(10) = "OTT"
VettM(11) = "NOV"
VettM(12) = "DIC"
For CCol = 1 To 12
    Foglio = VettM(CCol)
    Sheets(Foglio).Range("C1:C31").Interior.ColorIndex = xlNone
    Sheets(Foglio).Range("D1:D31").ClearContents
Next CCol
Call Pasqua
Call Festivita

IniA = DateSerial(AnnoF, 9, 1)
FineA = DateSerial(AnnoF + 1, 8, 31)

For NM = IniA To FineA
    Foglio = VettM(Month(NM))
    If Foglio = "FEB" Then Worksheets(Foglio).Range("A29:B29").Value = ""
    GS = VettS(Weekday(NM, 2))
    GN = Day(NM)
    If Worksheets(Foglio).Cells(GN, 3).Interior.ColorIndex = xlNone Then
        If GS = "V" Then Worksheets(Foglio).Cells(GN, 3).Interior.ColorIndex = 15
        If GS = "S" Then Worksheets(Foglio).Cells(GN, 3).Interior.ColorIndex = 6
        If GS = "D" Then Worksheets(Foglio).Cells(GN, 3).Interior.ColorIndex = 3
        Worksheets(Foglio).Cells(GN, 4).Value = 8
        If GS = "V" Then Worksheets(Foglio).Cells(GN, 4).Value = 7
        If GS = "S" Or GS = "D" Then Worksheets(Foglio).Cells(GN, 4).ClearContents
    Else
        If GS = "S" Then Worksheets(Foglio).Cells(GN, 3).Interior.ColorIndex = 35
        If GS = "D" Then Worksheets(Foglio).Cells(GN, 3).Interior.ColorIndex = 45
    End If
    'If Worksheets(Foglio).Cells(GN, 1).Value <> GS Then
        Worksheets(Foglio).Cells(GN, 1).Value = GS
        Worksheets(Foglio).Cells(GN, 2).Value = GN
       
        'Worksheets(Foglio).Range("D2:E31").ClearContents
    'End If
Next NM

Application.Calculation = xlAutomatic
Application.ScreenUpdating = True
End Sub
Sub Festivita()
Worksheets("GEN").Cells(1, 3).Interior.ColorIndex = 7
Worksheets("GEN").Cells(6, 3).Interior.ColorIndex = 7
Worksheets("APR").Cells(25, 3).Interior.ColorIndex = 7
Worksheets("MAG").Cells(1, 3).Interior.ColorIndex = 7
Worksheets("GIU").Cells(2, 3).Interior.ColorIndex = 7
Worksheets("AGO").Cells(15, 3).Interior.ColorIndex = 7
Worksheets("AGO").Cells(16, 3).Interior.ColorIndex = 7 'Patrono
Worksheets("NOV").Cells(1, 3).Interior.ColorIndex = 7
Worksheets("DIC").Cells(8, 3).Interior.ColorIndex = 7
Worksheets("DIC").Cells(25, 3).Interior.ColorIndex = 7
Worksheets("DIC").Cells(26, 3).Interior.ColorIndex = 7
End Sub
Sub Pasqua()
    Dim a, b, c, d, e, M, N As Integer
    Dim Giorno, Mese, Anno As Integer
    Anno = Val(Worksheets("Gen").Range("P1"))
    Select Case Anno
    Case 1583 To 1699
        M = 22
        N = 2
    Case 1700 To 1799
        M = 23
        N = 3
    Case 1800 To 1899
        M = 23
        N = 4
    Case 1900 To 2099
        M = 24
        N = 5
    Case 2100 To 2199
        M = 24
        N = 6
    Case 2200 To 2299
        M = 25
        N = 0
    Case 2300 To 2399
        M = 26
        N = 1
    Case 2400 To 2499
        M = 25
        N = 1
    Case Else
        GPasqua = False
        Exit Sub
    End Select
   
    a = Anno Mod 19
    b = Anno Mod 4
    c = Anno Mod 7
   
    d = (19 * a + M) Mod 30
    e = (2 * b + 4 * c + 6 * d + N) Mod 7
   
    If d + e < 10 Then
        Giorno = d + e + 22
        Mese = 3
        Foglio = "Mar"
    Else
        Giorno = d + e - 9
        Mese = 4
         Foglio = "Apr"
    End If
    GPasqua = DateSerial(Anno, Mese, Giorno)
GPtta = Day(GPasqua) + 1
Sheets(Foglio).Cells(GPtta, 3).Interior.ColorIndex = 7
End Sub



Nel Vba di Thisworkbook, invece inserirai questo codice
Codice: Seleziona tutto
Private Sub Workbook_Open()
VettM(1) = "GEN"
VettM(2) = "FEB"
VettM(3) = "MAR"
VettM(4) = "APR"
VettM(5) = "MAG"
VettM(6) = "GIU"
VettM(7) = "LUG"
VettM(8) = "AGO"
VettM(9) = "SET"
VettM(10) = "OTT"
VettM(11) = "NOV"
VettM(12) = "DIC"
Call FormattaF
MeseA = Month(Now())
GA = Day(Now())
Worksheets(VettM(MeseA)).Select
Range("D" & GA).Select
End Sub

Darai al file qualsiasi nome purché termini con anno di quattro cifre
L'anno dovrà essere prima dell'estensione file (es.: OreSindacali_2012.xls)
(verrà preso in considerazione questo dato per formattare i dodici fogli ad ogni apertura del file)

Avendo utilizzato una macro da me realizzata per altri scopi e adattata alle tue esigenze, troverai le ore sindacali previste nella colonna D e non B.

Prova e fai sapere

ciao
Flash
Win10 + Office 2010 Ita
"Fotografica" al servizio dell'immagine
Avatar utente
Flash30005
Moderatore
 
Post: 8517
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Re: [Excel 2007]Gestione calendario anni multipli

Postdi wallace&gromit » 17/08/12 14:06

@ flash: la tua macro mi sfalsa di un giorno: mi risulta sabato 17 agosto 2012
@ lucaferr: se preferisci usare le formule invece di una macro prova questo file
https://rapidshare.com/files/3284083246/date%20lavoro%20vacanza.xls
l'unica macro "nascosta" è il calcolo della pasqua di flash (ne avevo in giro uno solo con le formule ma attualmente non lo trovo)

EDIT: in riga 367 puoi inserire queste formule, che cancellano il testo in caso di anno non bisestile
A367:
Codice: Seleziona tutto
=SE(MESE(DATA(K1;2;29))=3;"";A366+1)

B367:
Codice: Seleziona tutto
=SE(A367="";"";SE(VAL.ERRORE(CERCA.VERT(A367;$K$2:$L$15;2;0));SE(O(GIORNO.SETTIMANA(A367)=1;GIORNO.SETTIMANA(A367)=7);"festivo";SE(GIORNO.SETTIMANA(A367)=6;7;8));CERCA.VERT(A367;$K$2:$L$15;2;0)))
Office2016 + 2019 su win11
Avatar utente
wallace&gromit
Utente Senior
 
Post: 2174
Iscritto il: 16/01/12 14:21

Re: [Excel 2007]Gestione calendario anni multipli

Postdi Flash30005 » 17/08/12 15:08

E' vero perché come detto era per aptri scopi e l'anno iniziava il 1 settembre e finiva il 31 agosto :)
infatti nella macro "FormattaF" c'è

Codice: Seleziona tutto
IniA = DateSerial(AnnoF, 9, 1)
FineA = DateSerial(AnnoF + 1, 8, 31)

invece di
Codice: Seleziona tutto
IniA = DateSerial(AnnoF, 1, 1)
FineA = DateSerial(AnnoF, 12, 31)


é sufficiente sostituire ;)

ciao
Flash
Win10 + Office 2010 Ita
"Fotografica" al servizio dell'immagine
Avatar utente
Flash30005
Moderatore
 
Post: 8517
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Re: [Excel 2007]Gestione calendario anni multipli

Postdi wallace&gromit » 17/08/12 15:28

O era solo per testare se eravamo attenti anche con questa canicola? :lol:
Office2016 + 2019 su win11
Avatar utente
wallace&gromit
Utente Senior
 
Post: 2174
Iscritto il: 16/01/12 14:21


Torna a Applicazioni Office Windows


Topic correlati a "[Excel 2007]Gestione calendario anni multipli":


Chi c’è in linea

Visitano il forum: Nessuno e 27 ospiti