OVH Cloud OVH Cloud

Somme conditionnelle sur trois conditions

6 réponses
Avatar
Pollux
Bonjour à toutes et à tous,
mon problème est le suivant :
colonne A : modèle
colonne B : diamètre
colonne C : espacement
colonne F : poids
un même modèle peut avoir plusieurs diamètres,
le même modèle, même diamètre peut avoir plusieurs espacements.
Comment faire pour additionner la colonne F, en vérifiant que les 3
premiers critères sont les mêmes?
Doit y avoir une histoire de "SUMPRODUCT", mais je rame lamentablement ;-(o

Merci pour votre aide

6 réponses

Avatar
FUXI
As-tu essayé un tableau croisé dynamique ?


Bonjour à toutes et à tous,
mon problème est le suivant :
colonne A : modèle
colonne B : diamètre
colonne C : espacement
colonne F : poids
un même modèle peut avoir plusieurs diamètres,
le même modèle, même diamètre peut avoir plusieurs espacements.
Comment faire pour additionner la colonne F, en vérifiant que les 3
premiers critères sont les mêmes?
Doit y avoir une histoire de "SUMPRODUCT", mais je rame lamentablement ;-(o

Merci pour votre aide






Avatar
michdenis
Bonjour Pollux :

à titre d'exemple:

D1:D10 = Colonne pour le poids.

=Sommeprod((A1:A10="Lemodèle")*(B1:B10=Lediamètre)*(C1:C10=Espacement)*(D1:D10))


Salutations!


"Pollux" a écrit dans le message de news: %
Bonjour à toutes et à tous,
mon problème est le suivant :
colonne A : modèle
colonne B : diamètre
colonne C : espacement
colonne F : poids
un même modèle peut avoir plusieurs diamètres,
le même modèle, même diamètre peut avoir plusieurs espacements.
Comment faire pour additionner la colonne F, en vérifiant que les 3
premiers critères sont les mêmes?
Doit y avoir une histoire de "SUMPRODUCT", mais je rame lamentablement ;-(o

Merci pour votre aide
Avatar
Pollux
Super, vous êtes vraiment trop forts
Avatar
Pollux
Çà marche super bien dans Excel, mais quelle est l'astuce pour mettre
la formule dans une macro VBA
Avatar
michdenis
Bonjour Pollux,

2 façons de faire, selon que tes plages sont dynamiques et que tu veuilles aussi modifier les critères de ta fonction.
La formule est écrite pour quatre colonnes adjacentes.

Adapte le nom de la feuille et des plages de cellules ...!

'----------------------------------
Sub FormuleEnVBA()

Dim Adr As String, Adr1 As String
Dim Adr2 As String, Adr3 As String
Dim Rg As Range, A As Variant
Dim Crit As String, Crit1 As String, Crit2 As String

With Worksheets("Feuil1") 'à déterminer
Set Rg = .Range("A1:A" & .Range("A65536").End(xlUp).Row)
End With

Crit = "MonModèle"
Crit1 = "Diamètre"
Crit2 = "Espacement"

With Rg
Adr = .Parent.Name & "!" & .Address
Adr1 = .Offset(, 1).Parent.Name & "!" & .Offset(, 1).Address
Adr2 = .Offset(, 2).Parent.Name & "!" & .Offset(, 2).Address
Adr3 = .Offset(, 3).Parent.Name & "!" & .Offset(, 3).Address
End With

MaFormule = "=SumProduct((" & Adr & "=""" & Crit & """)*" & _
"(" & Adr1 & "=""" & Crit & """)*" & _
"(" & Adr2 & "=""" & Crit2 & """)*" & _
"(" & Adr3 & "))"

A = Evaluate(" & maformule & ")
MsgBox A


'si tu n'as pas besoin de modifier les variables, tu peux utiliser ceci:

A = [SumProduct((A1:A5="Modèle")*(B1:B5=Diamètre)*(C1:C5=Espacement)*(D1:D5))]
MsgBox A

End Sub
'----------------------------------


Salutations!




"Pollux" a écrit dans le message de news: %
Çà marche super bien dans Excel, mais quelle est l'astuce pour mettre
la formule dans une macro VBA
Avatar
michdenis
Attention, j'ai utilisé le TYPE STRING pour les variables Crit , selon tes données, il se peut que tu doivent utiliser le type
double ... selon ce que sont tes données !


2 façons de faire, selon que tes plages sont dynamiques et que tu veuilles aussi modifier les critères de ta fonction.
La formule est écrite pour quatre colonnes adjacentes.

Adapte le nom de la feuille et des plages de cellules ...!

'----------------------------------
Sub FormuleEnVBA()

Dim Adr As String, Adr1 As String
Dim Adr2 As String, Adr3 As String
Dim Rg As Range, A As Variant
Dim Crit As String, Crit1 As String, Crit2 As String

With Worksheets("Feuil1") 'à déterminer
Set Rg = .Range("A1:A" & .Range("A65536").End(xlUp).Row)
End With

Crit = "MonModèle"
Crit1 = "Diamètre"
Crit2 = "Espacement"

With Rg
Adr = .Parent.Name & "!" & .Address
Adr1 = .Offset(, 1).Parent.Name & "!" & .Offset(, 1).Address
Adr2 = .Offset(, 2).Parent.Name & "!" & .Offset(, 2).Address
Adr3 = .Offset(, 3).Parent.Name & "!" & .Offset(, 3).Address
End With

MaFormule = "=SumProduct((" & Adr & "=""" & Crit & """)*" & _
"(" & Adr1 & "=""" & Crit & """)*" & _
"(" & Adr2 & "=""" & Crit2 & """)*" & _
"(" & Adr3 & "))"

A = Evaluate(" & maformule & ")
MsgBox A


'si tu n'as pas besoin de modifier les variables, tu peux utiliser ceci:

A = [SumProduct((A1:A5="Modèle")*(B1:B5=Diamètre)*(C1:C5=Espacement)*(D1:D5))]
MsgBox A

End Sub
'----------------------------------


Salutations!




"Pollux" a écrit dans le message de news: %
Çà marche super bien dans Excel, mais quelle est l'astuce pour mettre
la formule dans une macro VBA