1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70
|
Option Explicit
'### Constante à adapter ###
Public Const MILLI_SECONDES As Long = 3600000 '60 mn = 600000 (60 mn * 60 secondes * 1000 millièmes de seconde)
'###########################
Private Declare Function SetTimer& Lib "user32" _
(ByVal hwnd As Long, ByVal nIDEvent As Long, _
ByVal uElapse As Long, ByVal lpTimerFunc As Long)
Private Declare Function KillTimer& Lib "user32" _
(ByVal hwnd As Long, ByVal nIDEvent As Long)
Private Declare Sub keybd_event Lib "user32.dll" ( _
ByVal bVk As Byte, ByVal bScan As Byte, _
ByVal dwFlags As Long, ByVal dwExtraInfo As Long)
Const VK_RETURN = &HD
Const KEYEVENTF_EXTENDEDKEY = &H1
Const KEYEVENTF_KEYUP = &H2
Dim OnTimer&
Dim OnTimer2&
Public NoMake As Boolean
Private Sub CloseAfterDelai()
Call OffTimer
Application.OnTime Now + TimeValue("00:00:01"), "Fermeture"
End Sub
Private Sub SimuleEnter()
NoMake = True
ThisWorkbook.Activate
keybd_event VK_RETURN, 0, 0, 0
keybd_event VK_RETURN, 0, KEYEVENTF_KEYUP, 0
End Sub
Private Sub RunTimer(Delai&)
If OnTimer& > 0 Then OffTimer
OnTimer& = SetTimer(0, 0, ByVal Delai&, AddressOf CloseAfterDelai)
OnTimer2& = SetTimer(0, 0, ByVal Delai& - 100, AddressOf SimuleEnter)
End Sub
Private Sub OffTimer()
If OnTimer& > 0 Then
OnTimer& = KillTimer(0&, OnTimer&)
OnTimer& = 0
End If
If OnTimer2& > 0 Then
OnTimer2& = KillTimer(0&, OnTimer2&)
OnTimer2& = 0
End If
End Sub
Public Sub myTimer(Optional dummy As Byte)
Call OffTimer
OnTimer& = 0
Call RunTimer(Delai:=Time + MILLI_SECONDES)
End Sub
Private Sub Fermeture()
Dim WB As Workbook
For Each WB In Application.Workbooks
If WB.name <> ThisWorkbook.name Then
WB.Activate
Exit For
End If
Next WB
ThisWorkbook.Save
ThisWorkbook.Close savechanges:=True
End Sub |
Partager