Private Sub Worksheet_Change(ByVal Target As Range)
Dim dest As Range, mem
Set dest = [I2:M2]
Application.ScreenUpdating = False
Application.EnableEvents = False 'désactive les évènements
dest.CurrentRegion.Offset(1).Clear 'RAZ
[A2].CurrentRegion.AdvancedFilter xlFilterCopy, CopyToRange:=dest 'filtre avancé copié
With dest.CurrentRegion
.Offset(1).Interior.ColorIndex = xlNone 'efface les couleurs
.Columns(2).Replace 0, "", xlWhole 'efface les montants nuls
.Sort .Columns(1), xlAscending, .Columns(2), , xlAscending, Header:=xlYes '1er tri sur 2 colonnes
.Columns(2).Replace "", 0 'éventuellement remet 0 dans les cellules vides
.RemoveDuplicates Columns:=1, Header:=xlYes 'supprime les doublons
With .CurrentRegion 'nécessaire après la suppression des doublons
.Sort .Columns(2), xlAscending, Header:=xlYes '2ème tri pour classer les montants
'---bandes alternées---
mem = .Columns(1) 'mémorise
If .Row Mod 2 Then .Columns(1) = "=1/(MOD(ROW(),2)=0)" Else .Columns(1) = "=1/(MOD(ROW(),2))"
Intersect(.Columns(1).SpecialCells(xlCellTypeFormulas, 1).EntireRow, .Cells).Interior.Color = RGB(217, 217, 217) 'gris
.Columns(1) = mem 'restitue les valeurs
End With
End With
Application.EnableEvents = True 'réactive les évènements
End Sub