Bonjour,
Tu ne peux que la fabriquer...
Dérivée de ta première fonction perso :
Function SOMME_SI_ETCOUL(PlageEt As Range, CondEt, PlageSomme As Range, PlageCouleur As Range)
Dim Som As Double, Couleur As Long, i As Integer, k As Integer
Application.Volatile
Couleur = PlageCouleur.Cells(1, 1).Interior.Color
With PlageSomme
For i = 1 To .Rows.Count
For k = 1 To .Columns.Count
If PlageEt.Cells(i, k) = CondEt And .Cells(i, k).Interior.ColorIndex _
<> xlColorIndexNone And .Cells(i, k).Interior.Color = Couleur Then
If IsNumeric(.Cells(i, k)) Then Som = Som + .Cells(i, k)
End If
Next k
Next i
End With
SOMME_SI_ETCOUL = Som
End Function
=SOMME_SI_ETCOUL(date;A24;qtélot;Q19)
Par la même occasion, ta première fonction revisitée :
Function SOMME_SI_COULEUR(PlageSomme As Range, PlageCouleur As Range)
Dim Cel As Range, Som As Double, Couleur As Long
Application.Volatile
Couleur = PlageCouleur.Cells(1, 1).Interior.Color
For Each Cel In PlageSomme
If Cel.Interior.ColorIndex <> xlColorIndexNone And Cel.Interior.Color _
= Couleur Then
If IsNumeric(Cel) Then Som = Som + Cel
End If
Next Cel
SOMME_SI_COULEUR = Som
End Function
Modifiée sur 3 points :
- utilisation de Color en lieu et place de ColorIndex : plus au goût du jour depuis 2007 (le système de couleurs a changé dans Excel et la palette n'est plus prédominante...)
- inutile de renvoyer une erreur #VALEUR! si PlageCouleur occupe plus d'une cellule, on renvoie la première et on évite une erreur (de plus cette erreur et renvoyée automatiquement par Excel si une autre erreur est rencontrée, elle ne serait donc pas significative du problème...)
- vérification que la valeur additionnée est numérique, sinon là il y aurait une erreur...
Dans la mesure où tu utilises du blanc, test sur ColorIndex maintenu pour éliminer les cellules sans couleur (Color renvoie dans ce cas la couleur de fond de la feuille, soit blanc...)
Cordialement.