Multiplication suivant couleur de fond

  • Initiateur de la discussion Initiateur de la discussion lmc71
  • 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 !

lmc71

XLDnaute Occasionnel
Bonjour le forum

J'ai fait des multiples recherches pour mon problème, et je n'ai pas trouvé la solution appropriée ou alors pas cherché au bon endroit.
Je souhaiterais effectuer une multiplication de cellules d'un tableau selon deux conditions : si une cellule est vide et grise.

Je joins un fichier pour une meilleure compréhension.

Mon fichier original contient des macros VBA
Merci d'avance de vous pencher sur le problème.
 

Pièces jointes

Re : Multiplication suivant couleur de fond

Bonjour lmc71,

Je te propose d'utiliser cette fonction personnalisée :
VB:
Function SiCouleur(CRef As Range, Plage As Range, FormuleOui As String, FormuleNon As String) As Variant
    Dim i As Integer, j As Integer, NbC As Integer, NbL As Integer, FormuleOK As Boolean
    NbC = Plage.Columns.Count
    NbL = Plage.Rows.Count
    FormuleOK = False
    For i = 1 To NbL
        For j = 1 To NbC
            If Plage(i, j).Interior.ColorIndex = CRef.Interior.ColorIndex Then
                FormuleOK = True
            Else
                FormuleOK = False
                i = NbL
                j = NbC
            End If
        Next
    Next
    If FormuleOK Then
        SiCouleur = Evaluate(FormuleOui)
    Else
        SiCouleur = Evaluate(FormuleNon)
    End If
End Function

Ainsi, tu peux définir la couleur à partir d'une cellule de rférence qui contient la couleur de fond voulue, la plage sur laquelle portera le calcul (plusieurs lignes et plusieurs colonnes possibles) ainsi que la formule souhaitée.

La syntaxe de cette formule lors de l'utilisation est : SiCouleur(Cellule de référence, Plage à tester, Formule)
Où : Cellule de référence est la cellule qui contient la couleur à tester sur la plage
Plage est la plage sur laquelle toutes les cellules doivent avoir une couleur de fond identique à celle de la plage de référence)
FormuleOui est la formule à afficher si la condition est remplie.
FormuleNon est la formule à afficher si la condition n'est pas remplie.

Teste la sur le fichier joint et dis-moi si c'est OK.

A+

Edit : Bonsoir Victor21 et Robert.
 

Pièces jointes

Dernière édition:
Re : Multiplication suivant couleur de fond

Bonsoir le fil, bonsoir le forum,

Peut-être comme ça :
Code:
Sub Macro1()
Dim dl As Integer 'déclare la variable dl (Dernière Ligne)
Dim pl As Range 'déclare la variable pl (Plage)
Dim cel As Range 'déclare la variable cel (CELlule)
Dim i As Byte 'déclare la variable i (Incrément)

With Sheets("Feuil1") 'prend en compte l'onglet "Feuil1"
    dl = .Cells(Application.Rows.Count, 2).End(xlUp).Row 'définit la dernière ligne éditée dl de la colonne 2 (=B)
    Set pl = .Range("B2:B" & dl) 'définit la plage pl
    For Each cel In pl 'boucle sur toutes les cellule de la plage pl
        'condition : si la plage composée de la cellule cel et les deux cellules des colonnes C et D a la couleur grise (15)
        If cel.Resize(, 3).Interior.ColorIndex = 15 Then
            'place en colonne F le calcul correpondant à la formule
            If cel.Value > 0 And cel.Offset(0, 1).Value = "" Then cel.Offset(0, 4).Value = cel.Value * .Range("G1")
        End If 'fin de la condition
    Next cel 'prochaine cellule de la boucle
End With 'fin de la prise en compte de l'onglet "Feuil1"
End Sub
 
Re : Multiplication suivant couleur de fond

Bonsoir le forum, merci Fredoo, Victor 21 et Robert
Merci de vous être penché sur le problème aussi rapidement.
Pour Victor 21 le calcul des cellules est pour des sommes à faire payer, la valeur 2 est le nombre de contrat et la valeur 3 est le montant, mais certain contrat sont gratuits en réalité, mais pour des statistiques il est bon de connaître le montant de la gratuité. Voici la raison du grisé pour la personne qui prend l'imprimé derrière moi.
Merci
 
Re : Multiplication suivant couleur de fond

Re,

...
Pour Victor 21 le calcul des cellules est pour des sommes à faire payer, la valeur 2 est le nombre de contrat et la valeur 3 est le montant, mais certain contrat sont gratuits en réalité, mais pour des statistiques il est bon de connaître le montant de la gratuité. Voici la raison du grisé pour la personne qui prend l'imprimé derrière moi.
Merci
La question était de savoir si une règle gérait la coloration de ces cellules, de manière à l'utiliser dans la formule.
 
Re : Multiplication suivant couleur de fond

Bonsoir le forum, Bonsoir Robert
J'ai testé ton code et c'est super, il fonctionne exactement dans mon souhait.
Je voudrais toutefois te poser deux questions (je suis un nul en VBA) pou confirmation :

si je veux modifier la Colonne F en colonne H je dois modifier dans ligne suivante """ If cel.Value > 0 And cel.Offset(0, 1).Value = "" Then cel.Offset(0, 4).Value = cel.Value * .Range("G1") """" Le 4 par le chiffre correspondant au nombre de colonne après celle qui prise pour valeur initiale (soit colonne B dans ton code)

Pour effectuer le calcul sur d'autres colonnes (car plusieurs tableaux) je dois recopier les lignes depuis """" Set pl ....... """" à """" End If 'fin de la condition """" en modifiant les valeurs des colonnes de calcul et de résultats.

Est-ce que j'ai tout compris ?
Je joins le fichier modifié
Merci et merci à tous
 

Pièces jointes

Dernière édition:
Re : Multiplication suivant couleur de fond

Bonsoir le forum, Bonsoir Fredoo

J'ai testé le code, mais je ne suis pas arrivé à le faire fonctionner. Je l'ai placé dans la feuill1 et il me met #Nom. Je l'ai placé dans un module et là il me met #valeur.
Je te joins le fichier modifié avec ma formule (probablement mal placée).
J'ai essayé celui de Robert qui fonctionne.
Je te remercie néanmoins et également le forun de sa spontanéité.
🙄
Merci à tous
 

Pièces jointes

Re : Multiplication suivant couleur de fond

Re-bonsoir à tous,

lmc71, je voudrais pas te paraître lourd, mais j'ai passé pas mal de temps à te concocter une solution que j'ai peaufinée et tu ne daigne même pas me faire un retour sur le fait qu'elle correspond ou pas à ton besoin. Que tu choisisses la solution de Robert est très bien, mais Quid des autres propositions ?

A+
 
Re : Multiplication suivant couleur de fond

Bonsoir le forum, Bonsoir Fredoo
Excuse, mais il me semble t'avoir répondu personnellement à 21h25 (soit 2mn avant ton message) et je t'ai joins le fichier modifié. Je ne suis pas fort en VBA ou autre, mais je reste courtois et poli. Il faut être patient de temps en temps et merci de ta compréhension.
De plus je me suis empressé de répondre que le code de Robert fonctionnait, mais ce n'est pas le cas. Car si tu ouvres le fichier qui est joint seule ma formule fonctionne mais pas la couleur.
Alors si tu te sens pas trop frustré, tu peux toujours me donner des conseils, je suis toujours preneur.
Merci
 
Re : Multiplication suivant couleur de fond

Bonsoir Robert, le forum
Je me suis empressé (message à 21h15) de te dire que le code fonctionnait, que nenni en changeant de couleur le calcul se fait toujours.
Je reste preneur de toutes solutions.
Merci
 
Re : Multiplication suivant couleur de fond

Bonsoir le fil, bonsoir le forum,

En fait, la macro fonctionne mais je pensais que tu allais l'activer uns seule fois... Puisque tu veux changer les couleurs et la relancer la voici modifiée. Entre nous, vu comme je te l'avais commenté le code, tu aurais peut-être pu modifier toi même :
Code:
Sub Macro1()
Dim dl As Integer 'déclare la variable dl (Dernière Ligne)
Dim pl As Range 'déclare la variable pl (Plage)
Dim cel As Range 'déclare la variable cel (CELlule)
Dim i As Byte 'déclare la variable i (Incrément)

With Sheets("Feuil1") 'prend en compte l'onglet "Feuil1"
    dl = .Cells(Application.Rows.Count, 2).End(xlUp).Row 'définit la dernière ligne éditée dl de la colonne 2 (=B)
    Set pl = .Range("B2:B" & dl) 'définit la plage pl
    For Each cel In pl 'boucle sur toutes les cellule de la plage pl
        'condition : si la plage composée de la cellule cel et les deux cellules des colonnes C et D a la couleur grise (15)
        If cel.Resize(, 3).Interior.ColorIndex = 15 Then
            'place en colonne F le calcul correpondant à la formule
            If cel.Value > 0 And cel.Offset(0, 1).Value = "" Then cel.Offset(0, 4).Value = cel.Value * .Range("G1")
        Else
            cel.Offset(0, 4).Value = ""
        End If 'fin de la condition
    Next cel 'prochaine cellule de la boucle
End With 'fin de la prise en compte de l'onglet "Feuil1"
End Sub

J'ai juste rajouté :
Code:
Else
     cel.Offset(0, 4).Value = ""
 
Re : Multiplication suivant couleur de fond

Re Fredoo

J'ai réussi à modifier la formule et maintenant ton code fonctionne. Le seul hic et que je suis obligé à faire plusieurs manip du genre à modifier le chiffre à calculer en B3 pour que le calcul se fasse. Sinon en changeant la couleur le calcul ne se fait pas immédiatement. Ce que je souhaiterait.

Je te joins le fichier nouvellement modifié.

Je suis toujours preneur. Merci
 

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

C
  • Question Question
Réponses
6
Affichages
1 K
Crapulfeust
C
S
Réponses
7
Affichages
2 K
syriak
S
Retour