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"
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
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"
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
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 Sub
Le 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.
"ThisWorkook"
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
Option Explicit
 
Private Sub Workbook_BeforeClose(Cancel As Boolean)
  Call StopTimer
End Sub
 
Private Sub Workbook_Open()
  Call StartTimer
End Sub
"Module1"
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
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 Sub
Aprè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