Bonjour,
Je propose 2 solutions, une avec une formule et une autre avec une fonction personnalisée :
Function COUNTIFS_UNIQUE(Plage, ParamArray vargs())
Set dico = CreateObject("scripting.dictionary")
temp = Application.Transpose(Plage.Value)
For i = LBound(temp) To UBound(temp)
sconc = "": scur = ""
For j = LBound(vargs) To UBound(vargs)
If j Mod 2 = 1 Then sconc = sconc & vargs(j) Else scur = scur & vargs(j)(i)
Next j
If sconc = scur Then
If Not dico.exists(temp(i) & scur) Then dico(temp(i) & scur) = ""
End If
Next i
COUNTIFS_UNIQUE = dico.Count
End Function
La fonction personnalisée est utilisée ainsi :
=COUNTIFS_UNIQUE(A1:A14;B1:B14;B16;C1:C14;B17)
un peu comme le mélange d'un NB.SI.ENS (countifs) et d'un SOMME.SI.ENS (sumifs). Le premier argument est la plage dont on cherche le nombre de valeurs uniques.
Ensuite, il n'y a un nombre indéfini de couples d'arguments (plage avec critère, critère).
Cdlt,