Problème "Save&Close" d'un fichier après Xmn d'inactivité
Bonjour à tous,
Je me permet de vous solliciter pour un petit souci que je rencontre sur mon fichier Excel. Je cherche à créer une macro afin qu'un fichier se ferme après Xmn d'inactivité (absence de modification d'une cellule par exemple) seulement en écriture, si mon utilisateur se promène simplement sur le fichier je souhaite qu'il se fasse éjecter aussi à terme du compte à rebours (le mouvement de souris et de changement d'onglet ne doit pas être pris en compte du coup).
J'ai fais pas mal de recherche et je suis tombé sur deux codes qui ressemblent à ce que je souhaite mais avec chacun une fonction manquante.
Le 1er reset le timer dès que je modifie une cellule et qui à la suite d'une activité de Xmn me ferme et enregistre le fichier sans faire de distinction Ecriture/Lecture seule. Il me manquerait seulement d'appliquer le code seulement en écriture ici.
"ThisWorkbook"
Private Sub Workbook_Open()
Arrêt = False: Laps = Timer
Durée = TimeValue("00:10:05")
Départ
End Sub
Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
Arrêt = True
Laps = Timer
End Sub"Module1"
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("00:10:05")
End Sub
Sub FermerLeClasseur()
Dim M As Integer
Dim S As Integer
Dim R As String
If Arrêt = False Then
ThisWorkbook.Close True
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 SubLe 2nd que j'ai ferme et enregistre le fichier après Xmn dès l'ouverture seulement en écriture. Il me manquerait seulement à reset ce timer dès que je modifie une cellule.
"ThisWorkbook"
Option Explicit
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Call StopTimer
End Sub
Private Sub Workbook_Open()
Call StartTimer
End Sub"Module1"
Sub FermerWbk()
If ThisWorkbook.ReadOnly = False Then
SendKeys ("{TAB}")
ThisWorkbook.Close SaveChanges:=True
End If
End Sub
Sub StartTimer()
RunWhen = Now + TimeValue("00:10:00")
Application.OnTime RunWhen, "FermerWbk"
End Sub
Sub StopTimer()
On Error Resume Next
Application.OnTime EarliestTime:=RunWhen, Procedure:="FermerWbk", Schedule:=False
On Error GoTo 0
End SubAprès plusieurs essais je sèche, j'ai essayé de mixer les deux codes mais je n'arrive pas à obtenir ce que je souhaite. Je pense que ça doit être un petit truc à intégrer mais rien à faire je n'y arrive pas dans un sens comme dans l'autre les codes ne se ressemblant pas trop..
Avez-vous une petite idée?
Un immense merci d'avance pour vos réponses!
Baltro