Fermeture automatique après inactivité

Bonjour à tous.

Je crée en ce moment un tableau pour quelqu'un de plus nul que moi (il y en a quelques uns) et j'ai besoin que son fichier se sauvegarde et se ferme automatiquement au bout d'une heure d'inactivité (pour que son fichier soit synchronisé sur Google Drive même s'il a oublié de le fermer et puisse être utilisé/modifier d'un autre terminal ensuite).

Je pense que cette fois-ci, je ne vais pas pouvoir faire l'impasse de VBA mais je n'y connais absolument rien.

La macro devrait appartenir à ce fichier uniquement, et être active dès l'ouverture du fichier, sans intervention humaine...

J'ai déjà vu quelques exemples sur le net mais je n'y comprends pas grand chose pour le moment alors je préfère demander ici pour l'appliquer directement à mon fichier.

Si vous avez moyen de m'aider, vous aurez droit à toute ma reconnaissance.

Merci.

Bonjour,

Dans excel tout n'est pas détectable.

Changer de feuille, scroller pour lire n'est pas une activité pour lui.

Il faudra au minimum sélectionner une nouvelle cellule de temps en temps pour montrer que tu es là.

A tester :

Option Explicit

Dim HeureFin As Date

Private Sub Workbook_BeforeClose(Cancel As Boolean)
    On Error Resume Next
    Application.OnTime EarliestTime:=HeureFin, Procedure:="fermer", Schedule:=False
    On Error GoTo 0
End Sub

Private Sub Workbook_Open()
    HeureFin = Now() + 1 / 24
    Application.OnTime HeureFin, "fermer"
    Feuil1.[A2] = HeureFin
End Sub

Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
    On Error Resume Next
    Application.OnTime EarliestTime:=HeureFin, Procedure:="fermer", Schedule:=False
    On Error GoTo 0
    HeureFin = Now() + 1 / 24
    Application.OnTime HeureFin, "fermer"
    Feuil1.[A2] = HeureFin ' pour les tests, mettre en commentaire si on ne veux pas l'afficher
End Sub

Private Sub fermer()
    Application.OnTime EarliestTime:=HeureFin, Procedure:="fermer", Schedule:=False
    Application.DisplayAlerts = False
    ThisWorkbook.Save ' sauvegarder
    Application.DisplayAlerts = True
    ThisWorkbook.Close ' fermer ce classeur
    ' Application.Quit ' fermer excel
End Sub

eric

edit: suite à une très juste remarque de yvouille en mp on pourrait ajouter l'événement Workbook_SheetChange pour détecter l'activité sur un changement de feuille. Reste qu'il faudra toujours penser à cliquer sur une cellule si on ne change pas de feuille et que l'on veut garder le fichier ouvert.

1'483fermeture-auto-1h.xlsm (16.25 Ko)

Je vais essayer cela cet après midi. Je vais bien trouver comment créer les macros et les intégrer au fichier, pour qu'elles soient dépendantes du fichier, et non pas du terminal sur lequel on travaille.

Merci.

Alt+F11 pour ouvrir VBE

Double-clic sur ThisWorkbook et y coller le code.

eric

Aïe !!

J'ai bien été dans VB, double-cliqué sur thisworkgroup, et collé TOUT le code que vous m'avez fourni.

Pour tester, j'ai mis le temps à 0.02/24 au lieu de 1/24 et j'ai bien enregistré en classeur permettant l'exécution des macros (xlsm) mais lorsque j'ouvre le classeur et le laisse sans rien faire, il me met un message d'erreur au moment d'effectuer la macro qui dit que :

E:\......\...xlsm'!fermer' ne peut pas s'exécuter. Il est possible qu'elle ne soit pas disponible dans ce classeur ou que toutes les macros soient désactivées.

Hors, j'ai bien activé les macros dans les paramètres de confidentialité des macros (dans les options d'excel)

Accessoirement, est-ce normal que 'Application.Quit' soit inscrit en vert en bas du code ? Est-ce parceque vous me le proposez de façon optionnelle ?

Bonsoir,

Bonsoir Eric,

Essaie cette alternative (réglée sur 1 minute ).

Alors, en effet, j'ai copié le module1 vers mon classeur et j'ai remplacé le code de thisworkgroup par le 2ème proposé et le fichier se ferme bien au bout d'une minute. Je pourrai donc régler le temps que je veux. Par contre, j'ai fait un changement dans une cellule et j'ai fait exprès de ne pas sauvegarder et la macro n'a pas sauvegardé elle non plus avant de fermer le classeur. Il me semble pourtant voir dans votre code: ".Saved = True"...

Est-ce une erreur ?

Peut-être que de toute façon, je devrais apprendre à la personne qui va utiliser le fichier à sauvegarder après chaque modif...

Mais si vous arriviez à le faire dans la macro, je pourrai choisir ensuite de le mettre ou non...

Re,

Bonjour jean-eric,

un message d'erreur au moment d'effectuer la macro qui dit que : E:\......\...xlsm'!fermer' ne peut pas s'exécuter.

J'ai l'impression qu'il cherche la macro dans un autre classeur.

Ca te fait ça aussi sur le classeur que je t'ai fourni ?

Accessoirement, est-ce normal que 'Application.Quit' soit inscrit en vert en bas du code ? Est-ce parceque vous me le proposez de façon optionnelle ?

C'est ça, au cas où tu veuilles en plus fermer excel.

Sinon teste avec la proposition de jean-eric. Dans son classeur tu as également du code dans le Module1.

eric

edit: c'est bon, ça vient de me faire l'erreur. Il a bizarrement gardé un lien vers le fichier d'origine., ça ne le faisait pas hier.

Tu as l'autre fichier de toute façon

Tout d'abord, pardon, je n'avais pas vu que j'avais deux interlocuteur.

Donc, en effet, Eriiic, le message d'erreur apparaît bien alors que j'ai copié le code dans le bon classeur (il n'y a que celui là d'ouvert) par contre je n'avais pas vu que tu faisais référence à la cellule A2 de la feuille 1 (qui dans mon classeur est occupée par autre chose (désolé de ne pas vous l'avoir envoyé mais je ne préfère pas...). J'ai corrigé pour une feuille inoccupée mais le message d'erreur apparaît toujours.

Pour le code de Jean-Eric, comme je l'ai dit plus haut, ça marche mais, pour l'instant, sans sauvegarder avant de fermer...

Re,

Modifie la procédure ainsi :

Sub ShutDown()
    ThisWorkbook.Close SaveChanges:=True
    'Application.Quit
End Sub

En effet, après le dernier correctif de Jean-Eric, le fichier se ferme bien au bout du temps précisé dans le module 1 en se sauvegardant.

Maintenant, j'ai une dernière question.

Je génère ce fichier de chez moi et l'autre personne va l'utiliser par le biais d'une synchronisation par Google Drive. Puisque nous avons attaché les codes des macros au fichier, je me doute qu'il aura le même fichier que moi mais est-ce que les macros s'exécuteront systématiquement sur son terminal sans manipulation supplémentaire ? Ou bien faudra-t-il autoriser l'exécution des macros sur son terminal aussi ? Et si c'est le cas, peut-on n'autoriser que les macros de ce fichier ou doit-on toutes les autoriser ?

Quelqu'un peut-il m'en dire plus ?

Merci

Quelqu'un a-t-il un conseil pour moi ?

Bonjour,

la sécurité des macros dépend de la configuration du PC, pas du fichier.

eric

merci

Bonjour à tous et surtout à Jean Eric,

J'ai chargé le fichier

Jean-Eric a écrit :

Bonsoir,

Bonsoir Eric,

Essaie cette alternative (réglée sur 1 minute ).

Et ça marche, par contre je ne comprend pas pourquoi, qu'est ce qui fait que le "compteur " se relance quand on clic dans une cellule ?

Merci

Bonjour,

J'ai bien repris les codes, ils fonctionnements sur des fichiers sans macro en revanche dés que je souhaite intégrer cette macro à un fichier qui en possède déjà, le code ne se lance plus et plus de fermeture automatique.

J'ai du mal à comprendre surtout que le code fonctionne parfaitement sur un fichier excel où il n'y à pas de macro, quelqu'un sait-il pourquoi ?

Bonjour à tous,

Je réveille un sujet...

J'ai repris le code fourni pour la fermeture automatique d'Excel sur une inactivité et cela marche parfaitement.

Néanmoins, comme le dit Arsène, quand une autre macro est déjà en cours dans ce même fichier, la macro de fermeture ne se lance jamais.

y-a-t’il une solution d'après-vous ?

Merci,

Romain.

Bonjour à tous,

Je me permets de vous relancer sur ce sujet..

Salut.

Je suis loin d’être expert mais mon fichier continue de fonctionner parfaitement avec une fermeture automatique au bout du temps spécifié dans la macro, lorsque le fichier n’est pas utilisé. J’ai une autre macro qui fonctionne dessus mais qui ne s’active que lorsqu’on fait une modification dans une cellule (elle sauvegarde le contenu de la cellule avant changement vers un autre endroit) et ça n’empêche pas de fermer.

Probablement que la vérification d’inactivité de la macro de fermeture est contrée par ton autre macro.

Essaye de voir le comportement de la constante de temps en exécution pas à pas...

Bonjour,

Enfaite, mon fichier est un suivi de stock, géré par InputBox.

Donc, le fichier s'ouvre et active le SetTimer (dans ThisWorkbook) :

Private Sub Workbook_Open()
    Call SetTimer
End Sub

Ensuite, l'utilisateur lance une macro qui tourne à l'infini (elle ne s'arrête jamais) tant que l'utilisateur ne tape pas le mot "FIN" dans l'inputBox.

De ce fait, je pense que la macro ShutDown (dans un module) ne s'active jamais :

Sub ShutDown()
    ThisWorkbook.Close SaveChanges:=True
    'Application.Quit
End Sub

Merci d'avance pour votre aide,

Le sujet étant résolu, il est peut-être préférable que je lance un nouveau sujet non ?

Rechercher des sujets similaires à "fermeture automatique inactivite"