je te remercie pour ton aide, malheureusement ça ne fonctionne pas, la formule renvoie une valeur décimale.
exact, désolé, avec le fichier ce sera plus "facile" à mettre au point ... encore que ce n'est pas coton
mbbp = bravo, mais la difficulté provient du 8 orphelin sans nom devant et qui renvoie dans ce cas un 0
je suis donc passé in fine par une fonction personnalisée
Option Explicit
Function NbSiUnique(plage1 As Range, plage2 As Range, crit As Range) As Integer
Dim dico As Object
Set dico = CreateObject("Scripting.Dictionary")
Dim tmpRange1() As Variant, tmpRange2() As Variant, i As Integer
tmpRange1 = plage1: tmpRange2 = plage2
If UBound(tmpRange1) <> UBound(tmpRange2) Then Exit Function
NbSiUnique = 0
For i = 1 To UBound(tmpRange1)
If tmpRange2(i, 1) = crit.Value And tmpRange1(i, 1) <> "" Then dico(tmpRange1(i, 1)) = ""
Next i
NbSiUnique = 1 + UBound(dico.keys)
End Function