Consultation d'un fichier

8 réponses
Avatar
fabrice meunier
Bonjour,

Pour un fichier EXCEL disponible sur un répertoire partagé, est-il possible
de connaître :
- 1) le ou les postes qui ont ouvert ce fichier
- 2) à quelle heure
- 3) quels onglets ont été consultés
- 4) combien de temps a t'il été consulté

Merci de votre réponse
FM

--

8 réponses

Avatar
Jacky
Bonjour,

Une solution qui donne le "pc utilisé", "le nom de l'utilisateur", "la date" et "l'heure" d'acces
Il est placé dans un module standard et, est appelé à l'ouverture du classeur par "Call mouchard"
En adaptant "Repertoire" par le pc cible + l'emplacement du répertoire cible
A placer dans le classeur à surveiller
Le resultat la création d'un fichier .txt avec comme nom "Mouchard de" [nom du classeur].txt
'-------------------
Private Sub Workbook_Open()
Call mouchard
End Sub
'-----------------
Sub mouchard()
Dim Repertoire As String, nom As String
On Error Resume Next
Repertoire = "le nom du pc ciblerepertoire1Mouchard" ' A adapter
If Dir(Repertoire, 16) = "" Then MkDir Repertoire
If Err = 0 Then
nom = Repertoire & "Mouchard de " & ThisWorkbook.Name & ".txt"
Open nom For Append As #1
Print #1, ThisWorkbook.Name & " Accedé le " & Format(Date, "ddd dd mmm yyyy") & " à " & Time _
& " par " & Environ("username") & " sur le pc "; Environ("COMPUTERNAME")
Close #1
End If
On Error GoTo 0
End Sub
'-----------------------
'A placer également dans le module( si l'on souhaite l'heure de fermeture)
'------------
Private Sub Workbook_BeforeClose(Cancel As Boolean)
'------------
en modifiant "Accedé le" par "Ferme le"

PS: ne donne pas les onglets consultés
--
Salutations
JJ


"fabrice meunier" a écrit dans le message de news:
4fccbb8b$0$21578$
Bonjour,

Pour un fichier EXCEL disponible sur un répertoire partagé, est-il possible de connaître :
- 1) le ou les postes qui ont ouvert ce fichier
- 2) à quelle heure
- 3) quels onglets ont été consultés
- 4) combien de temps a t'il été consulté

Merci de votre réponse
FM

--


Avatar
MichD
Bonjour,

Voici un fichier exemple. http://cjoint.com/?BFeuSm05UoL

À chaque fois que l'usager ouvre le classeur et change de feuille,
l'information suivante est consignée dans un fichier .csv

- Nom de l'usager
- Nom de la feuille
- Heure à laquelle il a changé de feuille
- Si la durée de consultation t'intéresse, quand tu ouvres ton fichier .csv
dans Excel
il ne te reste plus qu'à utiliser une petite formule dans la colonne à
droite.

Et à chaque fois que l'usager ouvre le fichier, le fichier .csv indique
l'heure d'ouverture.

Tout le code doit être inscrit dans le ThisWorkbook du classeur :
Il ne te reste plus qu'à indiquer le chemin et nom du fichier .csv où
l'information
sera consignée dans la procédure "Sub Fichier_surveillé(Info As String)"

Au besoin, tu pourrais compliquer le tout en utilisant un fichier de macros
complémentaires
dans lequel tu insères un module de classe. Tu insères dans ce module de
classe, l'équivalent
de ce code et tu peux du même coup, exercer un certain contrôle sur tous les
fichiers ouverts.


Dim Ouverture As String
'-------------------------------------------------------
Private Sub Workbook_Open()
Ouverture = ";" & "Ouverture du fichier"
Call Workbook_SheetActivate(ActiveSheet)
End Sub

Private Sub Workbook_SheetActivate(ByVal Sh As Object)
Dim Texte As String

Texte = Environ("UserName") & ";" & Sh.Name & ";" & _
Format(Now(), "DD/MM/YYYY H:MM:SS") & Ouverture
Call Fichier_surveillé(Texte)
If Ouverture <> "" Then Ouverture = ""
End Sub
'-------------------------------------------------------
Sub Fichier_surveillé(Info As String)
Dim DestFile As String, X As Long

'***************************************************
'Variable à définir - Lieu et nom du fichier .csv
'Où sont sauvegarder les données.
DestFile = "c:UsersDenisDocumentsText1.csv"
'*****************************************************

X = FreeFile
If Dir(DestFile) <> "" Then
Open DestFile For Append As #X
Else
Info = "Usager;Nom de la feuille;" & _
"Heure d'accès de la feuille;" & vbCrLf & Info
Open DestFile For Output As #X
End If
Print #X, Info
Close #X

End Sub
'-------------------------------------------------------
Avatar
MichD
J'ai omis une procédure à ajouter dans le ThisWorkbook du fichier

Fichier corrigé : http://cjoint.com/?BFexEeYrWlb

'----------------------------------
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Dim Texte As String

Texte = Environ("UserName") & ";" & ActiveSheet.Name & ";" & _
Format(Now(), "DD/MM/YYYY H:MM:SS") & ";Fermeture du fichier"
Call Fichier_surveillé(Texte)
End Sub
'----------------------------------
Avatar
MichD
Un dernier complément au fichier : : http://cjoint.com/?BFfbRJeZG6D

Le code du ThisWorkbook :

Dim Ouverture As String
Dim Fermeture As String
Dim Ok As Boolean
'---------------------------------------------------------
Private Sub Workbook_Activate()
Dim Texte As String
If Ok = True Then
Else
Texte = Environ("UserName") & ";" & ActiveSheet.Name & ";" & _
Format(Now(), "DD/MM/YYYY H:MM:SS") & ";Fichier est activé"
Call Fichier_surveillé(Texte)
End If
Ok = False
End Sub
'---------------------------------------------------------
Private Sub Workbook_BeforeClose(Cancel As Boolean)

Fermeture = ";Fermeture du fichier"

End Sub
'---------------------------------------------------------
Private Sub Workbook_Deactivate()
Dim Texte As String
If Fermeture <> "" Then
Texte = Environ("UserName") & ";" & ActiveSheet.Name & ";" & _
Format(Now(), "DD/MM/YYYY H:MM:SS") & ";Fermeture du fichier"
Else
Texte = Environ("UserName") & ";" & ActiveSheet.Name & ";" & _
Format(Now(), "DD/MM/YYYY H:MM:SS") & ";Fichier est inactif"
End If
Call Fichier_surveillé(Texte)

End Sub
'---------------------------------------------------------
Private Sub Workbook_Open()
Ok = True
Ouverture = ";" & "Ouverture du fichier"
Call Workbook_SheetActivate(ActiveSheet)
End Sub

Private Sub Workbook_SheetActivate(ByVal Sh As Object)
Dim Texte As String

Texte = Environ("UserName") & ";" & Sh.Name & ";" & _
Format(Now(), "DD/MM/YYYY H:MM:SS") & Ouverture
Call Fichier_surveillé(Texte)
If Ouverture <> "" Then Ouverture = ""
End Sub
'---------------------------------------------------------
Sub Fichier_surveillé(Info As String)
Dim DestFile As String, X As Long

'***************************************************
'Variable à définir - Lieu et nom du fichier .csv
'Où sont sauvegarder les données.
DestFile = "c:UsersDenisDocumentsText1.csv"
'*****************************************************
X = FreeFile
If Dir(DestFile) <> "" Then
Open DestFile For Append As #X
Else
Info = "Usager;Nom de la feuille;" & _
"Heure d'accès de la feuille;Statut du fichier" & vbCrLf & Info
Open DestFile For Output As #X
End If
Print #X, Info
Close #X
End Sub
'---------------------------------------------------------
Avatar
HD
Par contre, pour que ces macros fonctionnent, il faut bien sûr que
l'utilisateur ai ses macros d'activés. Pour forcer l'utilisateur à activer
ses macros, à la fermeture du classeur je fais cacher toutes les feuilles du
classeur sauf la feuille "Lisez moi" qui contient la procédure d'utilisation
du classeur. Ainsi, lorsqu'un utilisateur ouvre le classeur si ses macros
sont désactivées il ne verra que la feuille "Lisez moi" où il sera expliqué
qu'il lui faut activer les macros... ce qu'il fera pour pouvoir avoir les
feuilles de travail.

@+
HD
Avatar
MichD
Bien sûr! J'ai déjà mis en ligne un fichier sur le sujet.

Cela dit, la sécurité dans Excel comme dans la grande partie des logiciels
n'est pas sans failles pour les pirates.
Avatar
HD
Bien sûr! J'ai déjà mis en ligne un fichier sur le sujet.


ah... le sujet pourrait m'intéresser. Où peut on le trouver ?

Cela dit, la sécurité dans Excel comme dans la
grande partie des logiciels n'est pas sans failles
pour les pirates.


Justement... dans la procédure que j'ai crée j'ai trouvé une faille... Il
suffit d'enregistrer sous le classeur à un format différent de celui
enregistré au préalable pour qu'à la fermeture le classeur ne cache pas ses
feuilles (dans l'événement Workbook close).

@+
HD
Avatar
MichD
Fichier accessible ici : http://cjoint.com/?BFfoDXnmPnJ

Mot de passe pour ouvrir le fichier MichD