Couleur de fond selon résultat plusieurs MEFC
Tony44
-
Tony44 -
Tony44 -
Bonjour,
je cherche à gérer le fond d'une cellule excel de manière automatique.
Voici ma problèmatique :
- j'ai une ligne dont plusieurs colonnes sont renseignées avec des MFEC. Ces MFEC changent le fond des cellules concernées, les conditions sont différentes selon les colonnes.
- sur chaque ligne, j'ai une cellule bilan qui doit me donner le statut général
si au moins une cellule de la ligne a un fond rouge, alors le fond de la cellule bilan est rouge
sinon si au moins une cellule de la ligne a un fond orange, alors le fond de la cellule bilan est orange
sinon le fond de la cellule bilan est vert.
Je cale sur la mise en place de cette macro étant donné mon niveau en VBA.
Merci d'avance
Anthony
je cherche à gérer le fond d'une cellule excel de manière automatique.
Voici ma problèmatique :
- j'ai une ligne dont plusieurs colonnes sont renseignées avec des MFEC. Ces MFEC changent le fond des cellules concernées, les conditions sont différentes selon les colonnes.
- sur chaque ligne, j'ai une cellule bilan qui doit me donner le statut général
si au moins une cellule de la ligne a un fond rouge, alors le fond de la cellule bilan est rouge
sinon si au moins une cellule de la ligne a un fond orange, alors le fond de la cellule bilan est orange
sinon le fond de la cellule bilan est vert.
Je cale sur la mise en place de cette macro étant donné mon niveau en VBA.
Merci d'avance
Anthony
Configuration: Windows XP / Internet Explorer 6.0
3 réponses
-
Bonsoir,
Voici une possibilité :Sub Colorer() ' ' Déclaration des variables '-------------------------- Dim coul_Vert, coul_Orange, coul_Rouge Dim Plage_donnees As Range Dim Plage_bilan As Range Dim offset_ligne As Long Dim offset_colonne As Long Dim Est_orange As Boolean Dim Est_rouge As Boolean ' ' Initialisation des variables '----------------------------- coul_Vert = 10 coul_Orange = 46 coul_Rouge = 3 Set Plage_donnees = ActiveSheet.Range("A1:G10") Set Plage_bilan = ActiveSheet.Range("H1:H10") ' ' Analyse '-------- For offset_ligne = 0 To Plage_donnees.Rows.Count - 1 Est_orange = False Est_rouge = False For offset_colonne = 0 To Plage_donnees.Columns.Count - 1 Select Case Range(Plage_donnees.Cells(1).Address).Offset(offset_ligne, offset_colonne).Interior.ColorIndex Case coul_Rouge Est_rouge = True Case coul_Orange Est_orange = True Case Else End Select Next offset_colonne If Est_rouge Then With Range(Plage_bilan.Cells(1).Address).Offset(offset_ligne, 0).Interior .ColorIndex = coul_Rouge .Pattern = xlSolid End With ElseIf Est_orange Then With Range(Plage_bilan.Cells(1).Address).Offset(offset_ligne, 0).Interior .ColorIndex = coul_Orange .Pattern = xlSolid End With Else With Range(Plage_bilan.Cells(1).Address).Offset(offset_ligne, 0).Interior .ColorIndex = coul_Vert .Pattern = xlSolid End With End If Next offset_ligne ' End Sub
Pense à adapter les valeurs dans la partie initialisation.
Je n'ai pas mis en place de test pour vérifier qu'il y a bien le même nombre de lignes dans les données et dans la colonne bilan, et je considère que ces deux plages commencent à la même ligne.
N'hésite pas si tu as un soucis.
-
Bonsoir,
Pour compléter la réponse de gord21 j'ajouterais que sa macro travaille sur des fonds mis manuellement ou par macro mais pas sur une couleur mise par MFC.
Récupérer une couleur mise par MFC est relativement complexe (voir ici l'excellente fonction proposée lermite222 qui a eu le courage de s'y attaquer)
C'est sûrement plus simple, si c'est possible, que toutes tes cellules soient mises en couleur par macro (puisque tu es parti pour en mettre au moins une) et que tu utilises la proposition de gord.
Ou sinon modifie sa proposition en utilisant la fonction proposée.
eric -
Je vous remercie pour vos réponses.
Vu la matière à dispo, je pense que cela devrait suffire à mon bonheur :-)
Je teste cela dans la journée.