Modifier couleur d'1 cellule en fonction <> couleur plage de cellules

Bonjour à tous,

J'ai réalisé cette petite macro pour modifier la couleur de fond d'une cellule en fonction de la couleur existante (ou pas) dans une plage de cellules.

Ex, s'il y a du rouge dans la plage de cellule alors le fond de la cellule doit être rouge, orange = orange, si aucune des 2 alors rien.

Je précise les couleurs de fond de la plage de cellule changent en fonction d'un format conditionnel.

Je ne suis pas un pro, j'ai fais au mieux en fouinant mais ça ne fonctionne pas.

Macro ci dessous:

Sub couleur()
   Dim li As Integer: Dim co As Integer
    For li = 3 To 83
     For co = 19 To 30
        If Cells(li, co).Interior.Color = RGB(255, 0, 0) Then
         Cells(li, 3).Interior.Color = RGB(255, 0, 0)
        Else
         If Cells(li, co).Interior.Color = RGB(255, 192, 0) Then
          Cells(li, 3).Interior.Color = RGB(255, 192, 0)
         End If
        End If
      Next co
    Next li
    Worksheet.calulate
End Sub

Merci de votre aide.

Salut KPC,

2 choses :
- de ce que j'en lis depuis pas mal de temps (sans l'avoir expérimenté moi-même), une couleur issue d'une MFC n'est pas détectable par VBA ! Eh, oui !
- quand bien même ce serait le cas, tu crées une boucle FOR Co et tu spécifies Col dans les références des cellules : j'imagine que ton code plante !?

Ouvrage à remettre sur le métier...


A+

En effet, petite erreur que je n'ai pas vu, et c'est pas faute d'avoir relu...

Mais le code ne plante pas, il ne donne rien.

Erreur corrigée, mais même en modifiant la couleur d'une cellule, sans format conditionnel, ça ne fonctionne pas.

Je n'ai pas de boule de cristal...


A+

Salut KPC,

Sans la MFC, devrait aller...
Attention que j'ai la "sale" habitude d'arrondir les RGB à des multiples de 5.

Dim li%, co%
For li = 3 To 83
    For col = 19 To 30
        Cells(li, col).Interior.Color = _
            IIf(Cells(li, col).Interior.Color = RGB(255, 0, 0) Or Cells(li, col).Interior.Color = RGB(255, 190, 0), _
                Cells(li, col).Interior.Color, xlNone)
    Next
Next

Autre chose : tu parcoures chaque ligne en changeant, potentiellement, la couleur de Cells(li, 3) 12 fois ? Quel intérêt ?


A+

Bonjour KPC66, Curulis57,

En retour de ton code proposé un code rectifié ci-dessous.

Sub couleur()
   Dim li As Integer: Dim co As Integer
    For li = 3 To 83
     For co = 19 To 30
        If Cells(li, co).DisplayFormat.Interior.Color = RGB(255, 0, 0) Then
         Cells(li, 3).Interior.Color = RGB(255, 0, 0)
        Else
         If Cells(li, co).DisplayFormat.Interior.Color = RGB(255, 192, 0) Then
          Cells(li, 3).Interior.Color = RGB(255, 192, 0)
         End If
        End If
      Next co
    Next li
    Worksheet.calulate
End Sub

curulis57:

Ma plage de cellule correspond au 12 mois, si un mois est rouge, la cellule d'origine doit être rouge. ceci sur 83 lignes (clients).

curulis57, X Cellus: j'ai essayé vos modifs, mais rien ne s passe.

Peut-être un conflit, ou je place la macro au mauvais endroit dans vba.

Peut-on partager seulement une feuille + code d'un classeur?

Suite,

Pourquoi un Worksheet.Calculate en fin de macro?

Si tu changes une ou plusieurs valeur(s) avant de lancer la macro. Tes MFC vont évoluer et s'adapter selon les nouvelles données.

Puis tu lances la macro placée dans un module du projet.

Voici la feuille en question, ce sera plus clair.

2gestion-e.xlsm (86.62 Ko)

A nouveau,

En cliquant sur le bouton gris en en-tête. Vois si cela correspond à ce que tu souhaites.

Le code est placé dans le module 1.

10gestion-emodif.xlsm (89.47 Ko)

Oui, ça fonctionne bien. Mais est-ce possible sans bouton?

Suite,

Possibilité de mettre le code couleur modifié dans le Worksheet_Change de la feuille du tableau.

Avec en première ligne cela

If target.column < 19 or target = "" then exit sub

Ainsi c'est seulement en renseignant une ligne de la colonne S à AD que la macro fonctionnera.

Merci X Cellus. Finalement je laisse le bouton comme dans ta 1ère proposition.

Rechercher des sujets similaires à "modifier couleur fonction plage"