Trace des modifications

Bonjour

Je voulais garder une trace des modifications faites par les utilisateurs du tableur. Or, la cellule originelle n'apparait pas et j'ai une erreur 40036 à l'ouverture sans possibilité de débogage.

Voici mon code :

    If Target.Value <> OldValue Then

        Sheets("log").Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).Value = Environ("Username") & " a changé la cellule " & _
        Target.Address & " de " & OldValue & " en " & Target.Value & " ( " & Now & ") "

Qu'en pensez vous ?

Bonjour,

on en pense pas grand chose...
On ne sait pas ce qu'est pour toi 'la cellule originelle'
L'adresse ? OldValue ? On ne voit aucun code sur OldValue...
eric

VOici en plus clair. Le code est sur la feuille Effectif et les traces sur la feuille Log

Private Sub Worksheet_Change(ByVal Target As Range)

Dim i As Integer

    If Target.Value <> OldValue Then

        Sheets("log").Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).Value = Environ("Username") & " a changé la cellule " & _
        Target.Address & " de " & OldValue & " en " & Target.Value & " ( " & Now & ") "

    End If

End Sub

bonjour,

normallement, je m'attendais à un commando "Undo" pour récuperer le "OldValue", mais cela n'est pas evident quand le nombre de cellules changées >1.

Mais je ne vois pas de "Undo", donc le "OldValue" vient d'où ?

Si je remplace oldvalue par previousvalue, je n'ai pas de changement

re,

Private Sub Worksheet_Change(ByVal Target As Range)

     Set c = ActiveCell

     With Target
          If .Count > 1 Then MsgBox "plusieurs cellules changées au même moment" & vbLf & "Désolé": Exit Sub     'plus/trop difficile dans ce cas
          Application.EnableEvents = False
          newvalue = .Value     'valeur maintenant
          Application.Undo     'reculer 1 pas
          OldValue = .Value     'valeur précédent
          .Value = newvalue
          If Me.Name = ActiveSheet.Name Then Application.Goto c
          Application.EnableEvents = True
          If Target.Value <> OldValue Then
               Sheets("log").Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).Value = Environ("Username") & " a changé la cellule " & Target.Address & " de " & OldValue & " en " & Target.Value & " ( " & Now & ") "
          End If
     End With
End Sub

Merci de votre aide. J'ai donc inscrits ton code mais cela ne change pas

Theyoshi a changé la cellule $I$2 de en 123 ( 17/06/2022 14:11:42)

Toutefois l'erreur 40036 n'appartient pas à cela.

bonjour,

I2 était vide à 14:11:41 ?

Hum... Mode gêné ON... Oui, donc forcément, ca ne peut que mettre du vide...

re,

une petite amélioration

    Sheets("log").Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).Value = Environ("Username") & " a changé la cellule " & target.Address & " de " & IIf(Len(oldvalue) = 0, "(vide!!!)", oldvalue) & " en " & target.Value & " ( " & Now & ") "
Rechercher des sujets similaires à "trace modifications"