VBA Excel: Tracer systématiqumt les ouvertures et modif
Résolu
Anne
-
pijaku Messages postés 12263 Date d'inscription Statut Modérateur Dernière intervention -
pijaku Messages postés 12263 Date d'inscription Statut Modérateur Dernière intervention -
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
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:
- VBA Excel: Tracer systématiqumt les ouvertures et modif
- Liste déroulante excel - Guide
- Word et excel gratuit - Guide
- Déplacer colonne excel - Guide
- Si ou excel - Guide
- Excel compter cellule couleur sans vba - Guide
5 réponses
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.
Pensez à nettoyer de temps en temps votre fichier txt, sinon il risque d'être vite très gros...
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...
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":
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!
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!
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?
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?
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
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
Bonjour,
Voici le code d'Abdel corrigé , il y avait un bug:
remplace 100000 par 65000
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
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
@+
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
@+
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
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?
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???
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