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

Usine à gaz

XLDnaute Barbatruc
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

  • 0 MFC Fond police_test.xlsm
    228.2 KB · Affichages: 2

sylvanu

XLDnaute Barbatruc
Supporter XLD
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

  • 0 MFC Fond police_test (1).xlsm
    221.5 KB · Affichages: 4

Usine à gaz

XLDnaute Barbatruc
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
:)
 

patricktoulon

XLDnaute Barbatruc
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
 

patricktoulon

XLDnaute Barbatruc
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
 

patricktoulon

XLDnaute Barbatruc
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 ;)
 

Discussions similaires

Statistiques des forums

Discussions
315 097
Messages
2 116 186
Membres
112 679
dernier inscrit
Yupanki