Dim memValeur, memLargeur
Private Sub Worksheet_Change(ByVal Target As Range)
Dim i%, c As Range
If Intersect(Target, Rows(7)) Is Nothing Then Exit Sub
Application.ScreenUpdating = False
Application.EnableEvents = False
Application.Undo
memValeur = Range("A7", Cells(7, Columns.Count).End(xlToLeft)).Value
ReDim memLargeur(1 To Application.CountA(memValeur))
For i = 1 To UBound(memLargeur)
memLargeur(i) = Cells(7, i).ColumnWidth
Next
Application.Undo
Application.EnableEvents = True
For Each c In Range("A7", Cells(7, Columns.Count).End(xlToLeft))
If IsNumeric(CStr(c)) Then If c >= 0 And c <= 255 Then c.ColumnWidth = c
Next
End Sub
Sub Annuler()
Dim Valeur, Largeur(), i%, c As Range
If Not IsArray(memLargeur) Then Exit Sub
Valeur = Range("A7", Cells(7, Columns.Count).End(xlToLeft)).Value
ReDim Largeur(1 To Application.CountA(Valeur))
For i = 1 To UBound(Largeur)
Largeur(i) = Cells(7, i).ColumnWidth
Next
Application.ScreenUpdating = False
Application.EnableEvents = False
Rows(7) = Empty
[A7].Resize(, Application.CountA(memValeur)) = memValeur
For i = 1 To UBound(memLargeur)
If memLargeur(i) >= 0 And memLargeur(i) <= 255 Then Cells(7, i).ColumnWidth = memLargeur(i)
Next
Application.EnableEvents = True
memValeur = Valeur
ReDim memLargeur(1 To Application.CountA(memValeur))
For i = 1 To UBound(memLargeur)
memLargeur(i) = Largeur(i)
Next
End Sub