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

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

Réponses
5
Affichages
340
Réponses
2
Affichages
342
Réponses
2
Affichages
278
Réponses
10
Affichages
444
  • Question Question
Microsoft 365 SOMMEPROD en vba excel
Réponses
12
Affichages
460
Réponses
30
Affichages
2 K
Réponses
17
Affichages
1 K

Statistiques des forums

Discussions
315 285
Messages
2 118 027
Membres
113 414
dernier inscrit
AmadouK