1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
| Option Explicit
Dim shLog As Worksheet '--- feuille log
Dim shCopy As Worksheet '--- feuille copie de la feuille loggée
Dim sPlage As String '--- plage à logger
Private Sub Initialiser()
Set shLog = Sheets("Log")
Set shCopy = Sheets("Data2")
sPlage = "A1:Z100"
End Sub
Private Sub Worksheet_Change(ByVal Target As Range)
Dim kR As Integer, kC As Integer
Dim nR As Integer, nC As Integer
Dim kRLog As Long
Initialiser
If Intersect(Target, Range(sPlage)) Is Nothing Then
'--- ne rien faire: pas de changement
Else
'--- logger: changement détecté
nR = Selection.Rows.Count '--- erreur si colonne entière sélectionnée
nC = Selection.Columns.Count '--- erreur si ligne entière sélectionnée
'Debug.Print nR, nC
kRLog = shLog.Cells(Rows.Count, 1).End(xlUp).Row '--- dernière ligne + 1
For kR = Target.Row To Target.Row + nR - 1
For kC = Target.Column To Target.Column + nC - 1
kRLog = kRLog + 1
With shLog
.Cells(kRLog, 1) = Now()
.Cells(kRLog, 2) = Environ("USERNAME")
.Cells(kRLog, 3) = Cells(kR, kC).Address(False, False)
.Cells(kRLog, 4) = shCopy.Cells(kR, kC) '--- ancienne valeur
.Cells(kRLog, 5) = Cells(kR, kC) '--- nouvelle valeur
shCopy.Cells(kR, kC) = Cells(kR, kC) '--- nouvelle valeur
End With
Next kC
Next kR
End If
End Sub |
Partager