Function NbrUnique&(plage As Range)
Dim xrgReduite As Range, xrg As Range, xrgSpecials As Range, collec As New Collection, xtype, xarea, x
On Error Resume Next
Set xrgReduite = Intersect(plage.Parent.UsedRange, plage)
If xrgReduite Is Nothing Then On Error GoTo 0: Exit Function
For Each xtype In Array(xlCellTypeFormulas, xlCellTypeConstants)
Set xrgSpecials = xrgReduite.SpecialCells(xtype, 23)
For Each x In xrgSpecials
If Not IsError(x) Then If x <> "" Then collec.Add vbNullString, LCase(x)
Next x
Next xtype
On Error GoTo 0
NbrUnique = collec.Count
End Function