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 !
Je voudrais mettre en forme des cellules selon la valeur saisie dans d'autres, malheureusement j'ai épuisé mon quota de mise en forme conditionnelle de 3.
Alors j'ai crée le code VBA suivant:
Private Sub Worksheet_Change(ByVal Target As Range)
' Multiple Conditional Format
Dim rng As Range
If Range("AM8").Value < 6 Then Range("A8:O8").Interior.ColorIndex = 0
If Range("AM8").Value >= 6 Then Range("A8:O8").Interior.ColorIndex = 10
End Sub
Sauf que j'ai 373 cellules concernées et autant de lignes concernées alors je ne souhaite pas réitérer ma formule 373 fois.
Comment je peux l'automatiser?
Et, si jamais et encore mieux, est-ce qu'il existe une solution autre que passer par VBA pour le faire?
Dim I As Integer
For I = 8 To 313
If Range("AM" & I).Value < 6 Then Range("A" & I & ":O" & I).Interior.ColorIndex = 0 _
Else Range("A" & I & ":O" & I).Interior.ColorIndex = 10
Next I
à adapter.
Pour se passer de VBA, passer à 2007 ou 2010 😛...
Bonne journée 😎
Euh par contre, j'obtiens bien un code VBA appliqué à des cellules pour en modifier leur couleur selon les valeurs obtenues de telles ou telles autres cellules mais si je rajoute une colonne ou ligne plus tard sur ma feuille, les noms changent et VBA ne suit pas.
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("AM8:AM" & Range("AM" & Application.Rows.Count).End(xlUp).Row)) Is Nothing Then
Range("A" & Target.Row & ":O" & Target.Row).Interior.ColorIndex = IIf(Range("AM" & Target.Row).Value < 6, 0, 10)
End If
End Sub
A mettre dans le code de la feuille concernée.
Cordialement
Ca ne marche pas. ou je n'y arrive pas. aujourd'hui j'ai ce code là:
Code:
Private Sub Worksheet_change(ByVal Target As Range)
Dim I As Integer
For I = 8 To 373
If Range("Q" & I).Value = "*" Then Range("Q" & I).Interior.ColorIndex = 15 _
Else: Range("Q" & I).Interior.ColorIndex = 0
If Range("AL" & I).Value >= 6 Then Range("A" & I & ":O" & I).Interior.ColorIndex = 16 _
Else: Range("A" & I & ":O" & I).Interior.ColorIndex = 0
If Range("AL" & I).Value >= 6 Then Range("P" & I).Interior.ColorIndex = 16 _
Else: If Range("Q" & I).Value = "*" Then Range("P" & I).Interior.ColorIndex = 15 _
Else: Range("P" & I).Interior.ColorIndex = 0
Next I
End Sub
Mais si je décide de rajouter des colonnes, le code ne s'adapte pas aux changements de nom de celles-ci. Du coup, "O" devenant "P", "P" devant "Q", etc., je me retrouve avec des couleurs sur des cellules où je n'en veux pas.
En nommant les 2 cellules Q8 et AL8, par exemple "Ref1" et "Ref2", on peut essayer le code suivant:
Code:
Private Sub Worksheet_change(ByVal Target As Range)
Dim Cell As Range
For Each Cell In Range("Ref1").Resize(373, 1)
If Cell.Value = "*" Then Cell.Interior.ColorIndex = 15 _
Else: Cell.Interior.ColorIndex = 0
Next
For Each Cell In Range("Ref2").Resize(373, 1)
If Cell.Value >= 6 Then
Range(Cells(Cell.Row, 1), Cells(Cell.Row, 15)).Interior.ColorIndex = 15
Cells(Cell.Row, 16).Interior.ColorIndex = 16
Else
Range(Cells(Cell.Row, 1), Cells(Cell.Row, 16)).Interior.ColorIndex = 0
End If
Next
End Sub
Les insertions ou suppressions de colonnes seront répercutées dans les noms Ref1 et Ref2.
En nommant les 2 cellules Q8 et AL8, par exemple "Ref1" et "Ref2", on peut essayer le code suivant:
Code:
Private Sub Worksheet_change(ByVal Target As Range)
Dim Cell As Range
For Each Cell In Range("Ref1").Resize(373, 1)
If Cell.Value = "*" Then Cell.Interior.ColorIndex = 15 _
Else: Cell.Interior.ColorIndex = 0
Next
For Each Cell In Range("Ref2").Resize(373, 1)
If Cell.Value >= 6 Then
Range(Cells(Cell.Row, 1), Cells(Cell.Row, 15)).Interior.ColorIndex = 15
Cells(Cell.Row, 16).Interior.ColorIndex = 16
Else
Range(Cells(Cell.Row, 1), Cells(Cell.Row, 16)).Interior.ColorIndex = 0
End If
Next
End Sub
Les insertions ou suppressions de colonnes seront répercutées dans les noms Ref1 et Ref2.
c'est déjà un bon pas en avant mais je n'arrive toujours pas à l'adapter pour que les couleurs s'adaptent automatiquement.
J'ai mis mon précédent fichier ci-joint. J'aimerais que le résultat soit identique à ce qu'il est aujourd'hui mais avec possibilité de rajouter des colonnes sans que mes couleurs ne soient affectées.
J'ai repris ton fichier initial et fait les modifs suivantes:
1 - jours fériés
Changement de la formule de calcul du jour de Pâques par une formule plus simple.
La plage de jours fériés a été nommée "Fer"
2 - Suppression de tous les calculs de jours de semaine en colonne AL car le calcul se fera directement dans la macro.
3 - En colonne Q, le caractère "*" se positionne avec la formule suivante:
Code:
=SI(ESTERREUR(EQUIV($P8;Fer;0));"";"*")
Une MFC applique la couleur grisée si la cellule contient "*"
4 - La cellule P8 a été nommée "Pivot" puisque c'est la date de base de tous les calculs. Elle se modifie en fonction de l'année choisie en AP8 avec une formule Date:
Code:
=DATE(an;1;1)
Une MFC est appliquée sur toute la colonne de dates pour mettre la cellule en grisé si c'est un jour Férié avec la formule:
Code:
=NON(ESTERREUR(EQUIV($P8;Fer;0)))
5 - La macro a été modifiée comme suit:
Code:
Private Sub Worksheet_change(ByVal Target As Range)
Dim Cell As Range
If Not Application.Intersect(Target, Range("an")) Is Nothing Then
For Each Cell In Range("Pivot").Resize(366, 1)
coul = IIf(Weekday(Cell.Value, vbMonday) > 5, 16, 0)
Range(Cells(Cell.Row, 1), Cells(Cell.Row, Cell.Column)).Interior.ColorIndex = coul
Next
End If
End Sub
Le if intersect sert à ne lancer le calcul que si l'on a modifié l'année.
Coul prend la valeur 16 ou 0 selon qu'il s'agit d'un WE ou un jour de semaine.
Puis on applique la couleur sélectionnée à toutes les cellules depuis la colonne 1 jusqu'à la colonne de la date Pivot.
Si un jour férié tombe un WE il sera en grisé léger comme un autre Jour férié puisque la MFC est prioritaire sur la couleur de fond. Si tu préfères qu'il soit en gris foncé comme un WE, il suffit d'ajouter la condition WE dans la MFC.
c'est parfait!!!!!!!! merci beaucoup. me reste plus qu'à essayer de comprendre ton code (pour mon propre apprentissage) et c'est bon. euh par contre, si je peux saouler un tout ptit peu encore, j'aurais préféré mettre le gris foncé comme tu dis mais je comprends pas comment tu appliques un style WE pour la MFC. j'ai office 2003. Enfin merci beaucoup!
- 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
Assurez vous de marquer un message comme solution pour une meilleure transparence.