Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, [B:B]) Is Nothing Then
Etoile [B:B], "General", "General"" *"""
ElseIf Not Intersect(Target, [D:D]) Is Nothing Then
Etoile [D:D], "General", "@"" *"""
End If
End Sub
Sub Etoile(plage As Range, format1$, format2$)
Set plage = Intersect(plage, plage.Parent.UsedRange)
If plage Is Nothing Then Exit Sub
Dim cel As Range, test As Boolean, r As Range
For Each cel In plage
If cel <> "" Then
test = Application.CountIf(plage, cel) > 1 And _
cel.Row = plage.Row - 1 + Application.Match(cel, plage, 0)
If test Then Set r = Union(cel, IIf(r Is Nothing, cel, r))
End If
Next
plage.NumberFormat = format1
If Not r Is Nothing Then r.NumberFormat = format2
End Sub