XL 2019 Adaptation Sommeprod en vba

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

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+
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+
 
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
 
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+
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
4
Affichages
362
Retour