Sub AjouteListeUndo(LigneSuivi As Long, Cellule As Range)
'
Dim i As Byte
'
' en fonction du nombre de données déjà enregistrées dans
' ListeUndo, soit on rajoute directement, soit on supprime
' auparavant les données les plus anciennes.
' ListeUndo est un peu comme une pile de type LIFO (Last In
' First Out). Elle est limitée à 5 retours en arrière.
If NbItem 0 Then
'
' Alors on modifie la valeur de InChange à VRAI pour que la
' procédure événementielle Worksheet_Change ne soit pas
' exécutée lors des modifications de valeurs
InChange = True
'
' On copie la ligne de la feuille 'Suivi' dans laquelle le
' dernier transfert a été effectué (voir Worksheet_Change)
Sheets('suivi').Rows(ListeUndo(NbItem, 2)).Copy
'
' Puis on l'insère dans le n° de ligne de 'Feuil1' sauvegardé
' dans ListeUndo
ActiveSheet.Rows(ListeUndo(NbItem, 1)).Insert shift:=xlShiftDown
'
' On supprime la ligne de la feuille 'Suivi'
Sheets('suivi').Rows(ListeUndo(NbItem, 2)).Delete
'
' Puis on indique, en décrémentant NbItem, qu'une annulation
' (ou 'retour arrière' ou 'undo') du dernier transfert a été
' effectuée et que la prochaine annulation ne doit pas tenir
' compte des données actuelles dans ListeUndo
NbItem = NbItem - 1
'
' Enfin, on autorise à nouveau les procédures utilisant InChange
' à exécuter leur code
InChange = False
End If
End Sub