SommeProd avec une condition

OOLIVE

XLDnaute Occasionnel
Hello le Forum,

Je cherche à faire, en bout de ligne, la somme de cellules en fonction de l'entête de la colonne (voir fichier joint)

J'ai pu constater depuis tout à l'heure que la fonction sommeprod est compliquée en VBA et que la solution proposée généralement est une boucle.

Le hic est que j'ai déjà plusieurs boucles qui tournent dans le code et j'aimerais ne pas rendre le temps de traitement plus long qu'il ne l'est déjà.

J'avais pensé à un code du style :
dercol = Cells.Find("*", , , , xlByColumns, xlPrevious).Column
For x = 3 To Range("A65535").End(xlUp).Row
Cells(x, dercol + 1) = Application.WorksheetFunction.SumProduct((Range(Cells(x, 2), Cells(x, dercol)) * (Range(Cells(3, 2), Cells(3, dercol)) = "Part")))
Next x

Mais comme vous vous en doutez, ça ne fonctionne pas ! :)

Si vous avez des idées, je suis preneur.

Thanks

OOlive
 

Pièces jointes

  • Test.xlsm
    13.4 KB · Affichages: 25

kingfadhel

XLDnaute Impliqué
Bonsoir, le forum
@OOLIVE à toi
VB:
Sub OOLive()
'détermination de la dernière colonne
x = Range("A1").End(xlToRight).Column
For i = 2 To Range("a65000").End(xlUp).Row 'détermination de la dernière ligne
Cells(i, x).FormulaR1C1 = "=SUMPRODUCT((RC[-6]:RC[-1])*(R1C2:R1C7=""Part""))"
Next

End Sub
 

OOLIVE

XLDnaute Occasionnel
Hello bbb38,

Merci pour ta solution. Je devais finir hier, j'ai donc fini mon code en y ajoutant une boucle pour faire le travail :

For ex = 3 To Range("A65535").End(xlUp).Row
For j = 1 To dercol3
If Cells(2, j).Value = "Part" Then
y = y + Cells(ex, j)
Cells(ex, dercol3 + 1) = y
end if
next
next
 

Statistiques des forums

Discussions
312 299
Messages
2 086 990
Membres
103 420
dernier inscrit
eric.wallet46