Re,
Une solution un peu "rustine" avec une fonction additionnelle :
Function SICOUL(plage As Range)
Dim cc, i%, k%, coul As Long
coul = Range(Application.Caller.Address).Interior.Color
cc = plage.Value
With plage
For i = 1 To .Rows.Count
For k = 1 To .Columns.Count
If .Cells(i, k).Interior.Color = coul Then
If Not IsNumeric(.Cells(i, k)) Then cc(i, k) = 0
Else
cc(i, k) = 0
End If
Next k
Next i
End With
SICOUL = cc
End Function
Cette fonction te renvoie une matrice égale à la plage mise en argument dans laquelle les valeurs de la plage ne correspondant pas à la couleur ou non numériques sont remplacées par des 0. Tu peux ainsi l'utiliser pour conditionner une plage par la couleur et la multiplier à une autre en utilisant SOMMEPROD:
=SOMMEPROD(sicoul(B5:Q5)*B3:Q3)
Cordialement.
edit : J'ai oublié, sur les deux fonctions, tu peux ajouter, après la ligne de déclarations Dim...
cette ligne :
Application.Volatile
pour que la fonction soit recalculée lors des recalculs (bien que le seul changement de couleur ne suffise pas à déclencher un recalcul...)