Option Explicit
Private ClnUndo As New Collection, RngCible As Range, AncValCible
Public Sub NoterCible(ByVal Target As Range)
Set RngCible = Target: AncValCible = Target.Value
End Sub
Public Sub EnregistreUndo()
If RngCible Is Nothing Then Exit Sub
ClnUndo.Add Item:=Array(RngCible, AncValCible)
Set RngCible = Nothing: AncValCible = Null
End Sub
Public Sub Rétablir()
Dim Pos As Integer, TRngVal()
Pos = ClnUndo.Count: If Pos = 0 Then Exit Sub
TRngVal = ClnUndo(Pos): ClnUndo.Remove Pos
Application.EnableEvents = False
TRngVal(0).Value = TRngVal(1)
Application.EnableEvents = True
Application.OnTime Now, "RemettreOnUndo"
End Sub
Public Sub RemettreOnUndo()
Dim Pos As Integer, TRngVal()
Pos = ClnUndo.Count: If Pos = 0 Then Exit Sub
TRngVal = ClnUndo(Pos)
Application.OnUndo "Rétab " & TRngVal(0).Address(False, False), "Rétablir"
End Sub