XL 2019 Adaptation Sommeprod en vba

thespeedy20

XLDnaute Occasionnel
Bonjour à tous,

Je dois compter des valeurs sans doublons dans une plage de date avec d'autres critères : voici une des formules....(tableau de I1 à O16)

VB:
=NB(1/FREQUENCE(SI((($C$2:$C$134>=I55)*($C$2:$C$134<=I56))*($F$2:$F$134=J$1)*(GAUCHE($E$2:$E$134;4)="Prép");EQUIV($A$2:$A$134;$A$2:$A$134;0));LIGNE(INDIRECT("1:"&LIGNES($A$2:$A$134)))))

J'essaye de l'adapter dans ce code mais je ne vois pas comment faire...

Code:
Sub Test()
Dim Plage1 As Range, Plage2, Plage3, Plage4 As Range, Resultat&

Set Plage1 = Range("A2:A" & Range("A" & Rows.Count).End(xlUp).Row)
Set Plage2 = Range("B2:B" & Range("B" & Rows.Count).End(xlUp).Row)
Set Plage3 = Range("C2:C" & Range("C" & Rows.Count).End(xlUp).Row)
Set Plage4 = Range("D2:C" & Range("D" & Rows.Count).End(xlUp).Row)



Resultat = Evaluate("SUM((" & Plage1.Address & ">=01/01/1980" & Plage2.Address & "<=31/12/2000"")*1)")
MsgBox Resultat
End Sub

je joins mon fichier test

Merci pour votre aide
 

Pièces jointes

  • compte.xlsm
    23.1 KB · Affichages: 14
Solution
Bonjour thespeedy20, le forum,

Avec cette 2ème formule Evaluate renvoie zéro car elle n'évalue pas en matriciel.

Il faut entrer la formule dans la cellule :
VB:
Sub Test()
[K2].FormulaArray = "=COUNT(1/FREQUENCY(IF((($C$2:$C$134>=I55)*($C$2:$C$134<=I56))*($F$2:$F$134=J$1)*(LEFT($E$2:$E$134,4)=""Prép""),MATCH($A$2:$A$134,$A$2:$A$134,0)),ROW(INDIRECT(""1:""&ROWS($A$2:$A$134)))))"
Resultat = [K2]
MsgBox Resultat
End Sub
A+

job75

XLDnaute Barbatruc
Bonsoir thespeedy20,

La bonne syntaxe :
VB:
Sub Test()
Dim Plage1 As Range, Plage2, Plage3, Plage4 As Range, Resultat&

Set Plage1 = Range("A2:A" & Range("A" & Rows.Count).End(xlUp).Row)
Set Plage2 = Range("B2:B" & Range("B" & Rows.Count).End(xlUp).Row)
Set Plage3 = Range("C2:C" & Range("C" & Rows.Count).End(xlUp).Row)
Set Plage4 = Range("D2:C" & Range("D" & Rows.Count).End(xlUp).Row)

Resultat = Evaluate("SUM((" & Plage1.Address & ">=--""01/01/1980"")*(" & Plage2.Address & "<=--""12/31/2000""))")
MsgBox Resultat
End Sub
Cela dit il n'y a pas de dates en colonnes A et B...

A+
 

thespeedy20

XLDnaute Occasionnel
Bonsoir job75,

Merci de t'intéresser au problème....

en fait c'était adapter la formule suivante :

VB:
=NB(1/FREQUENCE(SI((($C$2:$C$134>=I55)*($C$2:$C$134<=I56))*($F$2:$F$134=J$1)*(GAUCHE($E$2:$E$134;4)="Prép");EQUIV($A$2:$A$134;$A$2:$A$134;0));LIGNE(INDIRECT("1:"&LIGNES($A$2:$A$134)))))

ici les dates se trouvent dans la colonne C....

est-il possible d'adapter la formule ci-dessus dans la proposition que tu as faite ?

Je te remercie

OLi
 

job75

XLDnaute Barbatruc
Bonjour thespeedy20, le forum,

Avec cette 2ème formule Evaluate renvoie zéro car elle n'évalue pas en matriciel.

Il faut entrer la formule dans la cellule :
VB:
Sub Test()
[K2].FormulaArray = "=COUNT(1/FREQUENCY(IF((($C$2:$C$134>=I55)*($C$2:$C$134<=I56))*($F$2:$F$134=J$1)*(LEFT($E$2:$E$134,4)=""Prép""),MATCH($A$2:$A$134,$A$2:$A$134,0)),ROW(INDIRECT(""1:""&ROWS($A$2:$A$134)))))"
Resultat = [K2]
MsgBox Resultat
End Sub
A+
 

Discussions similaires

Membres actuellement en ligne

Aucun membre en ligne actuellement.

Statistiques des forums

Discussions
312 105
Messages
2 085 350
Membres
102 870
dernier inscrit
Armisa