Bonjour Avoriaz, Jean Marie, le Fil, le Forum
Bon, il y a plusieurs manières de faire un SPY. Ce que tu as trouvé et posté au dessus sont des variantes.
111) Faire un Tracker qui va écrire dans le Classeur lui même sur une feuille protégée ("Trace")
Si tu veux la date et l'heure il suffit de faire ceci :
Option Explicit
Sub SpyOnWorkSheet() '<<<à lancer depuis ThisWorkBook "Private Sub Workbook_Open()"
Dim L As Long
With Sheets("Trace")
.Unprotect "LeMotDePasse"
L = .Range("A65536").End(xlUp).Row + 1 '(je n'aime pas les [A1] !!! lol)
.Range("A" & L).Value = Application.UserName
.Range("B" & L).Value = Date
.Range("C" & L).Value = Format(Now, "HH:MM:SS")
.Visible = xlVeryHidden
.Protect "LeMotDePasse"
End With
End Sub
NB Ici une macro "ADMIN" qui te permettra d'avoir accès à cette feuille cachée et protégée :
Sub AdminSpyWorkSheet()
With Sheets("Trace")
.Unprotect "LeMotDePasse"
.Visible = True
End With
End Sub
222) Faire un Tracker sur un fichier TXT pour l'ouverture seule
Si tu veux la date et l'heure il suffit de faire ceci :
Sub SpyOnTxt() '<<<à lancer depuis ThisWorkBook "Private Sub Workbook_Open()"
Dim ThePath As String, Log As String, Dat As String, HMS As String
ThePath = "C:\TheSpy.txt"
Log = Application.UserName
Dat = Date
HMS = Format(Now, "HH:MM:SS")
Open ThePath For Append As #1
Print #1, Log, Dat, HMS
Close #1
End Sub
444) Faire un "Vrai" Tracker sur un fichier TXT qui va "tout" enregistrer à l'ouverture et la fermeture
Ceci est mon exemple plus haut adapté à tes besoins :
Option Explicit
Private Const ThePath As String = "C:\TheSpy.txt" ' <<<<<<<<<<<<< ADAPTATION POUR C:\ DIRECTE
Private Declare Function GetUserName Lib "advapi32.dll" Alias "GetUserNameA" _
(ByVal lpBuffer As String, _
nSize As Long) As Long
'Spy Opening/Closing @Thierry
Private Sub Workbook_Open()
Dim lpBuff As String * 25
Dim ret As Long
Dim UserName As String, Spy As String
ret = GetUserName(lpBuff, 25)
UserName = Left(lpBuff, InStr(lpBuff, Chr(0)) - 1)
Spy = "Open on : " & vbTab & Format(Now, "DD/MM/YYYY HH:MM:SS") & _
vbTab & "Computer Log-In User Name : " & vbTab & UserName & vbTab & _
"Application User Name : " & vbTab & Application.UserName
Open ThePath For Append As #1
Print #1, Spy
Close
End Sub
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Dim lpBuff As String * 25
Dim ret As Long
Dim UserName As String, Spy As String
ret = GetUserName(lpBuff, 25)
UserName = Left(lpBuff, InStr(lpBuff, Chr(0)) - 1)
Spy = "Close on : " & vbTab & Format(Now, "DD/MM/YYYY HH:MM:SS") & _
vbTab & "Computer Log-In User Name : " & vbTab & UserName & vbTab & _
"Application User Name : " & vbTab & Application.UserName
Open ThePath For Append As #1
Print #1, Spy
Close
End Sub
PS on notera que cette dernière méthode enregistre le vrai "LOG-IN" de user avec un appel API, car "Application.UserName" peut être changé depuis les options générales d'excel très facilement...mais je l'ai ajouté aussi par rapport à ma version de base plus haut
Bon Dimanche avec "Excel Spy and VBA's Horror!!!" primé à Avoriaz !! lol
@+Thierry