VBA Excel: Tracer systématiqumt les ouvertures et modif

Résolu
Anne -  
pijaku Messages postés 13513 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

5 réponses

  1. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
     
    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
    1. Anne
       
      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
    2. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
       
      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
    3. Anne
       
      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
    4. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
       
      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
    5. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
       
      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
  2. Abdel
     
    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
  3. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
     
    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
    1. Anne
       
      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
  4. cs_Le Pivert Messages postés 8437 Statut Contributeur 730
     
    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
    1. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
       
      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
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. cs_Le Pivert Messages postés 8437 Statut Contributeur 730
     
    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