Microsoft 365 Clore automatiquement (ou après avertissement) un fichier après x minutes d'inactivité

Aloha

XLDnaute Accro
Bonjour,

un problème qui doit être pas mal répandu c'est la situation où plusieurs personnes travaillent sur un même fichier, l'un après l'autre et qu'il arrive trop souvent que la personne qui a ouvert le fichier oublie de le refermer, ce qui bloque le prochain qui ne peut l'ouvrir qu'en lecture seule.

J'imagine la solution que je cherche comme suit:
Une personne a ouvert le fichier, y a apporté des modifications ou l'a seulement consulté.
S'il ne le referme pas après, mettons 30 minutes, un message apparaît annonçant la fermeture après le temps affiché sur un compteur.
A voir encore si le fichier doit être enregistré ou seulement clos.
Une alternative dont je ne sais pas si elle est réalisable:
la personne qui attend de travailler dans le fichier "frappe à la porte" de la première personne moyennant un signal pour la rendre attentive au fait que le fichier est toujours ouvert et si elle ne réagit pas dans un délai de x minutes, le fichier est fermé. Pour cela Excel qui tourne sur l'ordinateur de la deuxième personne devrait avoir l'information qui a ouvert le fichier.
A noter que le fichier commun se trouve sur un serveur.

Quelqu'un parmi vous connaît-il une solution à cette tâche?
D'avance je vous remercie
Aloha
 

Etoto

XLDnaute Barbatruc
Bonjour,

un problème qui doit être pas mal répandu c'est la situation où plusieurs personnes travaillent sur un même fichier, l'un après l'autre et qu'il arrive trop souvent que la personne qui a ouvert le fichier oublie de le refermer, ce qui bloque le prochain qui ne peut l'ouvrir qu'en lecture seule.

J'imagine la solution que je cherche comme suit:
Une personne a ouvert le fichier, y a apporté des modifications ou l'a seulement consulté.
S'il ne le referme pas après, mettons 30 minutes, un message apparaît annonçant la fermeture après le temps affiché sur un compteur.
A voir encore si le fichier doit être enregistré ou seulement clos.
Une alternative dont je ne sais pas si elle est réalisable:
la personne qui attend de travailler dans le fichier "frappe à la porte" de la première personne moyennant un signal pour la rendre attentive au fait que le fichier est toujours ouvert et si elle ne réagit pas dans un délai de x minutes, le fichier est fermé. Pour cela Excel qui tourne sur l'ordinateur de la deuxième personne devrait avoir l'information qui a ouvert le fichier.
A noter que le fichier commun se trouve sur un serveur.

Quelqu'un parmi vous connaît-il une solution à cette tâche?
D'avance je vous remercie
Aloha
Bonjour,

Quelle bonne idée !! Je suis preneur pour un code VBA de ce genre.
 

Dudu2

XLDnaute Barbatruc
Bonjour,
C'est assez simple.
Par convention on va dire qu'il y a activité de l'utilisateur s'il modifie une feuille quelconque.
On aurait pu prendre la simple sélection d'une ou plusieurs cellules.
La difficulté réside davantage en la fermeture du classeur, mais bon, je suis armé de quelques backlog de code.

Il faut juste veiller à bien mettre ce code dans le Module Workbook.
VB:
'------------------------------------------
'Ouverture du classeur & lancement du Timer
'------------------------------------------
Private Sub Workbook_Open()
    'Lance le Timer d'Inactivité
    Call InitialiseInactivité
End Sub

'------------------------------------------------------------------------
'Modification faite par l'utilisateur dans une feuille & relance du Timer
'------------------------------------------------------------------------
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
    'Relance le Timer d'Inactivité
    Call InitialiseInactivité
End Sub

'-------------------------------------------
'Fermeture du classeur & annulation du Timer
'-------------------------------------------
Private Sub Workbook_BeforeClose(Cancel As Boolean)
    'Annule le Timer d'Inactivité
    Call AnnuleInactivité
End Sub
Puis inclure dans le Projet VBA le Module_DétecteInactivité de ce fichier.
 
Dernière édition:

Aloha

XLDnaute Accro
Bonjour,
Merci beaucoup pour cette solution rapide!
Seulement, il ne faut pas de message demandant si le classeur doit rester ouvert pour parer à la situation où la personne n'est pas près de l'ordinateur. Si je comprends bien, aussi longtemps qu'on ne clique pas sur oui ou non, le fichier restera ouvert, ce qui ne m'avance pas.
Ce serait mieux si un compteur se mettait en route avertissant, si possible avec un signal sonore toutes les secondes, que dans autant de minutes le fichier se fermera.
A+
Aloha
 

Dudu2

XLDnaute Barbatruc
Moi je veux bien faire tout ce que tu veux. C'est une question de spécifications précises.
S'il ne le referme pas après, mettons 30 minutes, un message apparaît annonçant la fermeture après le temps affiché sur un compteur.
A voir encore si le fichier doit être enregistré ou seulement clos.
Suite à ton premier message j'ai lancé un prompt.
Maintenant s'il n'y a pas de prompt à échéance du délai, si le fichier a été modifié, on le ferme avec ou sans sauvegarde ?

Ce serait mieux si un compteur se mettait en route avertissant, si possible avec un signal sonore toutes les secondes,
Ok mais alors là c'est l'usine à gaz car il faut gérer au moins 3 timers.
- Le timer d'inactivité pré-signaux sonores
- Le timer des signaux sonore par seconde
- Le timer d'inactivité post-signaux sonores
Et celui des signaux sonores à l'approche de l'échéance et qui serait arrêté par l'utilisateur par quel moyen ?
- L'activation du classeur s'il n'est pas actif ?
- Autre s'il est actif ESC ?
que dans autant de minutes le fichier se fermera.
Il faut que le signal sonore parle ? Un message vocal est possible mais en anglais. Je sais pas faire en français.
Ou une signal sonore genre bip ?
 

Aloha

XLDnaute Accro
Re,
s'il n'y a pas de prompt à échéance du délai, si le fichier a été modifié, on le ferme avec ou sans sauvegarde ?
C'est à décider encore. Il y aurait moyen de prévoir les 2 possibilités et d'en mettre une en commentaire.
Ok mais alors là c'est l'usine à gaz car il faut gérer au moins 3 timers.
- Le timer d'inactivité pré-signaux sonores
- Le timer des signaux sonore par seconde
- Le timer d'inactivité post-signaux sonores
Et celui des signaux sonores à l'approche de l'échéance et qui serait arrêté par l'utilisateur par quel moyen ?
- L'activation du classeur s'il n'est pas actif ?
- Autre s'il est actif ESC ?
Si c'est trop compliqué, alors non.
Il faut que le signal sonore parle ? Un message vocal est possible mais en anglais. Je sais pas faire en français.
Ca serait génial peut importe si c'est en anglais. Une solution superbe!
A+
Aloha
 

Dudu2

XLDnaute Barbatruc
Le speech en Excel est d'une qualité assez médiocre. Mais bon, il y a un message.
J'ai fait au plus simple pour ne pas importer d'autres modules que j'ai en magasin pour afficher un MsgBox avec Timer. Pour l'information post-échéance inactivité, j'ai utilisé une Shape, et pour l'interruption du compte à rebours, la touche ESCAPE.

La petite difficulté attendue a été d'intercepter la touche ESCAPE. Application.OnKey() n'a pas fonctionné dans ce contexte et j'ai donc dû basculer sur l'API GetAsyncKeyState().

Une plus grande difficulté est de ré-activer le classeur au cas où l'utilisateur est parti sur une autre application ou un autre classeur. En effet, lorsque l'information post-échéance inactivité est notifiée, il faut que l'utilisateur sache d'où ça vient. Avec Excel basculer d'un classeur à l'autre est parfois non garanti malgré tous les Activate possibles alignés. J'ai mis les Activate dans la boucle pour tenter de forcer les choses, ça a l'air de fonctionner.

Des constantes permettent de paramétrer le système avec la version précédente (prompt post-échéance inactivité) ou la nouvelle version (pas de prompt mais un Warning limité à 15 secondes paramétrables).
VB:
'-----------------------------------------
'Constantes de paramétrage de l'inactivité
'Fermer le classeur après toute modif
'-----------------------------------------
'Private Const DelaiInactivitéHHMMSS = "00:30:00"    'Délai du Timer d'inactivité
Private Const DelaiInactivitéHHMMSS = "00:00:15"
Private Const MessagePromptSurInactivité = False    'True: prompt à l'échéance du Timer d'inactivité pour connaitre les intentions de l'utilisateur
Private Const WarningInactivitéDelaiSecondes = 15   'Si MessagePromptSurInactivité = False, délai du Warning avant fermeture automatique du classeur
Private Const WarningInactivitéEnregistrerClasseur = True   'Si MessagePromptSurInactivité = False, True enregistre le classeur à sa fermeture automatique
Private Const WarningInactivitéEnglishVocalMessage = "Warning ! The Excel workbook will automatically close in * seconds"
 
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
312 247
Messages
2 086 582
Membres
103 247
dernier inscrit
bottxok