' --- PROCEDURA PRINCIPALE ---
Sub GeneraEStampaTutto()
Dim wsPar come foglio di lavoro
' Verifica esistenza foglio Parametri
In caso di errore, riprendi successivo
Imposta wsPar = ThisWorkbook.Sheets("Parametri")
In caso di errore vai a 0
Se wsPar non è nulla allora
MsgBox "Errore: Il foglio 'Parametri' non esiste!", vbCritical
Esci da Sottotitoli
Fine se
Application.ScreenUpdating = False
' 1. Genera il Calendario
Chiama CreazioneCalendarioBase
' 2. Esporta PDF Mensili
Call EsportaPDFMensiliFormattati
' 3. Esporta PDF Riepilogo (con foglio visibile per debug)
Chiama EsportaPDFRiepilogoFormattato
Applicazione.ScreenUpdating = Vero
MsgBox "Operazione completata con successo!" & vbCrLf & _
"Controlla la cartella: " & ThisWorkbook.path, vbInformation
Fine sottotitolo
' --- CREAZIONE CALENDARIO ---
Sub privata CreazioneCalendarioBase()
Dim wsCal come foglio di lavoro, wsPar come foglio di lavoro
Dim gruppi, maxGiorni, passi
Dim i As Integer, g As Integer, riga As Long
Dim dInizio As Date, dCorr As Date
Imposta wsPar = ThisWorkbook.Sheets("Parametri")
In caso di errore, riprendi successivo
Application.DisplayAlerts = False: Sheets("Calendario_2026").Delete: Application.DisplayAlerts = True
In caso di errore vai a 0
Imposta wsCal = ThisWorkbook.Sheets.Add: wsCal.Name = "Calendario_2026"
gruppi = Array("Cavicchioli", "Cipriani", "Stella", "Valli", "Dalla Fina", "Menegatti", "Bruschi", "A", "B", "Carroli")
maxGiorni = Array(46, 46, 25, 45, 23, 23, 23, 45, 46, 44)
passi = Array(8, 8, 16, 8, 16, 16, 16, 8, 8, 8)
wsCal.Range("A1:C1").Valore = Array("DATA", "GIORNO", "GRUPPO ASSEGNATO")
riga = 2
Per i = 0 a UBound(gruppi)
dInizio = wsPar.Cells(i + 2, 2).Value
dCorr = dInizio
Per g = 1 A maxGiorni(i)
wsCal.Cells(riga, 1).Value = dCorr
wsCal.Cells(riga, 2).Value = UCase(Format(dCorr, "dddd"))
wsCal.Cells(riga, 3).Valore = gruppi(i)
dCorr = dCorr + passi(i)
riga = riga + 1
Prossimo g
Il prossimo io
wsCal.UsedRange.Sort Key1:=wsCal.Range("A2"), Order1:=xlAscending, Header:=xlYes
wsCal.Columns("A:C").AutoFit
Fine sottotitolo
' --- TIMBRO MENSILI FORMATTATO ---
Private Sub EsportaPDFMensiliFormattati()
Dim ws come foglio di lavoro: Imposta ws = Sheets("Calendario_2026")
Dim m come intero
Dim percorso As String: percorso = ThisWorkbook.path & "\Mensili_2026\"
If Dir(percorso, vbDirectory) = "" Then MkDir percorso
' Formattazione estetica
Con ws.Range("A1:C1")
.Colore.Interno = RGB(0, 51, 102)
.Font.Color = vbWhite
.Font.Bold = Vero
Termina con
Per m = 1 a 12
ws.AutoFilterMode = False
ws.UsedRange.AutoFilter Campo:=1, Criteria1:=">=" & CDbl(DateSerial(2026, m, 1)), _
Operatore:=xlAnd, Criteria2:="<=" & CDbl(DateSerial(2026, m + 1, 0))
Con ws.PageSetup
.PrintTitleRows = "$1:$1"
.CenterHeader = "&""Arial,Bold""CALENDARIO TURNI - MESE " & m & " / 2026"
.CenterFooter = "Pagina &P di &N"
.Orientamento = xlRitratto
Termina con
ws.ExportAsFixedFormat Type:=xlTypePDF, Filename:=percorso & "Mese_" & Format(m, "00") & ".pdf"
Prossimo m
ws.AutoFilterMode = False
Fine sottotitolo
' --- RIEPILOGO FORMATTATO (CORRETTO) ---
Private Sub EsportaPDFRiepilogoFormattato()
Dim wsOrig come foglio di lavoro: imposta wsOrig = Sheets("Calendario_2026")
Dim wsRiep As Worksheet
Dim gruppi, g, col As Integer
gruppi = Array("Cavicchioli", "Cipriani", "Stella", "Valli", "Dalla Fina", "Menegatti", "Bruschi", "A", "B", "Carroli")
In caso di errore, riprendi successivo
Application.DisplayAlerts = False: Sheets("Riepilogo_Finale").Delete: Application.DisplayAlerts = True
In caso di errore vai a 0
Imposta wsRiep = Fogli.Aggiungi: wsRiep.Name = "Riepilogo_Finale"
colonna = 1
Per ogni g In gruppi
wsRiep.Cells(1, col).Value = UCase(g)
wsOrig.AutoFilterMode = False
wsOrig.UsedRange.AutoFilter Campo:=3, Criteria1:=g
' Copia data
wsOrig.Range("A2:A1000").SpecialCells(xlCellTypeVisible).Copy
wsRiep.Cells(2, col).PasteSpecial Incolla:=xlPasteValues
colonna = colonna + 1
Prossimo g
' Formattazione Riepilogo
Con wsRiep.UsedRange
.Colonne.Adattamento automatico
.Borders.LineStyle = xlContinuous
.Font.Name = "Calibri"
.Dimensione carattere = 10
.NumberFormat = "gg/mm/aaaa"
.Allineamento orizzontale = xlCenter
Termina con
Con wsRiep.Rows(1)
.Colore interno = RGB(192, 0, 0)
.Font.Color = vbWhite
.Font.Bold = Vero
Termina con
' Configurazione Stampa Riepilogo
Con wsRiep.PageSetup
.Orientamento = xlPaesaggio
.Zoom = Falso
.FitToPagesWide = 1
.FitToPagesTall = 1
.TopMargin = Application.InchesToPoints(0.5)
.CenterHeader = "&""Arial,Bold""RIEPILOGO ANNUALE ASSEGNAZIONI GIORNATE - 2026"
Termina con
' Generazione PDF Riepilogo
wsRiep.ExportAsFixedFormat Tipo:=xlTypePDF, _
Nome file:=ThisWorkbook.percorso & "\Riepilogo_Annuale_2026.pdf", _
Qualità:=xlQualityStandard, _
IncludeDocProperties:=True, _
IgnoraAreaStampa:=Falso, _
OpenAfterPublish:=False
wsOrig.AutoFilterMode = False
Fine sottotitolo