Tableur excel qui s'ouvre tout seul
Clovis
-
Clovis -
Clovis -
Bonjour,
Nous avons récemment souhaité mettre en place une macro sur 3 fichiers partagés. J'ai recherché des formulations çà et là, et j'ai légèrement ajusté à ce que que nous voulions faire.
Au bout de 5 min d'inactivité le fichier s'enregistre et se ferme.
Cela fonctionne, sauf que pour certains de mes collègues un des fichiers utilisé et après fermeture se ré-ouvre après le temps imparti. Je suis un débutant en macro, j'aimerai pouvoir arranger çà pour tout le monde.
Désolé si le sujet à déjà été traité, mais je n'arrive pas à le dénicher...
Merci pour votre aide.
Voici le texte dans This Workbook :
Dim xTime As String
Dim xWB As Workbook
Private Sub Workbook_Open()
On Error Resume Next
xTime = "00:05:00"
Set xWB = ActiveWorkbook
If xTime = "" Then Exit Sub
Reset
End Sub
Private Sub Workbook_SheetActivate(ByVal Sh As Object)
On Error Resume Next
If xTime = "" Then Exit Sub
Reset
End Sub
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
On Error Resume Next
If xTime = "" Then Exit Sub
Reset
End Sub
Sub Reset()
Static xCloseTime
If xCloseTime <> 0 Then
ActiveWorkbook.Application.OnTime xCloseTime, "SaveWork", , False
End If
xCloseTime = Now + TimeValue(xTime)
ActiveWorkbook.Application.OnTime xCloseTime, "SaveWork", , True
End Sub
Et voici le texte dans Module 1 :
Sub SaveWork()
Application.DisplayAlerts = False
ActiveWorkbook.Save
ActiveWorkbook.Close
Application.DisplayAlerts = True
End Sub
Faut-il nommer les SaveWork différemment dans les 3 différents fichiers ?
Nous avons récemment souhaité mettre en place une macro sur 3 fichiers partagés. J'ai recherché des formulations çà et là, et j'ai légèrement ajusté à ce que que nous voulions faire.
Au bout de 5 min d'inactivité le fichier s'enregistre et se ferme.
Cela fonctionne, sauf que pour certains de mes collègues un des fichiers utilisé et après fermeture se ré-ouvre après le temps imparti. Je suis un débutant en macro, j'aimerai pouvoir arranger çà pour tout le monde.
Désolé si le sujet à déjà été traité, mais je n'arrive pas à le dénicher...
Merci pour votre aide.
Voici le texte dans This Workbook :
Dim xTime As String
Dim xWB As Workbook
Private Sub Workbook_Open()
On Error Resume Next
xTime = "00:05:00"
Set xWB = ActiveWorkbook
If xTime = "" Then Exit Sub
Reset
End Sub
Private Sub Workbook_SheetActivate(ByVal Sh As Object)
On Error Resume Next
If xTime = "" Then Exit Sub
Reset
End Sub
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
On Error Resume Next
If xTime = "" Then Exit Sub
Reset
End Sub
Sub Reset()
Static xCloseTime
If xCloseTime <> 0 Then
ActiveWorkbook.Application.OnTime xCloseTime, "SaveWork", , False
End If
xCloseTime = Now + TimeValue(xTime)
ActiveWorkbook.Application.OnTime xCloseTime, "SaveWork", , True
End Sub
Et voici le texte dans Module 1 :
Sub SaveWork()
Application.DisplayAlerts = False
ActiveWorkbook.Save
ActiveWorkbook.Close
Application.DisplayAlerts = True
End Sub
Faut-il nommer les SaveWork différemment dans les 3 différents fichiers ?
A voir également:
- Tableur excel qui s'ouvre tout seul
- Liste déroulante excel - Guide
- Word et excel gratuit - Guide
- Somme tableur - Guide
- Comment imprimer un tableau excel sur une seule page - Guide
- Déplacer colonne excel - Guide
6 réponses
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 ?!?
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.
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
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...