Créer un fichier log sur l’utilisation d’un classeur Excel

Grâce à VBA, il est possible d’interagir avec d’autres fichiers ou d’autres applications. Une de ces possibilités est de créer un fichier texte qui donne des indications sur ce qui est fait dans le fichier Excel où est placé le code, par qui et quand. Un vrai petit mouchard !

Très pratique pour pouvoir tracer les changements et ainsi permettre de corriger en cas d’erreur importante (en effet, loin de moi l’idée d’encourager la délation…), ce petit bout de code est assez simple à mettre en oeuvre. Il demandera la mise en place d’une procédure d’écriture dans le fichier texte, ainsi que celle d’une procédure évènementielle sur la feuille (ou sur toutes les feuilles du classeur).

Pour cet exemple, nous allons créer un fichier texte placé sur le C:\ et qui contiendra toutes les modifications d’une feuille de classeur. Le fichier texte s’appellera « excel-plus.txt »… Original, non ?
Commençons par lancer Visual Basic (ALT+F11 ou par son icône dans l’onglet Développeur) et par intégrer un nouveau module dans le fichier.

 

1) Déclaration des variables utilisées :

 

Tout d’abord, il faut déclarer les variables pour l’ensemble du fichier afin de pouvoir les alimenter dans la procédure évènementielle et les utiliser dans la macro d’écriture du fichier.

Public reference As String
Public feuille As String
Public av As String        ‘ correspond à l’ancienne valeur
Public nv As String        ‘ correspond à la nouvelle valeur
Public utilisateur As String
Public datemodif As String

 

2) Ecriture de la macro d’écriture du fichier .txt :

 

Le code est très simple et fait appel aux instructions : Open / Close et Print.

Ici, après Open, vous indiquez l’adresse où vous voulez placer le fichier. Lors de la première écriture, le fichier sera créé. Cependant, il est important de s’assurer que vous avez la possibilité d’écrire sur l'emplacement, y compris sur un réseau. Encore plus quand il s’agit d’un autre utilisateur et qui ne travaille pas sur votre ordinateur.

Sub ecriture()
Open « c:\excel-plus.txt » For Append As 1
Print #1, « — Modification du fichier–« 
Print #1, « La cellule  » & reference &  » a été modifiée, dans la feuille  » & feuille
Print #1, « Ancienne valeur :  » & av
Print #1, « Nouvelle valeur :  » & nv
Print #1, « Changée par : » & utilisateur
Print #1, « Modifiée le : » & datemodif
Close 1
End Sub

La procédure est prête à être utilisée maintenant dans une autre procédure.

 

3) Intégrer les procédures évènementielles dans les feuilles :

 

Lorsque, dans VBA, vous double-cliquez sur la feuille souhaitée, vous sortez du module dans lequel vous étiez et vous pouvez intégrer de nouvelles procédures, spécifiques à cette feuille. Ici, nous en créerons deux : une pour enregistrer les modifications faites et les éléments relatifs à cette modification, une autre pour enregistrer l’ancienne valeur d’une cellule sélectionnée.

Attention, cet exemple ne fonctionne que pour une sélection simple de cellule.

D’abord pour enregistrer les données, on choisit l’évènement de changement :

Private Sub Worksheet_Change (ByVal Target As Range)
If Target.Count = 1 Then
nv = Target.value
Else
nv = « Valeur inconnue »
End If
utilisateur = Environ(« Username »)
datemodif = Now
reference = Target.Address
feuille = Target.Worksheet.Name
Call ecriture
End Sub

Puis pour définir l’ancienne valeur, on choisit l’évènement sur changement de sélection :

Private Sub Worksheet_SelectionChange (ByVal Target As Range)
If Target.Count = 1 Then
av = Target.Value
Else
av = « Valeur inconnue »
End If
End Sub

 

Et voilà, il ne vous reste plus qu’à tester si ça fonctionne bien. Mon fichier marche pas mal alors si vous avez un souci, vérifiez les orthographes, mais aussi l’adresse d’écriture du fichier.
Vous pouvez télécharger mon exemple ici et profiter des quelques commentaires ajoutés sur le code VBA.

Bon code !



17 réflexions sur “Créer un fichier log sur l’utilisation d’un classeur Excel”

  1. Bonjour Excel-Plus ,

    J’utilise votre code VBA qui remplie sa fonction avec succès .
    cependant , nul en VBA , pouvez rajouter une ligne pour que le code écrive le fichier LOG que pour une certaine plage de cellules ?

    Merci

  2. Ça fonctionne super bien mais je me demandais s’il est possible de créer ce log dans une feuille masquée dans le classeur. Si oui comment doit-on procéder car je ne suis pas un expert en VBA.

    1. Bonjour,
      C’est effectivement faisable mais il s’agit d’un code complètement différent. Ici l’objet était de montrer les interactions avec le notepad et parler des fonctions qui permettent d’écrire dans un fichier texte.
      Ce que vous demandez est un code différent pour lequel il faudrait que les informations que l’on souhaite copier soient collées dans des variables et/ou directement dans les contenus de cellules.

  3. Je vous remercie infiniment pour ce joli petit espion (ou mouchard) car il fait son boulot discrètement sans qu’on s’en aperçoive. Sincèrement je cherche à en décortiquer le contenu et y injecter quelques trucs en plus pour l’adapter à mon besoin si j’y parviendrai bien sur. Autre chose SVP, est ce que je peux vous poser des questions sur quelques applications que je prépare des fois (ou je copie) mais qui coincent ! donc çà nécessite un coup de pouce du maître. Ce serait génial d’avoir une réponse favorable dans ce sens.
    Merci infiniment en tout cas.
    Mounir

  4. Bonjour,
    Super votre code.
    J’ai 2 petite demande pour l’adapter à mon besoin :
    – Mon classeur comporte plusieurs feuille. Chaque est protégé par un mot de passe. Dans votre code, peut on savoir également si la feuille a été débloquer ou pas ?

    – Comme le dit mon pseudo, je suis super débutant.
    J’aurais besoin de tout mettre sur une ligne et m’en servir comme BDD. Vous dites que c’est possible mais je n’y arrive pas.
    Pouvez-vous adapter le code pour que se soit possible.

    Un grand merci pour votre aide.

  5. Bonjour,
    Super votre code.
    J’ai 2 petite demande pour l’adapter à mon besoin :
    – Mon classeur comporte plusieurs feuille. Chaque est protégé par un mot de passe. Dans votre code, peut on savoir également si la feuille a été débloquer ou pas ?

    – Comme le dit mon pseudo, je suis super débutant.
    J’aurais besoin de tout mettre sur une ligne et m’en servir comme BDD. Vous dites que c’est possible mais je n’y arrive pas.
    Pouvez-vous adapter le code pour que se soit possible.

    Un grand merci pour votre aide.

  6. Bonjour, est ce que ce code fonctionne si je saisis des données via un formulaire VBA.

    Pour être plus clair, j’ai un UserForm dans lequel je renseigne des valeurs et dès que je clique sur mon bouton d’action, toutes les données indiquées dans l’UserForm vont s’inscrire dans mon classeur.
    Par conséquent, les évènements worksheet_change et selectionChange ne sont plus appeler car les données s’insèrent automatiquement.

    J’espère être le plus clair possible.

    Cdt

  7. Bonjour,

    Peut-on utiliser ce code pour enregistrer toutes les actions d’un classeur excel? Par exemple, qui log chaque action posée (mise en forme, création de tableau, clic, etc.)?

    Je dois faire un classeur test et j’ai besoin de savoir toutes les étapes suivies par la personne pour la correction.

    Merci!

    1. Oui bien sûr, ce code peut être installé pour tous les éléments d’un classeur, avec les infos de feuille concerné, de cellule, etc… tout dépend de ce que vous avez besoin au final comme information.

    1. Ce fichier va créé un fichier log qui va tracer les modifications faites dans les différentes cellules du tableau. Ainsi, on garde une trace de tout ce qui change, à quelle heure et même par qui (en fonction des infos qu’on veut faire remplir dans ce fichier log).

Répondre à Lagg Annuler la réponse

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.