Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Mise en forme conditionnelle

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

ntan-évindi

XLDnaute Occasionnel
Bonjour à toutes et à tous,

Je cherche de l'aide pour faire évoluer une macro, c'est pour une mise en forme conditionnelle, voici celle que j'utilise pour une cellule:
Code:
Sub Formatcond(Cellule As Range)
 
    Dim idxColor As Integer
    idxColor = 0 ' Valeur par défaut
    
        'choix de la couleur en fonction de la valeur de la cellule
        Select Case Cellule.Value
            Case "SF": idxColor = 7
            Case "KJ": idxColor = 45
            Case "BF": idxColor = 6
            Case "MB": idxColor = 4
        End Select
        With Cellule.Interior
        'Si idxcolor est toujours = 0 c'est que la valeur de la cellule n'est pas dans les choix
        If idxColor = 0 Then
            .ColorIndex = 0
            .Pattern = xlGray8
            .PatternColorIndex = xlAutomatic
        Else
            .ColorIndex = idxColor
            .Pattern = xlSolid
        End If
        End With
        
End Sub

Maintenant, dans un autre classeur je souhaite mettre en forme un tableau qui commence à D15 pour se terminer à S243.

le raisonnement est le suivant:

pour la première ligne et ainsi de suite de ligne en ligne:
Si D15 = "Inf à 21h" mettre C15:R15 en jaune clair
Si D15 = "N'a pas travaillé" mettre C15:R15 en gris 25%
Si C15 = une valeur numérique qui peut aller de 1 à 3, mettre C15:R15 en Turquoise.

Je cherche quelles modifications je dois apporter à ma macro précédente, que j'ai déjà fait avec votre aide. Ou bien faut-il tout reprendre de zero (je suis presque sur de votre préconisation...).

D'avance je vous remercie de votre aide.

Cordialement.
Ntang
 
Re : Mise en forme conditionnelle

Bonjour ntang,

regarde le code ci-dessous si il peut t'aider, à tester et à adapter, en l'état s'applique à la feuille active du classeur actif :
Code:
Sub Formatcond()
    Dim idxColor As Integer, Cellule As Range
    For Each Cellule In Range("D15:S243")
        idxColor = 0 ' Valeur par défaut
        'choix de la couleur en fonction de la valeur de la cellule
        Select Case Cellule.Value
            Case "SF": idxColor = 7
            Case "KJ": idxColor = 45
            Case "BF": idxColor = 6
            Case "MB": idxColor = 4
        End Select
        With Cellule.Interior
        'Si idxcolor est toujours = 0 c'est que la valeur de la cellule n'est pas dans les choix
        If idxColor = 0 Then
            .ColorIndex = 0
            .Pattern = xlGray8
            .PatternColorIndex = xlAutomatic
        Else
            .ColorIndex = idxColor
            .Pattern = xlSolid
        End If
        End With
    Next Cellule
End Sub

bonne fin daprès midi
@+
 
Re : Mise en forme conditionnelle

Salut ntan-évindi et le forum Comme d'hab, pas sûr de tout comprendre : si D répond à une des deux conditions et que C répond elle aussi à la condition, on sera en quelle couleur ?
Tu ne peux reprendre ta macro, elle semble inadaptée au cas envisagé : ne connaissant que ce qui est fournit, une macro du type :
Code:
Sub test()
Dim Cel As Range

For Each Cel In Range("D15,D243")
'pour chaque cellule de la plage D15:D243
    Range(Cells(Cel.Row, "C"), Cells(Cel.Row, "R")).Interior.ColorIndex = xlNone
    'colorier la ligne de C à R en "automatique (RAZ)
    If Cel = "Inf à 21h" Then
    'si cellule="Inf à 21h", alors
        Range(Cells(Cel.Row, "C"), Cells(Cel.Row, "R")).Interior.ColorIndex = 36
        'Colorier la ligne de la cellule de C à R en jaune clair
    ElseIf Cel = "N'a pas travaillé" Then
    'sinon si cellule="N'a pas travaillé" alors
        Range(Cells(Cel.Row, "C"), Cells(Cel.Row, "R")).Interior.ColorIndex = 15
        'Colorier la ligne de la cellule de C à R en Gris 25%
    End If
    If 1 <= Cel.Offset(0, -1) And Cel.Offset(0, -1) <= 3 Then
    'si la cellule à gauche de D (C) est comprise entre 1 et 3 alors
        Range(Cells(Cel.Row, "C"), Cells(Cel.Row, "R")).Interior.ColorIndex = 8
        'Colorier la ligne de la cellule de C à R en turquoise
    End If
Next Cel
End Sub
Pas très différente de la tienne.
On donne la priorité de C sur D.

Remarques en passant : hormis la priorité de C par rapport à D, qu'on ne connaît pas :
- trois conditions, tu peux passer par MFC : changement de couleur en automatique, mais fichier plus lourd
- tu peux automatiser ça, avec une macro à lancement automatique (WorkSheet_Change) : changement de couleur en fonction de la valeur rentrée manuellement en C ou D, mais pas directement si c'est le résultat d'un calcul (faisable, mais pas sans infos).

Mais faut d'abord se poser la question de la priorité de la couleur de D sur C ou de C sur D
A+
 
Re : Mise en forme conditionnelle

Bonsoir à toutes et à tous,

Merci de vos réponse,
Pour Pierrot, la macro ne fonctionne que pour la colonne C, pour les autres cellules, elles deviennent sans fond (juste blanc)

Gorfael "comme d'hab, pas sur de tout comprendre" - est-ce que de manière habituelle, je suis confus dans mes demandes ou explication?

Pour répondre à tes questions, j'ai joins un petit morceau de fichier.

En effet les indications portées "Inf à 21h" ou "N'a pas travaillé" ne sont pas rentrées à la main, mais avec une formule.

En tout étant de cause merci à tous pour votre aide.

Cordialement.
Ntang
 

Pièces jointes

Re : Mise en forme conditionnelle

Salut ntan-évindi et le forum
"comme d'hab, pas sur de tout comprendre" - est-ce que de manière habituelle, je suis confus dans mes demandes ou explication?
J'ai pas marqué "comme d'hab, tu expliques mal" ?
La loi de Murphy nous explique que s'il y a plusieurs interprétations possibles, je prends toujours la plus mauvaise 😱

Là, par contre, avec ton bout de fichier, je coule :
- La base de tes lignes est turquoise ou blanche ?
- la colonne C devrait influencer la couleur, mais que si elle est comprise entre 1 et 3, mais il n'y a aucune ligne ayant un C entre 1 et 3 => donc, on ne sait pas si ça une influence ou pas, puisque toutes tes lignes sont en turquoise (ligne 42:46 par exemple)
On peut utiliser Worksheet_Change, puisque ta valeur en colonne D dépend directement de la colonne C : il suffit donc de filtrer les changement sur la colonne C

Ce que je comprends ou crois comprendre (^^) :
pour le fond des cellule de C à R (Ou Q ou S, ça c'est pas encore clair, pour moi)
- de base : turquoise
- C = 0 => gris
- 0<C<21 => jaune
Si c'est ça, une MFC axée sur la valeur de C suffit : 2 conditions :
pour la ligne 15, par exemple : tu sélectionnes C15
Condition 1
Case 1 : La formule est
Case 2 : =($C15<>"")*($C15=0)
Format : fond gris / police italique
Condition 2
Case 1 : La formule est
Case 2 : =(0<$C15)*($C15<21)
Format : fond jaune / police rouge

Un exemple, c'est bien, mais il faudrait :
- Une ligne dont C est vide
- Une ligne dont C est égale à 0
- Une ligne dont C est égale à 1
- Une ligne dont C est égale à 20
- Une ligne dont C est égale à 21
- Une ligne dont C est égale à 22
et que la colorisation soit correcte :
Lignes 44 et 45 de ton exemple ?
A+
 
Re : Mise en forme conditionnelle

Bonsoir Gorfael,
Je comprends mieux maintenant.
Pour ce qui est de la Mise en forme, j'ai pour l'instant solutionné le problème avec la MFC classique car je n'ai que 3 conditions.
Cependant si j'ai ma solution, je ne renonce pas pour autant à une macro, car mon plaisir c'est d'appuyer sur un bouton et de voir les cellules s'activer...
On prend son plaisir comme on peut!
Encore mercie,
Cordialement.
Ntang
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
6
Affichages
243
Réponses
4
Affichages
218
Réponses
5
Affichages
568
W
Réponses
2
Affichages
163
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…