Bonjour le forum,
je vous lance une réflexion avant le weekend!
J'ai un classeur qui fonctionne seulement avec des formulaires, les feuilles étant inaccessibles aux usagers. Et je voudrais que le classeur se ferme automatiquement s'il n'y a aucune activité dans les userforms. Il y a potentiellement deux formulaires d'ouvert en même temps (celui de l'accueil et un autre de recherche).
J'ai trouvé plusieurs optons de code sur le net. Or, j'ai mis un timer sur l'userform de l'accueil (10 minutes) et un pour le fichier (1 seconde). Les timers fonctionnent bien, mais comme j'ai mis un code pour empêcher de fermer l'userform par le X , la fermeture ramène au msgBox de la commande:
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
MsgBox "Utilisez le bouton rouge : Quittez le répertoire"
If CloseMode = 0 Then Cancel = True
End Sub
Je me demande comment il serait possible de fermer le tout sans aucune intervention?
Merci pour vos lumières, je vous refile les codes.
TIMER pour l'userform
Userform
Private Sub UserForm_Initialize()
dTime = Time + TimeValue("00:10:00")
Application.OnTime dTime, "KillUserForm"
End Sub
Module
Public dTime As Date
Sub KillUserForm()
'Unload UserForm1
Unload UserForm2
'Unload UserForm3
End Sub
TIMER pour le classeur
Workbook
Private Sub Workbook_Open()
UserForm2.Show
'=Code '' =explication
''Le temps pendant lequel le fichier n'est pas activé
'' à ajuster ici c'est réglé sur 05 minutes !
Arrêt = False: Laps = Timer
Durée = TimeValue("01:00: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.
'Vous pouvez bien entendu utiliser un autre événement pour décider qu'un classeur est inactif
'Pas de clic dans une cellule donnée, pas de saisie dans un userform, pas de changement de feuille...
Arrêt = True
Laps = Timer
End Sub
Module
Option Explicit
Public Durée As Date
Public Arrêt As Boolean
Public Laps As Double
Sub Départ()
Dim D As Date
D = Now + TimeValue(Durée)
Application.OnTime D, "FermerLeClasseur"
Durée = TimeValue("01:00:00")
End Sub
Sub FermerLeClasseur()
Dim M As Integer
Dim s As Integer
Dim R
If Arrêt = False Then
'Ferme et enregistre le classeur.
ThisWorkbook.Close True
Else
Laps = Timer - Laps
M = Int(Laps / 60)
s = Int(Laps - M * 60)
R = TimeValue("00:" & M & ":" & s)
Durée = TimeValue(Durée) - R
Arrêt = False
Départ
End If
End Sub