XL 2013 Macro Save&Close d'un fichier après 10' d'inactivité en écriture seulement

Baltro

XLDnaute Nouveau
Bonjour à tous !

Je me permet de vous soliciter pour un petit souci que je rencontre sur mon fichier Excel. Je travail dans un service ou nous avons en commun un fichier Excel pour la saisie de différente donnée, sauf que le problème courant est l'oubli de fermeture du fichier en écriture.

J'ai mi l'ensemble des paramètres pour mes utilisateurs afin de réduire les problèmes, mot de passe, conseil de lecture seule à l'ouverture au lieu de l'écriture.

Sauf que j'ai toujours par moment certains de mes collègues qui partent en oubliant de fermer le fichier en écriture... Je souhaitais du coup mettre une deconnexion automatique et sauvegarde.

Je suis tombé sur ce topic sur lequel j'ai pu prendre le plus d'information (un grand merci à JCGL):
https://www.excel-downloads.com/thr...ture-dun-fichier-apres-10-dinactivite.163186/

Cependant, la plupart d'entre nous utilisent le fichier en lecture seule, et la macro est active aussi en lecture et tente du coup d'enregistrer une copie du fichier après les Xmn/sec. Y a t'il une possibilité d'empêcher l’exécution de cette macro si on est en lecture? Ou l'activer uniquement en écriture?

Je vous joins le code que j'utilise actuellement qui est celui de JCGL:
"ThisWorkbook"
Code:
Private Sub Workbook_Open()

Arrêt = False: Laps = Timer
'Le temps pendant lequel le fichier n'est pas activé
'Heures:Minutes:Secondes
' à ajuster ici c'est réglé sur 10 minutes !
Durée = TimeValue("00:10:05")
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

"Module1"
Code:
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
    'Ferme et enregistre le classeur.
    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

Un immense merci pour vos réponses quel qu'elle soit.

Cordialement,
Baltro
 
Dernière édition:

Papou-net

XLDnaute Barbatruc
Re : Macro Save&Close d'un fichier après 10' d'inactivité en écriture seulement

Bonjour Baltro,

Essaie en déplaçant la macro dans la procédure comme ci-dessous:

Code:
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
'Remarque : cette macro événementielle détecte les changements dans une cellule du classeur.
Arrêt = True
Laps = Timer
End Sub
Elle ne devrait se déclencher que si une cellule est modifiée.

A +

Cordialement.
 

Baltro

XLDnaute Nouveau
Re : Macro Save&Close d'un fichier après 10' d'inactivité en écriture seulement

Merci pour votre réponse je vais faire le test. Cependant cela implique que si un utilisateur se met en écriture et ne fait aucune modification, je n'aurais pas de déclenchement de la macro, est-ce exact?

Les filtres sont-ils pris en compte dans la modification d'une cellule?

Edit: Après avoir continuer à fouiller un peu, je suis tombé sur ce topic:
https://www.excel-downloads.com/thr...ivite-mais-seulement-en-lecture-seule.233857/

En faite il me faudrait l'inverse avec la sauvegarde en plus, donc je pense qu'il y a une base de code à utiliser si jamais (Merci BrunoM45)
Code:
Option Explicit

Private Sub Workbook_BeforeClose(Cancel As Boolean)
  Call StopTimer
End Sub

Private Sub Workbook_Open()
  Call StartTimer
End Sub

Code:
Sub FermerWbk()
  If ThisWorkbook.ReadOnly = True Then
    ' Sortir du mode edition si l'utilisateur s'y trouve
    SendKeys ("{TAB}")
    ' Fermer le classeur sans l'enregistrer
    ThisWorkbook.Close SaveChanges:=False
  End If
End Sub

Sub StartTimer()
  ' Lancer un timer pour 10 minutes
  RunWhen = Now + TimeValue("00:00:15")
  Application.OnTime RunWhen, "FermerWbk"
End Sub

Sub StopTimer()
  On Error Resume Next
  ' Stoppe la procédure dans le délai
  Application.OnTime EarliestTime:=RunWhen, Procedure:="FermerWbk", Schedule:=False
  On Error GoTo 0
End Sub
 
Dernière édition:

Baltro

XLDnaute Nouveau
Re : Macro Save&Close d'un fichier après 10' d'inactivité en écriture seulement

Bonjour Baltro,

Essaie en déplaçant la macro dans la procédure comme ci-dessous:

Code:
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
'Remarque : cette macro événementielle détecte les changements dans une cellule du classeur.
Arrêt = True
Laps = Timer
End Sub
Elle ne devrait se déclencher que si une cellule est modifiée.

A +

Cordialement.

Du coup après test effectivement ce code ne correspond pas à ce que je cherche malheureusement
 

Baltro

XLDnaute Nouveau
Re : Macro Save&Close d'un fichier après 10' d'inactivité en écriture seulement

Après plusieurs essais je sèche, j'ai essayer de mixer les deux codes mais je n'arrive pas à obtenir ce que je souhaite.

D'un côté j'ai un code qui 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. (le code de JCGL)

De l'autre côté j'ai un code qui 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. (le code de BrunoM45 ou j'ai modifié la valeur de 2 cellules; ReadOnly = False; SaveChanges:=True)

Je pense que ça doit être un petit truc à intégrer mais rien à faire je n'y arrive pas..

Avez-vous une petite idée?

Un immense merci d'avance!
 

Discussions similaires

Réponses
2
Affichages
129

Statistiques des forums

Discussions
311 720
Messages
2 081 915
Membres
101 837
dernier inscrit
Ugo