Option Explicit
Const Feuille = "Feuil1" 'Nom de l'onglet de la feuille à recalculer
Const Delai = 86400# 'nombre de secondes dans un jour
Public DernierTop 'date et heure du prochain recalcul
Sub CalculerFeuille() 'Procédure de recalcul et programmation du prochain recalcul
ArreterCalculAuto 'arrêt de recalcul auto
Sheets(Feuille).Calculate 'calcul de la feuille
LancerCalculAuto 'programmation du prochain recalcul
End Sub
Sub ArreterCalculAuto() 'procédure d'arrêt du recalcul auto
On Error Resume Next 'au cas où il n'y a pas de prochain recalcul programmé
Application.OnTime EarliestTime:=DernierTop, Procedure:="CalculerFeuille", Schedule:=False
On Error GoTo 0 'on réactive l'interception des erreurs
End Sub
Sub LancerCalculAuto() 'procédure de programmation du prochain recalcul auto
DernierTop = Now() + 2 / Delai 'date et heure du prochain recalcul (dans deux secondes)
Application.OnTime EarliestTime:=DernierTop, Procedure:="CalculerFeuille", Schedule:=True
End Sub
Function Visible(x As Range)
Application.Volatile
Dim xcell, i&, j&
'déclaration d'un tableau de même dimension que la plage de cellule x
ReDim t(1 To x.Rows.Count, 1 To x.Columns.Count)
For Each xcell In x 'pour chaque cellule de la plage
'i est le N° de ligne (n° absolu) de la cellule xcell
'j est le N° de colonne (n° absolu) de la cellule xcell
i = xcell.Row - x(1, 1).Row + 1: j = xcell.Column - x(1, 1).Column + 1:
't(i,j)=1 si la cellule est visible ou bien vaut 0 si la cellule est masquée
t(i, j) = -1 * (xcell.EntireColumn.Hidden = False And xcell.EntireRow.Hidden = False)
Next xcell
Visible = t 'on retourne le tableau t
End Function