A voir également:
- Tableur excel qui s'ouvre tout seul
- Liste déroulante excel - Guide
- Formule excel - Guide
- Si et excel - Guide
- Aller à la ligne excel - Guide
- Formule tableur somme - Guide
6 réponses
eriiic
Messages postés
24570
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
23 avril 2024
7 213
Modifié le 16 janv. 2020 à 18:09
Modifié le 16 janv. 2020 à 18:09
Bonjour,
ce qui est étonnant, c'est que ça ne le fasse pas à tout le monde.
Si tu fermes un fichier avec un OnTime de programmé, il s'ouvrira à l'heure dite.
D'autre part ton utilisation de ActiveWorkbook me gène.
Tu ne sais jamais quel est le classeur actif vu que ça dépend de l'utilisateur.
Je pense que c'est ThisWorkbook que tu voulais (= le classeur ayant cette macro).
En conclusion, à la fermeture du classeur, annule tout éventuel OnTime :
Ta variable xCloseTime doit être déclarée
eric
PS :
Comment pourrais-tu avoir xTime = "" vu que tu lui mets "00:05:00" juste avant ?!?
ce qui est étonnant, c'est que ça ne le fasse pas à tout le monde.
Si tu fermes un fichier avec un OnTime de programmé, il s'ouvrira à l'heure dite.
D'autre part ton utilisation de ActiveWorkbook me gène.
Tu ne sais jamais quel est le classeur actif vu que ça dépend de l'utilisateur.
Je pense que c'est ThisWorkbook que tu voulais (= le classeur ayant cette macro).
En conclusion, à la fermeture du classeur, annule tout éventuel OnTime :
Private Sub Workbook_BeforeClose(Cancel As Boolean) On Error Resume Next Application.OnTime xCloseTime, "SaveWork", , False End Sub
Ta variable xCloseTime doit être déclarée
Public xCloseTime as Singleau début d'un module Standard, avant toute procédure.
eric
PS :
xTime = "00:05:00"
Set xWB = ActiveWorkbook
If xTime = "" Then Exit Sub
Comment pourrais-tu avoir xTime = "" vu que tu lui mets "00:05:00" juste avant ?!?
eriiic
Messages postés
24570
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
23 avril 2024
7 213
17 janv. 2020 à 12:01
17 janv. 2020 à 12:01
Bonjour,
déjà répond à la question : quel est le classeur à fermer ?
eric
déjà répond à la question : quel est le classeur à fermer ?
eric
Je souhaite que le fichier tableur se ferme et s'enregistre au bout de 5min d'inactivité de l'utilisateur.
Mon soucis est que j'ai appliqué cette macro sur 3 fichiers qui peuvent être utilisés seuls ou simultanément, par 1 ou plusieurs personnes. Mes collègues me font remarquer que le fichier (n'importe lequel) peut se ré-ouvrir ou bout de 5min.
J'ai surement des termes qui ne sont pas adaptés comme précisé plus haut.
J'espère avoir répondu à la question.
Mon soucis est que j'ai appliqué cette macro sur 3 fichiers qui peuvent être utilisés seuls ou simultanément, par 1 ou plusieurs personnes. Mes collègues me font remarquer que le fichier (n'importe lequel) peut se ré-ouvrir ou bout de 5min.
J'ai surement des termes qui ne sont pas adaptés comme précisé plus haut.
J'espère avoir répondu à la question.
eriiic
Messages postés
24570
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
23 avril 2024
7 213
Modifié le 17 janv. 2020 à 14:29
Modifié le 17 janv. 2020 à 14:29
A tester.
ThisWorkbook :
Module1 :
eric
ThisWorkbook :
Option Explicit Private Sub Workbook_BeforeClose(Cancel As Boolean) On Error Resume Next Application.OnTime xCloseTime, "SaveWork", , False On Error GoTo 0 End Sub Private Sub Workbook_SheetActivate(ByVal Sh As Object) If xTime Like "##:##:##" Then If TimeValue(xTime) > 0 Then Reset End If End Sub Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range) If xTime Like "##:##:##" Then If TimeValue(xTime) > 0 Then Reset End If End Sub Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range) If xTime Like "##:##:##" Then If TimeValue(xTime) > 0 Then Reset End If End Sub
Module1 :
Option Explicit Public Const xTime As String = "00:05:00" Public xCloseTime As Date Sub SaveWork() Application.DisplayAlerts = False ThisWorkbook.Save DoEvents ThisWorkbook.Close Application.DisplayAlerts = True End Sub Sub Reset() On Error Resume Next Application.OnTime xCloseTime, "SaveWork", , False On Error GoTo 0 xCloseTime = Now + TimeValue(xTime) Application.OnTime xCloseTime, "SaveWork", , True End Sub
eric
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Bonjour, Merci eriiic, je vais mettre cette nouvelle macro en place.
Et reviens rapidement pour vous donner le résultat.
Ça pourrait servir à d'autres ! ;)
Et reviens rapidement pour vous donner le résultat.
Ça pourrait servir à d'autres ! ;)
Modifié le 17 janv. 2020 à 08:32
Comme je le disais je débute, j'ai regardé comment fonctionnait une grosse partie des différents termes, mais je ne saisis pas toujours tout...
Oui en effet, le classeur actif peut être 1 des 3. De plus, il est possible que l'utilisateur soit sur plusieurs tableurs en même temps. Pourrais tu me préciser tes petites améliorations ?
Par exemple en me les replaçant dans le texte collé au dessus. Merci d'avance !
On en apprends tout les jours...