Mouchard fichier
bonjour.
je souhaiterais mettre dans un fichier excel déposé une sorte de mouchard. je m'explique,je voudrais indoqué a chaque fois qu'une personne ouvre le fichier et combien de temps le fichier est ouvert.
je sais même pas si c'est possible
cordialement
Hello,
C’est possible à partir du moment où l’utilisateur a activé les macros.
Niveau RGPD c’est pas fou de traquer les utilisateurs comme ça.
J’appelle ça plutot une trace d’audit mais il faut en informer les utilisateurs.
J’ai mis ça en place dans certains de mes fichiers au taff ça fait le job.
À mettre dans l’éditeur VBA dans le module « ThisWorkbook »
Dim ouvertureTime As Date
Private Sub Workbook_Open()
ouvertureTime = Now
Call LogOuverture
End Sub
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Call LogFermeture
End SubPuis dans un module à part
Sub LogOuverture()
Dim ws As Worksheet
On Error Resume Next
Set ws = ThisWorkbook.Sheets("Logs")
If ws Is Nothing Then
Set ws = ThisWorkbook.Sheets.Add
ws.Name = "Logs"
ws.Visible = xlSheetVeryHidden
ws.Range("A1:D1").Value = Array("Date", "Utilisateur", "Action", "Durée (min)")
End If
On Error GoTo 0
Dim lastRow As Long
lastRow = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row + 1
ws.Cells(lastRow, 1).Value = Now
ws.Cells(lastRow, 2).Value = Environ("Username")
ws.Cells(lastRow, 3).Value = "Ouverture"
ws.Cells(lastRow, 4).Value = "" ' vide pour l’instant
End Sub
Sub LogFermeture()
Dim ws As Worksheet
On Error Resume Next
Set ws = ThisWorkbook.Sheets("Logs")
If ws Is Nothing Then Exit Sub
Dim lastRow As Long
lastRow = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row + 1
Dim dureeMinutes As Double
dureeMinutes = DateDiff("s", ouvertureTime, Now) / 60
ws.Cells(lastRow, 1).Value = Now
ws.Cells(lastRow, 2).Value = Environ("Username")
ws.Cells(lastRow, 3).Value = "Fermeture"
ws.Cells(lastRow, 4).Value = Round(dureeMinutes, 1)
End SubN’hésite pas si besoin
@+
Bonsoir,
BAROUTE78 bonsoir,
ci dessous une nouvelle proposition avec le fichier mouchard à l'extérieur du fichier Excel :
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Dim numFich As Integer, S(0 To nbHisto) As String, I As Long
Dim nomFich
nomFich = "LE_CHEMIN_DU_FICHIER_MOUCHARD\Modifier_par.txt"
numFich = FreeFile
Open nomFich For Input Lock Read Write As #numFich
While Not EOF(numFich)
I = I + 1
Line Input #numFich, S(I)
Wend
Close #numFich
S(1) = S(1) & ", fermé à " & Time
numFich = FreeFile
Open nomFich For Output Lock Read Write As #numFich
S(0) = Application.UserName & ", le " & Now
For I = 1 To Application.Min(nbHisto - 1, I)
Print #numFich, S(I)
Next I
Close #numFich
End Sub
Private Sub Workbook_Open()
Dim numFich As Integer, S(0 To nbHisto) As String, I As Long
Dim nomFich
nomFich = "LE_CHEMIN_DU_FICHIER_MOUCHARD\Modifier_par.txt"
If Dir(nomFich) = "" Then
' création du fichier histo.txt
numFich = FreeFile
Open nomFich For Output As #numFich
Close #numFich
End If
numFich = FreeFile
If ThisWorkbook.ReadOnly Then
' ouverture xls en lecture seule
Open nomFich For Input Lock Read Write As #numFich
Line Input #numFich, S(0)
Close #numFich
Else
' ouverture xls en écriture
Open nomFich For Input Lock Read Write As #numFich
While Not EOF(numFich)
I = I + 1
Line Input #numFich, S(I)
Wend
Close #numFich
numFich = FreeFile
Open nomFich For Output Lock Read Write As #numFich
S(0) = Application.UserName & ", le " & Now
For I = 0 To Application.Min(nbHisto - 1, I)
Print #numFich, S(I)
Next I
Close #numFich
End If
End SubEt dans un module standard :
Public Const nbHisto As Integer = 10 ' historisation des 10 dernières ouvertures avec modifications enregistréesCeci permet de savoir qui a ouvert le fichier en dernier en cas de crash... Je l'ai également mis en place, mais rien de bien méchant...
je m'en sert également pour la mise en mémoire sur un réseau des score du jeu ArkaLouReeD et ArkaLouReeD Light !
Mais il faut également mettre en place une vérification de la mise en marche des macros.
Pas de gestion de fichier existant donc il vous faut un fichier :
@ bientôt
LouReeD