Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

macro pour colorier ligne

  • Initiateur de la discussion Initiateur de la discussion matt31
  • 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 !

matt31

XLDnaute Occasionnel
Bonjour,

toujours accro au forum pour toute l'aide que j'y trouve. Encore merci à tout le monde, je souhaiterai savoir s'il est possible de faire une macro pour colorier une ligne en fonction du contenu d'une cellule.
Par exemple, si en F3 je mets "A" alors de A3 à E3, les cellules sont coloriées en gris.
Si je ne mets rien ou autre chose que "A" en F3 alors la ligne reste blanche.

Je ne peux pas utiliser de MFC car j'ai déjà 3 conditions sur les cellules en B et en C et je dois faire un copier coller depuis un autre fichier excel pour toutes les données que je place entre A et F. Cela efface la MFC et j'ai minimum 200 lignes chaque semaine.

Encore merci
 
Re : macro pour colorier ligne

Bonsoir
Voici une petite macro pour faire le job
à adapter à ton cas
Sub Colorie()
'Coloriage de lignes / 2 colonnes en fonction de la valeur de flag
Application.Calculation = xlCalculationManual
Application.ScreenUpdating = False
ActiveSheet.Cells.Interior.ColorIndex = xlNone
Dim Flag, K&, Rng As Range, Cll As Object
Flag = False
K = Cells(65536, 1).End(xlUp).Row
Set Rng = Range("A2:A" & K)
For Each Cll In Rng
Range(Cll.Address).Resize(1, 2).Interior.ColorIndex = IIf(Flag, 33, xlNone)
Flag = Not Flag
Next Cll
set rng =nothing
Application.Calculation = xlCalculationAutomatic
End Sub
Bon courage
Flyonets
 
Re : macro pour colorier ligne

Bonsoir,

regarde ceci, à utiliser dans le module de la feuille concernée :
Code:
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address <> "$F$3" Then Exit Sub
If Target = "A" Then Range("A3:E3").Interior.ColorIndex = 15
End Sub

bonne soirée
@+
 
Re : macro pour colorier ligne

Bonjour à tous
Une autre (dans le module de la feuille concernée) :
VB:
Private Sub Worksheet_Change(ByVal Cible As Range)
Dim plg, cel As Range
  Set plg = Intersect(Columns("F"), Cible, UsedRange)
  If Not plg Is Nothing Then
    With Application: .ScreenUpdating = 0: .Calculation = -4135: .EnableEvents = 0: End With
    For Each cel In plg.Cells
      If cel.Value = "A" Then cel.Offset(0, -5).Resize(1, 6).Interior.ColorIndex = 6 Else cel.Offset(0, -5).Resize(1, 6).Interior.ColorIndex = xlColorIndexNone
    Next
    With Application: .EnableEvents = 1: .Calculation = -4105: .ScreenUpdating = 1: End With
  End If
End Sub
ROGER2327
#5238


Dimanche 1er Merdre 138 (Accouchement de Sainte Jeanne, papesse, ST)
29 Floréal An CCXIX
2011-W20-3T16:22:28Z
 
Re : macro pour colorier ligne

Merci à vous 3, c'est parfait. 3 réponses pour une question, finalement le plus dur est de choisir la bonne macro...

J'ai choisi celle de Roger car la plus "facile" pour moi à comprendre.
Si je peux abuser encore un peu, comment faire pour ajouter une 2° condition? Je voudrais que pour B, toujours dans la même colonne, la cellule soit également grisée.

Merci
 
Re : macro pour colorier ligne

Re…
(…) comment faire pour ajouter une 2° condition? Je voudrais que pour B, toujours dans la même colonne, la cellule soit également grisée.

Merci
Deux possibilités :
VB:
Private Sub Worksheet_Change(ByVal Cible As Range)
Dim plg, cel As Range
  Set plg = Intersect(Columns("F"), Cible, UsedRange)
  If Not plg Is Nothing Then
    With Application: .ScreenUpdating = 0: .Calculation = -4135: .EnableEvents = 0: End With
    For Each cel In plg.Cells
      If cel.Value = "A" Or cel.Value = "B" Then cel.Offset(0, -5).Resize(1, 6).Interior.ColorIndex = 6 Else cel.Offset(0, -5).Resize(1, 6).Interior.ColorIndex = xlColorIndexNone
    Next
    With Application: .EnableEvents = 1: .Calculation = -4105: .ScreenUpdating = 1: End With
  End If
End Sub
VB:
Private Sub Worksheet_Change(ByVal Cible As Range)
Dim plg, cel As Range
  Set plg = Intersect(Columns("F"), Cible, UsedRange)
  If Not plg Is Nothing Then
    With Application: .ScreenUpdating = 0: .Calculation = -4135: .EnableEvents = 0: End With
    For Each cel In plg.Cells
      Select Case cel.Value
      Case "A", "B"
        cel.Offset(0, -5).Resize(1, 6).Interior.ColorIndex = 6
      Case Else
        cel.Offset(0, -5).Resize(1, 6).Interior.ColorIndex = xlColorIndexNone
      End Select
    Next
    With Application: .EnableEvents = 1: .Calculation = -4105: .ScreenUpdating = 1: End With
  End If
End Sub
ROGER2327
#5239


Dimanche 1er Merdre 138 (Accouchement de Sainte Jeanne, papesse, ST)
29 Floréal An CCXIX
2011-W20-3T19:35:12Z
 
Re : macro pour colorier ligne

je te remercie beaucoup.

en fait j'oubliais de mettre cel.Value après le Or...
Quand je dis que je suis pas doué en macro...

Là je pense que mon fichier sera complet... jusqu'à la prochaine modification...

Merci mille fois
 
Re : macro pour colorier ligne

on pense avoir fini et en fait jamais...

je n'avais pas pensé à un gros détail. Les cellules que je veux colorier par la macro sont protégées car plusieurs personnes utilisent ce fichier.
Existe-t-il un moyen tout en gardant la protection de faire appliquer cette macro?

Merci encore et encore
 
Re : macro pour colorier ligne

Bonjour matt31
Deux possibilités s'offrent à vous :
  1. Lors de la protection de la feuille par une procédure, vous écrivez
    Code:
        Sheets("Nom_de_la_feuille_à_protéger").Protect UserInterfaceOnly:=True
    ce qui a pour effet d'empêcher les modifications indésirables par l'utilisateur tout en permettant au code de s'exécuter sur les cellules protégées.

  2. Vous ôtez temporairement la protection de la feuille pour permettre l'exécution du code. Par exemple :
    VB:
    Private Sub Worksheet_Change(ByVal Cible As Range)
    Dim plg, cel As Range
      Set plg = Intersect(Columns("F"), Cible, UsedRange)
      If Not plg Is Nothing Then
        On Error GoTo E
        With Application: .ScreenUpdating = 0: .Calculation = -4135: .EnableEvents = 0: End With
        Me.Unprotect
        For Each cel In plg.Cells
          If cel.Value = "A" Or cel.Value = "B" Then cel.Offset(0, -5).Resize(1, 6).Interior.ColorIndex = 6 Else cel.Offset(0, -5).Resize(1, 6).Interior.ColorIndex = xlColorIndexNone
        Next
    E:  Me.Protect
        With Application: .EnableEvents = 1: .Calculation = -4105: .ScreenUpdating = 1: End With
      End If
    End Sub
    Bien entendu, s'il y a un mot de passe, on écrira
    VB:
    Me.Unprotect Password:="Le_mot_de_passe"
    '   code...
    Me.Protect Password:="Le_mot_de_passe"
ROGER2327
#5241


Lundi 2 Merdre 138 (Le Moutardier du Pape, V)
30 Floréal An CCXIX
2011-W20-4T15:24:48Z
 
Dernière édition:
- 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

Réponses
3
Affichages
352
Réponses
7
Affichages
154
Réponses
5
Affichages
158
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…