VBA Excel: Tracer systématiqumt les ouvertures et modif

Résolu/Fermé
Anne - 25 sept. 2014 à 11:14
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 - 25 sept. 2014 à 16:25
Bonjour,

Je travaille sous Excel 2010 et cherche une façon de savoir quel utilisateur a ouvert un fichier donné, quand (date, heure), voire quelles modifications ont été apportées au fichier.

Quelqu'un a-t-il une solution à me proposer?

Merci
A voir également:

5 réponses

pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 751
25 sept. 2014 à 12:05
Voici une façon de faire :
Dans le module Thisworkbook de ce classeur, insérez ces trois codes :
Penser à adapter le chemin et le nom du fichier texte que vous voulez créer. Inutile de le créer, cela le fera automatiquement à la première utilisation.

Private Sub Workbook_Open()
Dim num As Integer, FichierTXT As String
Dim Qui As String, Quand As Date

FichierTXT = "N:\Franck\QuiYaTouche.txt" 'A ADAPTER
Qui = Environ("username")
Quand = Format(Now, "dd/mm/yyyy hh:mm:ss")
num = FreeFile
Open FichierTXT For Append As #num
 Print #1, "Ouverture du fichier par : " & Qui & " le : " & Quand
Close #num
End Sub


Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
Dim num As Integer, FichierTXT As String

FichierTXT = "N:\Franck\QuiYaTouche.txt"  'A ADAPTER
num = FreeFile
Open FichierTXT For Append As #num
 Print #1, "Modifications de : " & Sh.Name & " cellule : " & Target.Address & " le : " & Format(Now, "dd/mm/yyyy hh:mm:ss")
Close #num
End Sub


Private Sub Workbook_BeforeClose(Cancel As Boolean)
Dim num As Integer, FichierTXT As String
Dim Qui As String, Quand As Date

FichierTXT = "N:\Franck\QuiYaTouche.txt"  'A ADAPTER
Qui = Environ("username")
Quand = Format(Now, "dd/mm/yyyy hh:mm:ss")
num = FreeFile
Open FichierTXT For Append As #num
 Print #1, "Fermeture du fichier par : " & Qui & " le : " & Quand
Close #num
End Sub 


Pensez à nettoyer de temps en temps votre fichier txt, sinon il risque d'être vite très gros...
4
Bonjour et merci pour votre retour,

Après adaptation et un premier essai de la macro il semblerait que ça ne convienne pas tout à fait car le fichier txt ne se complète que lorsque l'on lance la macro. Autrement dit si un autre utilisateur ouvre le fichier mais ne lance pas la macro, il n'apparaîtra pas dans le txt.
De plus, le fichier txt indique la date et l'heure du lancement de la macro et non d'ouverture réelle du fichier.
Vous faites le même constat?
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 751
25 sept. 2014 à 14:57
Bien entendu, si l'utilisateur n'autorise pas l'exécution de la macro, cette méthode ne fonctionne pas.
Sinon, non je retrouve toutes les infos... Entre la date d'ouverture et la date de lancement, ne s'écoule pas 1 seconde, on peut donc considérer qu'elles sont égales non???
0
Il faudrait qu'elle puisse s'exécuter quel que soit l'utilisateur, comme le code proposé par Abdel. Je dois mal m'y prendre mais la seule info qui apparaît dans le fichier txt après exécution de la macro est "Ouverture du fichier par : XX le : 25/09/2014 14:16:51", rien sur les modifs ou fermeture. Comment faire?
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 751
Modifié par pijaku le 25/09/2014 à 16:04
Tu dois avoir fait une mauvaise manipulation, car, chez moi, j'ai bien ceci dans mon fichier texte :
Ouverture du fichier par : franck.machin le : 25/09/2014 16:02:49
Modifications de : Feuil1 cellule : $G$14 le : 25/09/2014 16:02:51
Modifications de : Feuil7 cellule : $E$16 le : 25/09/2014 16:02:56
Fermeture du fichier par : franck.machin le : 25/09/2014 16:02:58
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 751
25 sept. 2014 à 16:06
As tu copié tous les codes données ci-dessus :
Private Sub Workbook_Open()
Dim num As Integer, FichierTXT As String
Dim Qui As String, Quand As Date

FichierTXT = "N:\Franck\QuiYaTouche.txt" 'A ADAPTER
Qui = Environ("username")
Quand = Format(Now, "dd/mm/yyyy hh:mm:ss")
num = FreeFile
Open FichierTXT For Append As #num
Print #1, "Ouverture du fichier par : " & Qui & " le : " & Quand
Close #num
End Sub

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
Dim num As Integer, FichierTXT As String

FichierTXT = "N:\Franck\QuiYaTouche.txt" 'A ADAPTER
num = FreeFile
Open FichierTXT For Append As #num
Print #1, "Modifications de : " & Sh.Name & " cellule : " & Target.Address & " le : " & Format(Now, "dd/mm/yyyy hh:mm:ss")
Close #num
End Sub

Private Sub Workbook_BeforeClose(Cancel As Boolean)
Dim num As Integer, FichierTXT As String
Dim Qui As String, Quand As Date

FichierTXT = "N:\Franck\QuiYaTouche.txt" 'A ADAPTER
Qui = Environ("username")
Quand = Format(Now, "dd/mm/yyyy hh:mm:ss")
num = FreeFile
Open FichierTXT For Append As #num
Print #1, "Fermeture du fichier par : " & Qui & " le : " & Quand
Close #num
End Sub

Et tout placer dans le module ThisWorkbook???

Exemple : https://www.cjoint.com/c/DIzqjCOqBl0

N'oublie pas également d'adapter le chemin d'accès au fichier txt
0
Bonjour,

Voici un code permettant de tracer et horodater dans le même classeur les modifications faites, à copier dans le module de chaque feuille concernée après avoir ajouté une feuille "Log":
Dim PreviousValue

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Value <> PreviousValue Then
Sheets("log").Cells(100000, 1).End(xlUp).Offset(1, 0).Value = _
Application.UserName & " a modifie la cellule " & Target.Address _
& " de " & PreviousValue & " en " & Target.Value & " a: " & Format(Time, "hh:mm:ss") & " le: " & Format(Date, "dd/mm/yy")
End If
End Sub

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
PreviousValue = Target.Value
End Sub

Compte tenu de la problématique exposée, sans doute faudrait-il cacher la feuille afin qu'elle n'apparaisse pas lorsque d'autres utilisateurs ouvrent le classeur.

Bon courage!
2
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 751
25 sept. 2014 à 11:32
Bonjour,

Par macro événementielle, à l'ouverture du fichier, il n'est pas très difficile d'enregistrer, dans un fichier texte, le nom d'utilisateur, la date et l'heure.
Cela le devient davantage lorsqu'il s'agit de traquer toutes les modifications...

Pouvez vous nous en dire davantage?
But de cette manoeuvre?
Intérêt?
Combien de manipulations sont amenées à faire les utilisateurs de ce fichier à chaque utilisation?
Combien de feuilles sont concernées?
1
Bonjour Pijaku et merci de répondre à ma demande,

J'ai constaté que l'un de mes classeur Excel comprenant 8 feuilles avait été modifié sans que l'on m'ait consulté et aimerais désormais savoir qui l'ouvre, quand et ce qui est modifié. J'ignore donc le nombre de manipulations que sont amenés à faire les utilisateurs.

Merci encore
0
cs_Le Pivert Messages postés 7904 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 14 août 2024 729
25 sept. 2014 à 16:11
Bonjour,

Voici le code d'Abdel corrigé , il y avait un bug:

remplace 100000 par 65000

Dim PreviousValue
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Value <> PreviousValue Then
Sheets("log").Cells(65000, 1).End(xlUp).Offset(1, 0).Value = _
Application.UserName & " a modifie la cellule " & Target.Address _
& " de " & PreviousValue & " en " & Target.Value & " a: " & Format(Time, "hh:mm:ss") & " le: " & Format(Date, "dd/mm/yy")
End If
End Sub
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
PreviousValue = Target.Value
End Sub

0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 751
25 sept. 2014 à 16:16
Salut Le Pivert,

Juste pour info, j'abandonne le suivi de ce sujet.

Motif Anne et Abdel : même IP...
Donc...
Soit elle (Anne) s'est faite captée par son collègue (Abdel) et donc je les laisse se débrouiller...
Soit il s'agit d'un exercice et... on en a assez fait!
Soit il s'agit de la même personne qui nous prend donc pour des jambons.

...Fin du suivi
@+
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_Le Pivert Messages postés 7904 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 14 août 2024 729
25 sept. 2014 à 16:25
Salut pijaku,

Ok, pour info ton code fonctionne très bien. Je me suis intéressé au code d'Abdel, j'ai trouvé le même en allemand avec la bonne syntaxe.
0