XL 2019 colorer cellules sans utiliser de MFC (#post2)

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 !

Usine à gaz

XLDnaute Barbatruc
Supporter XLD
Bonjour à toutes et à tous 🙂

Ce #post fait suite à celui-ci : https://excel-downloads.com/threads/ne-pas-utiliser-les-mfc.20072995/#post-20557539
Résolu par mapomme a qui j'adresse un super "MERCI".

Les cellules J6 à J8 sont concernées
Pour ces cellules, j'ai fait des MFC pour les colorer selon leurs contenus :
=ET(H6<>"";CNUM(GAUCHE(H6;10))>AUJOURDHUI())
=ET(H6<>"";CNUM(GAUCHE(H6;10))<AUJOURDHUI())+1
=ET(H6<>"";DATEVAL(STXT(H6;9;2) & "/" & STXT(H6;6;2) & "/" & GAUCHE(H6;4))<=AUJOURDHUI()+1)
1672581306024.png

Ces MFC fonctionnent et permettent la coloration des cellules selon les dates contenues

Je souhaite ne plus utiliser de MFC et les remplacer par des codes vba mais je n'ai pas trouvé comment les coder.
Voudriez-vous m'aider encore une fois ?
En cas, je joins le fichier test.
Un grand merci à toutes et à tous...

Tous mes vœux de bonheur pour cette nouvelle année, prenez soin de vous.
🙂
 

Pièces jointes

Re,
Juste en rajoutant quelques lignes à la macro précédente :
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, [J2:J500]) Is Nothing Then
    Dim Couleur, Texte, Gras, Blanc, Noir, Rouge, Vert, Jaune
    Application.ScreenUpdating = False
    Blanc = vbWhite: Noir = vbBlack: Rouge = RGB(192, 0, 0): Vert = RGB(56, 87, 35): Jaune = RGB(255, 255, 204)
    Select Case Target
        Case "":                    Couleur = Blanc: Texte = Noir: Gras = False
        Case "Annulé":              Couleur = Rouge: Texte = Blanc: Gras = True
        Case "NPR":                 Couleur = Rouge: Texte = Blanc: Gras = True
        Case "RdV Fait":            Couleur = Vert: Texte = Blanc: Gras = True
        Case "RdV Fait Facturé":    Couleur = Vert: Texte = Blanc: Gras = True
        Case Else:                  Couleur = Blanc: Texte = Noir: Gras = False
    End Select
    If IsDate(Target) And Target <= Int(Now) + 1 Then
        Couleur = Rouge: Texte = Blanc: Gras = False
    Else
        Couleur = Jaune: Texte = Noir: Gras = False
    End If
    Target.Interior.Color = Couleur
    Target.Font.Color = Texte
    Target.Font.Bold = Gras
End If
End Sub
 

Pièces jointes

J'ai vu, enfin je pense.
c'est mieux avec le code modifié :
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, [J2:J500]) Is Nothing Then
    Dim Couleur, Texte, Gras, Blanc, Noir, Rouge, Vert, Jaune
    Application.ScreenUpdating = False
    Blanc = vbWhite: Noir = vbBlack: Rouge = RGB(192, 0, 0): Vert = RGB(56, 87, 35): Jaune = RGB(255, 255, 204)
    Select Case Target
        Case "":                    Couleur = Blanc: Texte = Noir: Gras = False
        Case "Annulé":              Couleur = Rouge: Texte = Blanc: Gras = True
        Case "NPR":                 Couleur = Rouge: Texte = Blanc: Gras = True
        Case "RdV Fait":            Couleur = Vert: Texte = Blanc: Gras = True
        Case "RdV Fait Facturé":    Couleur = Vert: Texte = Blanc: Gras = True
        Case Else:                  Couleur = Blanc: Texte = Noir: Gras = False
    End Select
    If IsDate(Target) And Target <= Int(Now) + 1 Then
        Couleur = Rouge: Texte = Blanc: Gras = False
'    Else
'        Couleur = Jaune: Texte = Noir: Gras = False
    End If
    Target.Interior.Color = Couleur
    Target.Font.Color = Texte
    Target.Font.Bold = Gras
End If
End Sub
🙂
 
Bonjour
c'est quand même formidable d'utiliser un If isdate..... après un select case
le tout dans un case true ça vous dirais?
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Intersect(Target, [J2:J500]) Is Nothing Then
        Dim Couleur, Texte, Gras, Blanc, Noir, Rouge, Vert, Jaune
        Application.ScreenUpdating = False
        Blanc = vbWhite: Noir = vbBlack: Rouge = RGB(192, 0, 0): Vert = RGB(56, 87, 35): Jaune = RGB(255, 255, 204)

        Select Case True
            Case IsDate(Target) And Target <= Now:: Couleur = Rouge: Texte = Blanc: Gras = True
            Case Target = "": Couleur = Blanc: Texte = Noir: Gras = False
            Case Target = "Annulé": Couleur = Rouge: Texte = Blanc: Gras = True
            Case Target = "NPR": Couleur = Rouge: Texte = Blanc: Gras = True
            Case Target = "RdV Fait": Couleur = Vert: Texte = Blanc: Gras = True
            Case Target = "RdV Fait Facturé": Couleur = Vert: Texte = Blanc: Gras = True
            Case Else: Couleur = Blanc: Texte = Noir: Gras = False
        End Select

        Target.Interior.Color = Couleur
        Target.Font.Color = Texte
        Target.Font.Bold = Gras
    End If
End Sub
 
ou encore on en supprime un et un autre fra pour les deux
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Intersect(Target, [J2:J500]) Is Nothing Then
        Dim Couleur, Texte, Gras, Blanc, Noir, Rouge, Vert, Jaune
        Application.ScreenUpdating = False
        Blanc = vbWhite: Noir = vbBlack: Rouge = RGB(192, 0, 0): Vert = RGB(56, 87, 35): Jaune = RGB(255, 255, 204)

        Select Case True
            Case IsDate(Target) And Target <= Now:: Couleur = Rouge: Texte = Blanc: Gras = True
            Case Target = "": Couleur = Blanc: Texte = Noir: Gras = False
            Case Target = "Annulé": Couleur = Rouge: Texte = Blanc: Gras = True
            Case Target = "NPR": Couleur = Rouge: Texte = Blanc: Gras = True
            Case InStr(1, Target, "RdV Fait"): Couleur = Vert: Texte = Blanc: Gras = True
            Case Else: Couleur = Blanc: Texte = Noir: Gras = False
        End Select

        Target.Interior.Color = Couleur
        Target.Font.Color = Texte
        Target.Font.Bold = Gras
    End If
End Sub
 
ou bien encore une petite reduction
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Intersect(Target, [J2:J500]) Is Nothing Then
        Dim Couleur, Texte, Gras, Blanc, Noir, Rouge, Vert, Jaune
        Application.ScreenUpdating = False
        Blanc = vbWhite: Noir = vbBlack: Rouge = RGB(192, 0, 0): Vert = RGB(56, 87, 35): Jaune = RGB(255, 255, 204)

        Select Case True
            Case (IsDate(Target) And Target <= Now) Or Target = "Annulé" Or Target = "NPR"
                Couleur = Rouge: Texte = Blanc: Gras = True
            Case InStr(1, Target, "RdV Fait"): Couleur = Vert: Texte = Blanc: Gras = True
            Case Else: Couleur = Blanc: Texte = Noir: Gras = False
        End Select

        Target.Interior.Color = Couleur
        Target.Font.Color = Texte
        Target.Font.Bold = Gras
    End If
End Sub
c'est bien le case true je trouve 😉
 
- 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

Retour