Microsoft 365 Somme des cellules de couleur jaune

  • Initiateur de la discussion Initiateur de la discussion Eric Dé
  • Date de début Date de début

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 !

Eric Dé

XLDnaute Occasionnel
Bonjour le Forum,

Je souhaiterais obtenir la somme des cellules de couleur jaunes (simulée en orange dans la colonne F) sur chaque ligne de mon tableau.

Est-ce faisable ?

Merci d'avance pour vos idées.

Cordialement.
Eric
 

Pièces jointes

Bonjour eric, Nain porte quoi,
Une solution possible en vba avec cette fonction perso :
VB:
Function SommeJaune(Plage As Range)
Application.Volatile
For Each c In Plage
    If Range(c.Address).Interior.Color = vbYellow Then SommeJaune = SommeJaune + Range(c.Address).Value
Next c
End Function
La syntaxe est : =SommeJaune(A1:E1)
Le recalcul se fera sur un appui d' Entrée.
 

Pièces jointes

Bonjour eric, Nain porte quoi,
Une solution possible en vba avec cette fonction perso :
VB:
Function SommeJaune(Plage As Range)
Application.Volatile
For Each c In Plage
    If Range(c.Address).Interior.Color = vbYellow Then SommeJaune = SommeJaune + Range(c.Address).Value
Next c
End Function
La syntaxe est : =SommeJaune(A1:E1)
Le recalcul se fera sur un appui d' Entrée.

Merci sylvanu,

Je vais ajouter une difficulté : si la couleur jaune des cellules est le résultat d'une mise en forme conditionnelle, cela ne semble pas fonctionner.

Y a-t-il un ajout à faire à tes lignes de codes ?

Merci d'avance.
 
le résultat d'une mise en forme conditionnelle, cela ne semble pas fonctionner.
Non, les MFC ne sont pas prises en compte par cette fonction.
Essayez cette fonction :
VB:
Function SommeJaune(Plage As Range)
Application.Volatile
For Each c In Plage
    If Range(c.Address).DisplayFormat.Interior.Color = vbYellow Then SommeJaune = SommeJaune + Range(c.Address).Value
Next c
End Function
il faut utiliser "DisplayFormat" pour tenir compte des MFC. Mais dans mon VBA 6.3 je n'ai pas cette fonction, donc pas pu la tester.
A essayer.
 
Y a-t-il une autre alternative ?

Oui, utiliser la condition de la MFC.

Voici un exemple vite fait par gémini
VB:
Function SommeParConditionMFC(PlageSomme As Range) As Double
    Dim Cellule As Range
    Dim MFC As FormatCondition
    Dim ConditionRemplie As Boolean
    Dim Total As Double
    
    Total = 0
    
    For Each Cellule In PlageSomme
        ConditionRemplie = False
        
        ' On boucle sur toutes les règles de MFC appliquées à la cellule
        If Cellule.FormatConditions.Count > 0 Then
            For Each MFC In Cellule.FormatConditions
                
                ' On ne traite ici que les MFC de type "Formule" ou "Valeur de la cellule"
                On Error Resume Next
                Select Case MFC.Type
                    Case 1 ' xlCellValue (Valeur de la cellule est...)
                        ConditionRemplie = VerifierConditionValeur(Cellule, MFC)
                    Case 2 ' xlExpression (La formule est...)
                        ' Evaluate permet de tester la formule de la MFC dans le contexte de la cellule
                        ConditionRemplie = Application.Evaluate(ModifierFormulePourCellule(MFC.Formula1, Cellule))
                End Select
                On Error GoTo 0
                
                ' Si une condition est vraie (et que "Interrompre si vrai" est actif, on s'arrête là)
                If ConditionRemplie Then
                    Total = Total + Cellule.Value
                    Exit For ' Sort de la boucle des MFC pour cette cellule
                End If
            Next MFC
        End If
    Next Cellule
    
    SommeParConditionMFC = Total
End Function

' Fonction support pour adapter la formule relative de la MFC à chaque cellule
Private Function ModifierFormulePourCellule(Formule As String, Cellule As Range) As String
    ModifierFormulePourCellule = Application.ConvertFormula(Formule, xlA1, xlA1, , Cellule)
End Function

' Fonction support pour les MFC de type "Valeur de la cellule"
Private Function VerifierConditionValeur(Cell As Range, MFC As FormatCondition) As Boolean
    Dim Val1, Val2
    Val1 = Application.Evaluate(MFC.Formula1)
    
    Select Case MFC.Operator
        Case xlGreater: VerifierConditionValeur = (Cell.Value > Val1)
        Case xlLess: VerifierConditionValeur = (Cell.Value < Val1)
        Case xlEqual: VerifierConditionValeur = (Cell.Value = Val1)
        Case xlBetween:
            Val2 = Application.Evaluate(MFC.Formula2)
            VerifierConditionValeur = (Cell.Value >= Val1 And Cell.Value <= Val2)
        ' Ajoutez d'autres cas (xlNotEqual, etc.) si nécessaire
    End Select
End Function
 
Re,
Sorry. C'est le problème lorsqu'on ne peut pas tester. On peut dire des sottises.
Comme Nain Porte Quoi, j'ai demandé à Gemini de me corriger cette fonction, il me donne :
VB:
unction SommeJaune(Plage As Range)
    Application.Volatile
    Dim c As Range
    Dim total As Double
    total = 0
    For Each c In Plage
        ' On vérifie si la cellule est jaune (vbYellow)
        If c.Interior.Color = vbYellow Then
            total = total + c.Value
        End If
    Next c
    SommeJaune = total
End Function
Peut être que là ça marchera. 😕
 
Bonjour,
la proposition de @sylvanu fonctionne correctement si on commente l'application.volatile
Attention: pas de mise à jour automatique
1778056705681.png
1778056776072.png
 
Bonjour le forum,
pas utilisable en fonction personnalisée : il faut l'imbriquer dans une une Sub...
DisplayFormat fonctionne dans une Function si on évalue cette fonction par Evaluate :
VB:
Function SommeJaune(Plage As Range)
Application.Volatile
Dim c As Range
For Each c In Plage
    If IsNumeric(c) Then If Evaluate("ValeurCouleur(" & c.Address() & ")") = vbYellow _
        Then SommeJaune = SommeJaune + CDbl(c)
Next
End Function

Private Function ValeurCouleur(R As Range) As Long
ValeurCouleur = R.DisplayFormat.Interior.Color
End Function
A+
 

Pièces jointes

- 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
7
Affichages
382
Réponses
10
Affichages
407
Réponses
5
Affichages
215
Réponses
2
Affichages
243
Retour