Private Sub WorkBook_Open()
Calcul
Application.OnTime 0, "ThisWorkbook.Calcul" 'exécution à minuit pour la MAJ
End Sub
Private Sub WorkBook_SheetActivate(ByVal Sh As Object)
Calcul Sh
End Sub
Private Sub WorkBook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
Calcul Sh
End Sub
Sub Calcul(Optional Sh As Object)
Dim mois As Byte, an%, c As Range, jour As Byte, n As Byte, f As Object
Static ncumul& 'mémorisation
If Sh Is Nothing Then Set Sh = Me.ActiveSheet
If IsDate("1 " & Sh.Name) Then
mois = Month("1 " & Sh.Name): an = Year("1 " & Sh.Name)
For Each c In Sh.[B6:H11]
If c.Borders(xlEdgeLeft).LineStyle <> xlNone Then 'repérage par les bordures
jour = jour + 1
If DateSerial(an, mois, jour) >= Date And LCase(c) = "travail" Then n = n + 1
End If
Next
Application.EnableEvents = False 'désactive les évènements
Sh.[K2] = n
ncumul = ncumul + n
ElseIf UCase(Sh.Name) = "TOTAUX" Then
ncumul = 0 'RAZ
For Each f In Sheets
If IsDate("1 " & f.Name) Then Calcul f
Next
Application.EnableEvents = False 'désactive les évènements
Sh.[D13] = ncumul - Sh.[E8]
End If
Application.EnableEvents = True 'réactive les évènements
End Sub