Fermeture automatique classeur excel avec alarme

Description

La fermeture automatique d'un classeur Excel inactif laissé ouvert est précédée d'un message affichant en premier plan un décompte des X dernières secondes et d'un avertissement sonore (fichier Wav ou Bip/seconde).
=> Détection de l'activité spécifique au classeur par : SelectionChange
=> Bip par : APIBeep Lib "kernel32"
=> Son par : PlaySound Lib "winmm.dll"
=> Premier plan : SetWindowPos Lib "user32"
Tout est dans le fichier Tempo.zip
=> fichier Wav = Beethoven.Wav (à copier sous C:\)
Ce fichier faisant 1,8Mo je ne peux le joindre ici. Je vous l'adresserai par mail sur demande

Source / Exemple :


'Ajouter dans Thisworbook
'************************
Private Sub Workbook_Open()
StartTempo
End Sub
'----------------------
Private Sub Workbook_BeforeClose(Cancel As Boolean)
StopTempo
End Sub
'----------------------

'Ajouter dans chaque feuille
'***************************
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Relancer
End Sub
'----------------------

'Ajouter dans la Form "Alerter"
'******************************
'PROPRIETE => ShowModal = False
'BOUTON => Name = Encore + Caption = Cliquer pour Continuer
Private Const HWND_TOPMOST As Long = (-1)
Private Const SWP_NOMOVE As Long = &H2
Private Const SWP_NOSIZE As Long = &H1
'----------------------
Private Declare Function FindWindowA Lib "user32" ( _
    ByVal lpClassName As String, _
    ByVal lpWindowName As String) As Long
'----------------------
Private Declare Function SetWindowPos Lib "user32" ( _
    ByVal hwnd As Long, _
    ByVal hWndInsertAfter As Long, _
    ByVal x As Long, _
    ByVal y As Long, _
    ByVal cx As Long, _
    ByVal cy As Long, _
    ByVal wFlags As Long) As Long
'----------------------
Private Sub UserForm_Activate()
Dim hwnd As Long
hwnd = FindWindowA("Thunder" & _
    IIf(Application.Version Like "8*", "X", "D") & "Frame", Me.Caption)
Call SetWindowPos(hwnd, HWND_TOPMOST, &H0, &H0, &H0, &H0, _
    SWP_NOMOVE Or SWP_NOSIZE
End Sub
'----------------------
Private Sub Encore_Click()
Relancer
End Sub
'----------------------

'Ajouter dans le module "TempoWav"
'*********************************
Option Explicit
Public Tp180s As Variant
Public MemData As Etat  '(S Nikator)
'----------------------
Type Etat               '(S Nikator)
Mem1 As Boolean
Mem2 As Boolean
End Type
'----------------------
Private Const SND_ASYNC = &H1                   
Private Const SND_FILENAME = &H20000            
Private Const SND_PURGE = &H40
'----------------------
Private Declare Function APIBeep Lib "kernel32" Alias "Beep" _
         (ByVal dwFreq As Long, ByVal dwDuration As Long) As Long
Private Declare Function PlaySound Lib "winmm.dll" Alias "PlaySoundA" (ByVal lpszName As String, ByVal hModule As Long, ByVal dwFlags As Long) As Long
'----------------------
Sub StartTempo()
Tp180s = Now + TimeValue("00:03:00")            
Application.OnTime Tp180s, "AlerteFin"          
MemData.Mem1 = True                       
End Sub
'----------------------
Sub AlerteFin()
MemData.Mem1 = False
MemData.Mem2 = True
Alerter.Show
Décompter                                      
End Sub
'----------------------
Sub Décompter()
Dim T As Long
OuvreWav
Application.ScreenUpdating = True
Dim i
For i = 1 To 12 '2s ajoutées pour le temps du chargement du Wav
    If MemData.Mem2 = False Then Exit Sub
    Application.Wait (Now + TimeValue("00:00:01"))
    DoEvents
    T = 12 - i                              
    Alerter.Caption = " Fermeture dans " & T & " Secondes"
    'Beep 'A décommenter si Bip à chaque seconde au lieu de Wav
Next i
MemData.Mem1 = False                          
MemData.Mem2 = False                          
Alerter.Caption = "Fermeture dans 12 Secondes"'mettre 10 pour Beep
Alerter.Hide                                 
Application.DisplayAlerts = False            
WbC = Workbooks.Count                       
If WbC < 2 Then                             
    ThisWorkbook.Save   '(S Nikator)           
    Application.Quit                        
Else                                         
    ThisWorkbook.Save   '(S Nikator)              
    ThisWorkbook.Close  '(S Nikator)          
End If
End Sub
'----------------------
Sub Relancer()
Alerter.Hide
FermeWav
On Error Resume Next
Application.OnTime Tp180s, "AlerteFin", , False 
MemData.Mem1 = False                              
MemData.Mem2 = False                              
StartTempo                                      
End Sub
'----------------------
Sub StopTempo()
On Error Resume Next
Application.OnTime Tp180s, "AlerteFin", , False  
MemData.Mem1 = False                              
MemData.Mem2 = False                             
End Sub
'----------------------
Sub OuvreWav()
PlaySound "c:\Beethoven.wav", ByVal 0&, SND_FILENAME Or SND_ASYNC
End Sub
'----------------------
Sub FermeWav()
PlaySound vbNullString, ByVal 0&, SND_PURGE
End Sub
'----------------------

Conclusion :


A l'ouverture une tempo de 3mn est activée, et relancée lors de toute action dans une feuille du classeur. Au bout de 3mn d'inactivité, le décompte des 10 dernières secondes s'affiche et le fichier Wav est joué (ou les Bip déclenchés). Un bouton permet de reprendre la main avant que le fichier ne se sauvegarde et ne se ferme.

Codes Sources

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.