Changement de couleur d'une cellule

Bonjour à tous

besoin d'aide en VBA.

Dès l'affichage de ma feuille, je souhaiterais que les cellules B6:Q6, change de couleur, si la cellule D6 soit plus petite que C1.

Il est claire que je pourrais utiliser la mise en forme conditionnelle, mais je prefèrerais faire cela en VBA.

merci encore de votre aide

Titi32600

Bonsoir,

Merci de joindre un fichier exemple

Bouben

voila un fichier très simple

si la date située en cellule D6 est plus petite que celle située en C1, alors toutes les cellules de B6:Q6 doivent changer de couleur de fond, et on affichera en cellule Q6 le mot "OK",

sinon les cellule ne changeront pas de couleur, et rien n'apparaitra en cellule Q6.

merci encore

titi32600

26essais.xlsx (9.21 Ko)

Bonsoir,

Ci-joint une proposition à tester.

Action lors de la modification de la date en D6 ou en C1.

Bonne soirée

Bouben

24essais-v0-1.xlsm (16.91 Ko)

Salut Bouben

Encore merci, cela fonctionne à merveille. exactement ce qu'il me fallait.

Titi32600

Re Bouben

Je reviens vers toi.

Le changement de couleur des cellules B6:Q6, n'intervient qu'à partir du moment, ou je rentre une date dans la cellule D6.

En fait, j'aurais aimé qu'elle change de couleur, quand on clique sur la feuille.

J'ai changé le Workseet_Change en Worksheet_Activate, mais j’obtiens, une erreur sur Target.count.

Titi32600

Bonjour,

Ci-joint une nouvelle version à tester.

Bonne journée

Bouben

25essais-v0-2.xlsm (18.86 Ko)

Salut

ça fonctionne bien.

merci encore

Titi32600

Re

Sans vouloir être pénible,

J'aimerais bien faire la même chose, sur plusieurs lignes. ex de la ligne 6 à la ligne 15.

comme tu pourras le voir, j'ai remplacé les couleur de fond, par la méthode RGB

merci encore

Bonsoir à tous

j'ai essayé de modifier le code que l'on m'a donné, mais ca ne marche pas trop bien.

j'ai intégré un "for....to", pour les lignes 6 à 15, mais le code tourne en boucle.

Private Sub Worksheet_Change(ByVal Target As Range)

Dim dt1 As Date
Dim dt2 As Date

For i = 6 To 15

If DateDiff("d", Range("C1").Value, Range("D" & i).Value) < 0 Then
Range(("B" & i), ("Q" & i)).Interior.Color = RGB(230, 215, 200) ' couleur de fond BEIGE
Range("Q" & i).Value = "OK"

Else

Range(("B" & i), ("Q" & i)).Interior.Color = RGB(255, 255, 255) ' couleur de fond Blanc
Range("Q" & i).Value = ""

End If
Next
End Sub

Merci à tous

titi32600

Bonsoir,

Tu es dans un évènement (Worksheet_Change) :

- lorsque i=6, un nouvel évènement est créé, qui relance une autre boucle qui recommence à i=6, qui recrée un nouvel évènement qui commence lui aussi à i=6, et etc... Boucle sans fin !

Annuler les évènements avant la boucle, puis les ré-activer après :

Application.EnableEvents = False

for i=6 to 15

next

Application.EnableEvents = true

Attention, ne pas utiliser de Exit Sub dans la boucle, car plus aucun évènements de réagiront.

Merci Thihii

Effectivement ça ne tourne plus en boucle.

mais dès que je met une valeur dans la cellule D6, les lignes définies par le "for i=6 to 15", passent elles aussi en couleur beige.

je pense avoir fais une erreur dans la ligne,

If DateDiff("d", Range("C1").Value, Range("D" & i).Value) < 0 Then

mais je n'arrive pas à voir où.

merci encore

titi32600

Bonjour,

Voici une nouvelle version.

Suivant comment je souhaite traiter les dates, je n'utilise par forcément une variable DATE, mais LONG en vba.

Cela impose de formater les cellules à traiter au format date. Et pour terminer, gérer une erreur possible qui, si tu mets la ligne ON Error... en commentaire, des réactions imprévisibles peuvent arriver, comme lors d'une saisie accidentelle d'une date comme : 01/15/2045.

à tester.

Salut Thihii

Merci encore pour ta version.

effectivement elle est simple, et me conviens parfaitement.

Cordialement

Titi32600

Rechercher des sujets similaires à "changement couleur"