Autres sommeprod en vba

Eric 45

XLDnaute Occasionnel
Bonjour à toutes et tous

J'aimerai transformer cette formule :

Code:
=SOMMEPROD(1/NB.SI(A1:A30;A1:A30))

qui compte les valeurs uniques

en vba :

Code:
Set Plage1 = Range("A1:A30")
resultat= = !!!!!!!

avec en colonne "A" :
toto
56
56
56
56
56
83
29
28
28
56
56
56
56
56
22
22
22
56
78
78
39
6
48
48
11
11
56
56
56

ce qui doit me donner : 11

J'ai essayé beaucoup de codes trouvés sur internet, dont :
Code:
resultat = Evaluate("SUMPRODUCT(.......
mais rien à faire

Merci d'avance
Eric
 

Simply

XLDnaute Occasionnel
Hi

Autres exemples

VB:
Sub Test()
    Dim Plage1 As String
    Plage1 = Range("A1:A30").Address
    Range("D2") = Evaluate("=SUMPRODUCT(1/COUNTIF(" & Plage1 & "," & Plage1 & "))")
    Rem ---------------------------------------------------------------------------
    Range("D3") = ["=SUMPRODUCT(1/COUNTIF(A1:A30,A1:A30))"] 'Formula
    Range("D4") = [SUMPRODUCT(1/COUNTIF(A1:A30,A1:A30))]    'Value
End Sub
 

Staple1600

XLDnaute Barbatruc
Bonjour le fil,

Histoire de varier les plaisirs
Je trouve bien 11 et ce trois fois ;)
VB:
Sub test()
MsgBox NBUNIQUE(Range("A1:A30"))
MsgBox NBUNIQUE2(Range("A1:A30"))
MsgBox NBUNIQUE3(Range("A1:A30"))
End Sub

Private Function NBUNIQUE(R As Range)
NBUNIQUE = Evaluate("=SUMPRODUCT(1/COUNTIF(" & R.Address & "," & R.Address & "))")
End Function
Private Function NBUNIQUE2(R As Range)
NBUNIQUE2 = Evaluate("Sum(N(countif(offset(" & R.Cells(1).Address & ",,,row(" & R.Address & "))," & R.Address & ")=1))")
End Function
Private Function NBUNIQUE3(R As Range)
Dim c As Range
With CreateObject("Scripting.Dictionary")
  For Each c In R
  If Not .Exists(c.Value) Then .Add c.Value, Nothing
  Next
  NBUNIQUE3 = .Count
End With
End Function
 

Discussions similaires