Microsoft 365 Couleur Police sur grand nombre de cellules

eric72

XLDnaute Accro
Bonjour à tous,
Je rencontre un souci pour changer la couleur de la police d'un grand nombre de cellules en fonction de la valeur d'un grand nombre de cellules également, je m'explique:
- j'ai un planning avec huit equipes et huit tranche d'heures par équipe, j'ai des cellules (exemple e13) dans lesquelles je mets un "x" pour changer la couleur de police d'une plage (exemple h8:m14), jusque là pas de souci ou avec une MFC ou avec une macro qui se déclenche avec le
Private Sub Worksheet_Change(ByVal Target As Range), le problème est que, compte tenu du nombre de plages concernées cela devient lourd mais j'imagine qu'il y a une solution générique pour traiter toutes les cellules avec un "x" (exemple e13,q13,ac13) et cela pour toutes les tranches d'heures mais je ne trouve pas mon bonheur, l'un d'entre vous a-t-il la solution magique?
Merci beaucoup
 

Pièces jointes

  • test couleur.xlsm
    331.9 KB · Affichages: 6
Solution
Proposition :
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
'
Dim MaCellule As Range
Dim MaValeur As Integer

    If Target.Cells.Count <> 1 Then Exit Sub                    ' Si plus d'une cellule modifiée, on sort
    If Target.Row < 13 Or Target.Column > 65 Then Exit Sub      ' Si on est au-dessus ou à droite du tableau, on sort
    If Target.Column Mod 12 <> 5 Then Exit Sub                  ' Si on n'est pas dans la bonne colonne, on sort
    If (Target.Row + 1) Mod 7 > 1 Then Exit Sub                 ' Si on n'est pas sur la bonne ligne, on sort

    Set MaCellule = Target.Offset(-((Target.Row + 1) Mod 7), 0) ' On détermine la première des deux cellules (exemple : E13 pour la plage E13:14)

    MaValeur =...

TooFatBoy

XLDnaute Barbatruc
Bonjour,

Une proposition :
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Cells.Count <> 1 Then Exit Sub
    If Target.Column < 5 Or Target.Column > 65 Or (Target.Column - 5) Mod 12 <> 0 Then Exit Sub
    If Target.Row < 13 Or Target.Row > 454 Or (Target.Row - 13) Mod 7 <> 0 Then Exit Sub
    If Target.Value = "x" Then
        Target.Offset(-5, 3).Resize(7, 6).Font.Color = RGB(0, 176, 80)
    Else
        Target.Offset(-5, 3).Resize(7, 6).Font.Color = RGB(0, 0, 0)
    End If
End Sub
 

eric72

XLDnaute Accro
Bonjour,

Une proposition :
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Cells.Count <> 1 Then Exit Sub
    If Target.Column < 5 Or Target.Column > 65 Or (Target.Column - 5) Mod 12 <> 0 Then Exit Sub
    If Target.Row < 13 Or Target.Row > 454 Or (Target.Row - 13) Mod 7 <> 0 Then Exit Sub
    If Target.Value = "x" Then
        Target.Offset(-5, 3).Resize(7, 6).Font.Color = RGB(0, 176, 80)
    Else
        Target.Offset(-5, 3).Resize(7, 6).Font.Color = RGB(0, 0, 0)
    End If
End Sub
Bonjour TooFatBoy,

Merci beaucoup pour la réponse, cependant j'ai une question si je souhaite faire la même chose avec la couleur noire en cochant la case du dessous (exemple e14), je ne peux pas cumuler un autre code dans
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
à moins que!!!
Pour info je ne peux pas ouvrir le fichier joint
Merci beaucoup
 

TooFatBoy

XLDnaute Barbatruc
si je souhaite faire la même chose avec la couleur noire en cochant la case du dessous (exemple e14), je ne peux pas cumuler un autre code
C'est bizarre, mais je m'attendais un peu à cette question... 😅

Il faudrait définir tes besoins complets.
- texte vert quand on met un "x" dans E13,
- texte noir quand on met un "x" dans E14,
- que faire quand il n'y a aucun "x" ???
- que faire quand il y a deux "x" ???
 

eric72

XLDnaute Accro
C'est bizarre, mais je m'attendais un peu à cette question... 😅

Il faudrait définir tes besoins complets.
- texte vert quand on met un "x" dans E13,
- texte noir quand on met un "x" dans E14,
- que faire quand il n'y a aucun "x" ???
- que faire quand il y a deux "x" ???
Tu commences à bien me connaitre 🤣
si aucun "x", alors couleur d'origine (rouge)
si "x" en (exemple e13), alors vert
si "x" en (exemple e14), alors noir
si on supprime "x" en e14, alors vert
J'espère être assez explicite pour une fois!!!
Merciiiiiii
 

TooFatBoy

XLDnaute Barbatruc
Proposition :
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
'
Dim MaCellule As Range
Dim MaValeur As Integer

    If Target.Cells.Count <> 1 Then Exit Sub                    ' Si plus d'une cellule modifiée, on sort
    If Target.Row < 13 Or Target.Column > 65 Then Exit Sub      ' Si on est au-dessus ou à droite du tableau, on sort
    If Target.Column Mod 12 <> 5 Then Exit Sub                  ' Si on n'est pas dans la bonne colonne, on sort
    If (Target.Row + 1) Mod 7 > 1 Then Exit Sub                 ' Si on n'est pas sur la bonne ligne, on sort

    Set MaCellule = Target.Offset(-((Target.Row + 1) Mod 7), 0) ' On détermine la première des deux cellules (exemple : E13 pour la plage E13:14)

    MaValeur = -(MaCellule.Value = "x") - 2 * (MaCellule.Offset(1, 0).Value = "x")
    Select Case MaValeur
    Case 0
        MaCellule.Offset(-5, 3).Resize(7, 6).Font.Color = RGB(255, 0, 0)    ' Rouge
    Case 1
        MaCellule.Offset(-5, 3).Resize(7, 6).Font.Color = RGB(0, 176, 80)   ' Vert
    Case 2
        MaCellule.Offset(-5, 3).Resize(7, 6).Font.Color = RGB(0, 0, 0)      ' Noir
    Case 3
        MaCellule.Offset(-5, 3).Resize(7, 6).Font.Color = RGB(0, 0, 255)    ' Bleu
    End Select

End Sub
 

eric72

XLDnaute Accro
Proposition :
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
'
Dim MaCellule As Range
Dim MaValeur As Integer

    If Target.Cells.Count <> 1 Then Exit Sub                    ' Si plus d'une cellule modifiée, on sort
    If Target.Row < 13 Or Target.Column > 65 Then Exit Sub      ' Si on est au-dessus ou à droite du tableau, on sort
    If Target.Column Mod 12 <> 5 Then Exit Sub                  ' Si on n'est pas dans la bonne colonne, on sort
    If (Target.Row + 1) Mod 7 > 1 Then Exit Sub                 ' Si on n'est pas sur la bonne ligne, on sort

    Set MaCellule = Target.Offset(-((Target.Row + 1) Mod 7), 0) ' On détermine la première des deux cellules (exemple : E13 pour la plage E13:14)

    MaValeur = -(MaCellule.Value = "x") - 2 * (MaCellule.Offset(1, 0).Value = "x")
    Select Case MaValeur
    Case 0
        MaCellule.Offset(-5, 3).Resize(7, 6).Font.Color = RGB(255, 0, 0)    ' Rouge
    Case 1
        MaCellule.Offset(-5, 3).Resize(7, 6).Font.Color = RGB(0, 176, 80)   ' Vert
    Case 2
        MaCellule.Offset(-5, 3).Resize(7, 6).Font.Color = RGB(0, 0, 0)      ' Noir
    Case 3
        MaCellule.Offset(-5, 3).Resize(7, 6).Font.Color = RGB(0, 0, 255)    ' Bleu
    End Select

End Sub
Re
Top de chez top comme d'habitude, merci beaucoup une nouvelle fois et bonne digestion 🙏
Bonne soirée
 

TooFatBoy

XLDnaute Barbatruc
Remarque bien que ce n'est pas parfait !

Par exemple, si on sélectionne toutes les cellules du tableau et qu'on appuie sur <Suppr>, toutes les cellules de type E13:E14 sont alors vides, mais la couleur du texte des cellules associées (H8:H14) ne sont pas modifiées en conséquence... :(
 

eric72

XLDnaute Accro
Remarque bien que ce n'est pas parfait !

Par exemple, si on sélectionne toutes les cellules du tableau et qu'on appuie sur <Suppr>, toutes les cellules de type E13:E14 sont alors vides, mais la couleur du texte des cellules associées (H8:H14) ne sont pas modifiées en conséquence... :(
par contre je viens de m'apercevoir d'un autre problème, lorsque je saisie une semaine en aa4, je récupère le planning qui a été archivé auparavant, du coup les "X" apparaissent bien mais les couleurs ne sont plus adaptées, l'événement Change ne se déclenche pas, aie!!!
 

Discussions similaires

Réponses
34
Affichages
1 K
Réponses
17
Affichages
1 K

Statistiques des forums

Discussions
314 705
Messages
2 112 075
Membres
111 410
dernier inscrit
yomeiome