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"
"Module1"
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
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.
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
"ThisWorkook"
"Module1"
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
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..
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
Avez-vous une petite idée?
Un immense merci d'avance pour vos réponses!
Baltro
Partager