Dans un module de macro:
Option Explicit
Public Durée As Date
Public Arrêt As Boolean
Public Laps As Double
Public Test As Boolean
Sub Départ()
Dim D As Date
D = Now + TimeValue(Durée)
Application.OnTime D, "FermerLeClasseur"
Durée = TimeValue("00:01:00")
End Sub
Sub FermerLeClasseur()
Dim M As Integer
Dim S As Integer
Dim R As String
If Arrêt = False Then
'Ferme et enregistre le classeur.
Test = True
Sauve_Planif
Else
Laps = Timer - Laps
M = Int(Laps / 60)
S = Int(Laps)
R = TimeValue("00:" & M & ":" & S)
Durée = TimeValue(Durée) - TimeValue(R)
Arrêt = False
Départ
End If
End Sub
Dans "ThisWorkBook", les 3 codes suivants :
Private Sub Workbook_Open()
Arrêt = False: Laps = Timer
Test = False
'Le temps pendant lequel le fichier n'est pas activé
'Heures:Minutes:Secondes
' à ajuster ici c'est réglé sur 1 minute !
Durée = TimeValue("00:01:00")
Départ
End Sub
Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
'Remarque : cette macro événementielle détecte les clics dans une cellule du classeur.
'Pas de clic dans une cellule donnée, pas de saisie dans un userform, pas de changement de feuille...
If Test = False Then
Arrêt = True
Laps = Timer
Else
Test = True
End If
End Sub
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
If Test = False Then
Call Sauve_Planif
Else
Application.EnableEvents = False
End If
End Sub
Et pour finir, les dernières lignes de ma macro Sauv_Planif sont :
" If Test = True Then
'Enregistre et lance la Fermeture du classeur.
'ActiveWorkbook.Save
Ferme
Else
End If