Problème fonction somme couleur

Bonjour,

J'ai un problème avec ma fonction excel et j'ai besoin de votre aide.

6teste.xlsm (19.58 Ko)

Je n'arrive pas à faire marcher ma macro SOMMECOUL dans la colonne caisse alors que la macro intégré SOMME fonctionne très bien. On dirait que le macro n'accepte pas les opérations mais je ne m'y connait pas assez pour voir le problème ni pour la modifier.

Function SOMMECOUL(plage As Range)

Dim c As Range, coul As Long, tot

coul = Range(Application.Caller.Address).Interior.Color

For Each c In plage

If c.Interior.Color = coul Then

If IsNumeric(c.Value) Then tot = tot + c.Value

End If

Next c

SOMMECOUL = tot

End Function

Voilà la fonction que j'essaie de faire marcher :

=SOMMECOUL(B5;C5*C3;D5*D3;E5*E3;F5*F3;G5*G3;H5*H3;I5*I3;J5*J3;K5*K3;L5*L3;M5*M3;N5*N3;O5*O3;P5*P3;Q5*Q3)

Bonjour,

A vue de nez, ta fonction n'a besoin que d'une plage pour fonctionner, or tu l'utilise en faisant des opérations "C5*C3"... Pourquoi as-tu besoin de faire ces multiplications ? Et surtout que cherche tu as faire en les faisant dans cette fonction SOMMECOUL ?

Bonjour,

Tu en fais une utilisation non prévue, la fonction n'accepte qu'une plage de cellule en argument...

Cordialement.

edit : Salut Pedro ! Pas rafraîchi !

Salut,

Effectivement je pense que le problème vient de là mais j'aurais besoin de rentré juste la quantité gente 3 boissons en verte (payé) = 6€ sinon il faut que je rentre 6€ du coup je suis obligé de faire le calcul à chaque fois en soit je l'utilise comme ça actuellement mais j'aurais aimé l'amélioré si c'était possible

Bonne journée

Merci des réponses

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...)

5azyroth-teste.xlsm (21.76 Ko)

MFerrand,

Merci beaucoup c'est exactement ce que je chercher un peu rustine mais ça me convient

Rechercher des sujets similaires à "probleme fonction somme couleur"