Private Sub Worksheet_Change(ByVal Target As Range)
Application.ScreenUpdating = False
Application.EnableEvents = False
Application.Calculation = xlCalculationManual
With ListObjects(1).Range 'tableau structuré
.Columns(1).Insert 'insère une colonne auxiliaire
.Columns(0) = "=1/SIGN(COUNTA(" & .Rows(1).Resize(, 3).Address(0, 0) & "))" 'test sur 3 colonnes
.Columns(0) = .Columns(0).Value 'supprime les formules
If Application.Count(.Columns(0)) = 0 Then .Cells(2, 0) = 1 'pour éviter de supprimer toutes les formules
Union(.Columns(0), .Cells).Sort .Columns(0), xlAscending, Header:=xlYes 'tri pour accélérer
On Error Resume Next 'si aucune SpecialCell
Intersect(.Columns(0).SpecialCells(xlCellTypeConstants, 16).EntireRow, .Cells).Delete xlUp
.Columns(0).Delete xlToLeft 'supprime la colonne auxiliaire
End With
Application.Calculation = xlCalculationAutomatic
Application.EnableEvents = True
End Sub