Couleur de fond selon résultat plusieurs MEFC

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
A voir également:

3 réponses

Gord21 Messages postés 928 Statut Membre 289
 
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.
0
eriiic Messages postés 25847 Date d'inscription   Statut Contributeur Dernière intervention   7 282
 
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
0
Gord21 Messages postés 928 Statut Membre 289
 
Salut,
Merci Eric, je pensais que la propriété utilisée était la même que le fond soit mis manuellement ou par MFC.
Désolé pour ma proposition qui n'est donc pas vraiment adaptée.
@+
0
Tony44
 
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.
0