Macro pour colorer cellule en fonction d'une condition

Bonjour,

je joint un tableau qui indique des fiches clients.

Un client a droit à 4 soins maximum par jour et à 3 massages! Je voudrais donc pouvoir faire une macro ou autre pour colorer les cellules soins et massages qui dépassent la condition de 4 par jour pour les soins et de 3 par jour pour les massages.

Les colonne qui vont nous interresser sont les colonnes M "prestation" et la colonne N "quantité".

sur mon tableau j'ai coloré les cellules comme je souhaiterais que ça rende une fois la macro utilisé.

et la cerise sur le gâteau serait que les montants des celules rouges (colonne R "montant") se reportent ou se totalisent en colonne S "montant trop perçu"

j'espère que quelqu'un pourra m'apporter son aide.

Ce tableau comporte plus de 2000 fiche et je dois tout faire manuellement... Donc ma reconnaissance serait énorme si quelqu'un pouvait m'aider à automatiser tout ça.

Par avance merci!

Bonne soirée à tous

Bonjour

Un essai à tester. Te convient-il ?

Bye !

Bonsoir gmb !

Beau travail, je me suis penché dessus et puis...

Mais Attention ! il y a une colonne "quantité" où quelque fois il y a 2 soins sur la même ligne (voir ligne Excel 27)

Sur le fichier test d'origine c'est bien pris en compte...

@ bientôt

LouReeD

coucou,

déjà merci de t'être penché sur mon problème

j'ai testé ta solution et c'est presque ça!

il y a juste un soucis au niveau des quantités, car il peut y avoir une quantité 2 pour les soins

Sur ma fiche 1 c'est parfait, mais par exemple sur ma fiche 2 il y'a un soins qui compte pour deux (il y a ecrit quantité 2 dans la colonne quantité), du coup faudrait que la macro prenne en compte la quantité (cette quantité est soit 1 ou soit 2 pour les soins, pour les massages la quantité sera toujours 1)

en consequence sur ma fiche 2 il aurait fallu qu'un soins en plus se colore en rouge pour la date du 02/01/2016, un de plus pour la date du 04/01/2016, un de plus pour le 06/01/2016, une de plus pour le 08/01/2016 et un de plus pour le 11/01/2016. Je te colore en bleu les cellules que la macro aurait du prendre en compte et colorer en rouge.

j'espere que cette donnée en plus pourra être applicable à ta macro que je trouve déjà super efficace.

par avance merci pour l'aide apporté

bonne soirée

ci-joint le fichier

Proposition de modification :

Sub Dépassements()

    'Initialisation
    Range("M5:M" & Range("M" & Rows.Count).End(xlUp).Row).Interior.Color = xlNone
    Range("S5:S" & Range("M" & Rows.Count).End(xlUp).Row).ClearContents

    nclD = Range("B5")
    dte = Range("L5")
    For i = 5 To Range("B" & Rows.Count).End(xlUp).Row
        nbM = 0
        nbS = 0
        ln = i
        While Range("B" & ln) = nclD And Range("L" & ln) = dte
            If Range("M" & ln) = "SOINS" Then
                nbS = nbS + (1 * Range("N" & ln))
                If nbS > 4 Then
                    Range("M" & ln).Interior.Color = RGB(255, 0, 0)
                    Range("S" & ln) = Range("R" & ln)
                End If

            ElseIf Range("M" & ln) = "MASSAGE" Then
                nbM = nbM +1
                If nbM > 3 Then
                    Range("M" & ln).Interior.Color = RGB(255, 0, 0)
                    Range("S" & ln) = Range("R" & ln)
                End If
            End If
            ln = ln + 1
        Wend
        nclD = Range("B" & ln)
        dte = Range("L" & ln)
        i = ln - 1
    Next i
End Sub

@ bientôt

LouReeD

Coucou!

j'ai testé et c'est parfait!!!!

un énorme merci!!!

Merci à vous deux pour votre aide et le temps consacré !

A très bientôt

Eno

Pour moi il y a une nouvelle erreur...

en effet en colonne S c'est un trop perçu, donc il faut compter que les soins dépassant le quotas non ?

Hors dans le fichier pour la journée du 02/01/2016 si on inverse les 1 et 2 des lignes Excel 27 et 28, la macros mettra en trop perçu 15.90 au lieu de 7.95 car sur les deux soins de la ligne 28 (après inversion) un seul sera en trop perçu et non pas les deux, non ?

Donc voici le code qui prend en compte un seul paiement de soins sur les deux s'il le faut...

Option Explicit

Dim i, nclD, nbM, nbS, ln, dte, dep

Sub Dépassements()

    'Initialisation
    Range("M5:M" & Range("M" & Rows.Count).End(xlUp).Row).Interior.Color = xlNone
    Range("S5:S" & Range("M" & Rows.Count).End(xlUp).Row).ClearContents

    nclD = Range("B5")
    dte = Range("L5")
    For i = 5 To Range("B" & Rows.Count).End(xlUp).Row
        nbM = 0
        nbS = 0
        ln = i
        While Range("B" & ln) = nclD And Range("L" & ln) = dte
            If Range("M" & ln) = "SOINS" Then
                nbS = nbS + 1 * Range("N" & ln)
                If nbS = 4 Then
                    dep = True
                ElseIf nbS > 4 Then
                    Range("M" & ln).Interior.Color = RGB(255, 0, 0)
                    If dep = True Then
                        Range("S" & ln) = Range("R" & ln) * Range("N" & ln)
                    Else
                        Range("S" & ln) = Range("R" & ln) - (Range("R" & ln) / (Range("N" & ln)) * (nbS - 4))
                        dep = True
                    End If
                End If

            ElseIf Range("M" & ln) = "MASSAGE" Then
                nbM = nbM + 1
                If nbM > 3 Then
                    Range("M" & ln).Interior.Color = RGB(255, 0, 0)
                    Range("S" & ln) = Range("R" & ln)
                End If
            End If
            ln = ln + 1
        Wend
        nclD = Range("B" & ln)
        dte = Range("L" & ln)
        i = ln - 1
        dep = False
    Next i
End Sub

@ bientôt

LouReeD

@LooReed

Bravo pour ta perspicacité !

Je suis décidément un gros étourdi pour ne pas avoir vu ce qui ne t'a pas échappé !

Mais c'est là un intérêt du forum : en s'y mettant tous, on arrive au bon résultat.

Je te laisse sur le sujet pour le conclure.

Merci.

Bye !

Bonjour,

Bien vu Looreed!

Franchement merci pour votre aide.

Ça va m'être grandement utile!

Bonne journée

gmb !

tout à fait d'accord avec vous !

d'ailleurs j'ai eu en avatar une image qui disait :"Touche pas à mon post !" c'était par ironie pour répondre à un membre qui m'a gentiment expliquer qu'il avait commencé à répondre et qu'il y avait d'autre questions sur lesquelles je pouvais me pencher...

Bref c'est de l'histoire "ancienne".

Eno83, je ne dirais pas de même pour vous "Bien vu Looreed !" en effet moi c'est LouReeD avec un U !

@ bientôt sur le forum

LouReeD

Rechercher des sujets similaires à "macro colorer fonction condition"