Mises en forme conditionnelles par VBA

Nonno 94

XLDnaute Occasionnel
:confused::confused: Bonjour le Forum,

ne parvenant pas à le faire, je viens vous demander comment modifier le code suivant pour changer la couleur de fond des cellules dont les valeurs sont des pourcentages en fonction de la valeur de ces pourcentages.

Code:
  For Each c In Range("I3:I242").Cells
        Select Case CStr(c.Value)               '  Select Case c.Value
    Case Is > 0, 4
        c.Interior.Color = vbGreen
          c.Font.Color = vbBlack
    Case Is > 0, 3
        c.Interior.Color = RGB(207, 255, 210)
          c.Font.Color = vbBlack
    Case Is > 0, 2
        c.Interior.Color = vbYellow
          c.Font.Color = vbBlack
    Case Is < 0
        c.Interior.Color = RGB(255, 210, 0)
          c.Font.Color = vbBlack


    Case Else
        c.Interior.Color = RGB(0, 255, 255)
          c.Font.Color = vbBlue
    End Select
    Next

Si le % est égal ou supérieur à 40 %, fond "vert",
30 %, fond "RGB(207, 255, 210)"
20 %, fond "jaune"
> 0, fond "orange"
< 0, fond "rouge".

Avec mes remerciements et en vous souhaitant une bonne fin de journée.
Cordialement.

Nonno 94.
 

Hervé

XLDnaute Barbatruc
Re : Mises en forme conditionnelles par VBA

salut :D

essaye peut etre comme ceci :

Code:
For Each c In Range("I3:I242").Cells
         Select Case c.Value              '  Select Case c.Value
     Case 0.3 To 0.4  '> 0, 4
         c.Interior.Color = vbGreen
           c.Font.Color = vbBlack
     Case 0.2 To 0.3
         c.Interior.Color = RGB(207, 255, 210)
           c.Font.Color = vbBlack
     Case 0 To 0.2
         c.Interior.Color = vbYellow
           c.Font.Color = vbBlack
     Case Is < 0
         c.Interior.Color = RGB(255, 210, 0)
           c.Font.Color = vbBlack
 
    Case Else
         c.Interior.Color = RGB(0, 255, 255)
           c.Font.Color = vbBlue
     End Select
     Next

a plus
 

Nonno 94

XLDnaute Occasionnel
Re : Mises en forme conditionnelles par VBA

Bonsoir Eric S,

sans vouloir réveiller celui qui dort paisiblement, je vous répondrai que le VBA me semble être la seule possibilité car je souhaite avoir 4 ou 5 possibilités de mises en formes conditionnelles ce que ne permet pas Excel qui n'en propose que 3 dans le menu "Format".
Mais peut-être existe-t-il une autre possibilité ?

Nonno 94.
 

ERIC S

XLDnaute Barbatruc
Re : Mises en forme conditionnelles par VBA

Re

une approche "dynamique" avec en feuille monchoix les limites et couleurs de la mfc
 

Pièces jointes

  • mfc4.xls
    23.5 KB · Affichages: 54
  • mfc4.xls
    23.5 KB · Affichages: 53
  • mfc4.xls
    23.5 KB · Affichages: 51

ERIC S

XLDnaute Barbatruc
Re : Mises en forme conditionnelles par VBA

Re

plus dynamique (liste extensible)

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Value = "" Then Exit Sub
derligne = Sheets("MONCHOIX").Range("A" & Rows.Count).End(xlUp).Row
For i = derligne To 2 Step -1
    If Target.Value <= Sheets("monchoix").Range("A" & i).Value Then Target.Interior.Color = Sheets("monchoix").Range("A" & i).Interior.Color
Next
End Sub
 

Si...

XLDnaute Barbatruc
Re : Mises en forme conditionnelles par VBA

salut

Si... j'ai bien compris, tu veux aussi formater les cellules contenant du texte, alors essaie
Code:
  For Each C In Range("I3:I242")
     C.Font.Color = vbBlack
     Select Case C.Value
       Case Is >= 0.4: C.Interior.Color = vbGreen
       Case 0.3 To 0.4: C.Interior.Color = RGB(207, 255, 210)
       Case 0.2 To 0.3: C.Interior.Color = vbYellow
       Case 0 To 0.2: C.Interior.ColorIndex= 44
    Case Else
         C.Interior.Color = RGB(255, 210, 0)
    End Select
    If Not IsNumeric(C) Then
      C.Interior.Color = RGB(0, 255, 255)
      C.Font.Color = vbBlue
    End If
    Next

Contrôle quand même les contenus (cellules formatées ?) et les intervalles.

correction 2003: ColorIndex=44 pour le orange
 
Dernière édition:

Nonno 94

XLDnaute Occasionnel
Re : Mises en forme conditionnelles par VBA

Bonsoir Eric et merci pour votre réponse.

malheureusement, mon "niveau" (!!!) ne me permet pas de la mettre en oeuvre dans mon fichier.
Aussi, je me permets de vous le faire parvenir pour que vous voyiez si cela est possible.
La colonne à mettre en forme est la colonne "I".

Cordialement.
Nonno 94.
 

Pièces jointes

  • MEF Essai.xls
    722 KB · Affichages: 63

ERIC S

XLDnaute Barbatruc
Re : Mises en forme conditionnelles par VBA

Bonjour
un premier essai brut

Code:
'***************************************************
  For Each c In Range("I3:I242").Cells
  If IsNumeric(c.Value) Then
    If c.Value < 0 Then
        c.Interior.Color = vbRed
          c.Font.Color = vbWhite
    End If
    If c.Value >= 0 Then
        c.Interior.Color = RGB(247, 150, 70)
          c.Font.Color = vbBlack
    End If
    If c.Value >= 0.2 Then
        c.Interior.Color = vbYellow
          c.Font.Color = vbBlack
    End If
    If c.Value >= 0.3 Then
        c.Interior.Color = RGB(207, 255, 210)
          c.Font.Color = vbBlack
    End If
    If c.Value >= 0.4 Then
        c.Interior.Color = vbGreen
          c.Font.Color = vbBlack
    End If
End If
Next

ton fichier est lent et manque de souplesse (zones en dur...), je regarde pour améliorer
 

ERIC S

XLDnaute Barbatruc
Re : Mises en forme conditionnelles par VBA

re

un exemple avec les listes sur un onglet

pour chaque liste tu dispose des cases avec contour
s'il y a des espaces entre enregistrement cela doit marcher quand même
pour les %, ils doivent être dans l'ordre évidemment

la ligne 3 est réservée à la couleur si vide
pour chaque mot clé, l acouleur du fond et de la police sera récupérée sur ta feuille 1

moins de 3 sec chez moi (ce n'est surement pas le plus rapide mais cela doit devenir utilisable)
 

Pièces jointes

  • MEF Es.xls
    773 KB · Affichages: 54

Nonno 94

XLDnaute Occasionnel
Re : Mises en forme conditionnelles par VBA

;);) Bonjour Eric S,

je viens de découvrir le fichier que vous m'avez adressé et celui-ci répond parfaitement à mon attente.
Je vous adresse donc un grand BRAVO et un grand MERCI pour ce code.
Le chien peut être fier de son maître et continuer à dormir paisiblement.
Dernière précision sur ce sujet : comment modifier le code pour que certaines mises en forme soient en gras ?
Quelque chose dans le "genre" ci-dessous, mais quoi exactement ?

Code:
         c.Font.Style = ?

A nouveau MERCI pour tout et bon après-midi.
Cordialement.

Nonno 94.
 

ERIC S

XLDnaute Barbatruc
Re : Mises en forme conditionnelles par VBA

Re

pour des questions comme cela, pense à l'enregistreur de macro

il donne

Selection.Font.Bold = True

à adapter

Range(col & i).Font.Bold=True

Sinon en réouvrant le fichier, j'ai vu que l'ancienne partie colonne I est restée en commentaire (' endébut de ligne, couleur verte), à supprimer bien sûr
 

Statistiques des forums

Discussions
312 345
Messages
2 087 459
Membres
103 547
dernier inscrit
matospi