Microsoft 365 Couleur Police sur grand nombre de cellules

  • Initiateur de la discussion Initiateur de la discussion eric72
  • Date de début Date de début

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 !

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

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 =...
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,

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
 
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" ???
 
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
 
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
 
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
 
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... 🙁
 
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!!!
 
- 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