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.
Mise en œuvre
Section titled “Mise en œuvre”Insérez le code suivant dans le module ThisWorkbook de votre projet VBA.
' --- In ThisWorkbook module ---
' Variable to store the scheduled time for the timerPrivate mScheduledTime As Date
' This procedure will be called by the timer to close the workbookPublic Sub CloseAndSave() ' Save any changes and close the workbook ThisWorkbook.Close SaveChanges:=TrueEnd Sub
' This event runs when the workbook is opened, starting the timerPrivate 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.", vbInformationEnd Sub
' This event runs just before the workbook closesPrivate 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:=FalseEnd SubComment cela fonctionne
Section titled “Comment cela fonctionne”Workbook_Open: Au démarrage de l’application, cet événement planifie l’exécution de la macroCloseAndSaveaprè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).CloseAndSave: Il s’agit de la macro qui effectue l’action. Elle enregistre le classeur, puis le ferme.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.