Aller au contenu

Comment fermer le classeur après une durée donnée

Solution : Vous pouvez utiliser VBA pour configurer une minuterie avec Application.OnTime qui ferme automatiquement le classeur après une durée spécifiée. C’est un moyen efficace de faire respecter les limites de l’essai.

Combinez ceci avec les options de sécurité de XLS Padlock pour interdire l’accès à l’éditeur VBA et compiler votre code VBA afin d’empêcher les utilisateurs de désactiver la minuterie.

Insérez le code suivant dans le module ThisWorkbook de votre projet VBA.

' --- In ThisWorkbook module ---
' Variable to store the scheduled time for the timer
Private mScheduledTime As Date
' This procedure will be called by the timer to close the workbook
Public Sub CloseAndSave()
' Save any changes and close the workbook
ThisWorkbook.Close SaveChanges:=True
End Sub
' This event runs when the workbook is opened, starting the timer
Private Sub Workbook_Open()
' Set the timer to run the "CloseAndSave" procedure in 8 hours.
' You can change the time value as needed.
mScheduledTime = Now + TimeValue("08:00:00")
Application.OnTime EarliestTime:=mScheduledTime, Procedure:="ThisWorkbook.CloseAndSave"
' Optional: Inform the user that the application will close automatically.
' MsgBox "This application will automatically close in 8 hours.", vbInformation
End Sub
' This event runs just before the workbook closes
Private Sub Workbook_BeforeClose(Cancel As Boolean)
' Cancel the scheduled OnTime event to prevent errors if the user
' closes the workbook manually before the timer runs.
On Error Resume Next
Application.OnTime EarliestTime:=mScheduledTime, Procedure:="ThisWorkbook.CloseAndSave", Schedule:=False
End Sub
  1. Workbook_Open : Au démarrage de l’application, cet événement planifie l’exécution de la macro CloseAndSave après 8 heures (TimeValue("08:00:00")). Vous pouvez ajuster cette durée selon vos besoins (par exemple, TimeValue("01:00:00") pour une heure).
  2. CloseAndSave : Il s’agit de la macro qui effectue l’action. Elle enregistre le classeur, puis le ferme.
  3. Workbook_BeforeClose : Il s’agit d’une étape de nettoyage essentielle. Si l’utilisateur ferme le classeur manuellement, ce code annule la minuterie en attente, empêchant Excel d’essayer d’exécuter une macro sur un classeur qui n’est plus ouvert, ce qui provoquerait une erreur.