Macro pour colorier des lignes

ssboo Messages postés 18 Statut Membre -  
michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   -
Bonjour à tous,

Je suis débutant dans VBA et j'essaie d'avoir une macro qui m'attribue des couleurs aux lignes suivant la valeur de la colonne "B" (voir fichier joint)

J'ai trouvé la Macro ci-dessous que j'ai un peu modifié mais le problème c'est qu'elle ne veut pas s'exécuter !!, d'après ce que j'ai compris elle utilise la mise en forme conditionnelle.

Voilà la macro:

Private Sub Worksheet_Change(ByVal Target As Range)
Dim Derlig As Long, X As Long
With Worksheets("Feuil1")
Application.ScreenUpdating = False
Derlig = .Range("B" & Rows.Count).End(xlUp).Row
For X = Derlig To 2 Step -1
If Not Intersect(["B", X], Target) Is Nothing And Target.Count = 1 Then
p = Application.Match(Target, [couleurs], 0)
If Not IsError(p) Then
Range(Target.Offset(0, -3), Target.Offset(0, 4)).Interior.ColorIndex = Range("couleurs")(p).Interior.ColorIndex
End If
End If
Next X
End With
End Sub

Je vous met une exemple de fichier que je dois traiter : https://www.cjoint.com/?0Gckeyn2JM7

Merci d'avance pour votre aide.

2 réponses

  1. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
     
    Bonjour,

    Pourquoi fais tu une boucle puisque à chaque donnée saisie colonne B l'événement worksheet.change te mettra la couleur désirée ?
    0
    1. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
       
      donc "à chaque saisie", proposition:

      Option Explicit
      
      Private Sub Worksheet_Change(ByVal Target As Range)
      Dim Derlig As Long, Lig As Byte, Col As Byte, Coloris As Range
      
           Application.ScreenUpdating = False
           Derlig = Range("B" & Rows.Count).End(xlUp).Row
           With Range("couleurs")
                Col = .Column
                Lig = .Row
           End With
           
           If Not Intersect(Target, Range("B2:B" & Derlig)) Is Nothing And Target.Count = 1 Then
                If Application.CountIf(Range("couleurs"), Target) = 1 Then
                     Set Coloris = Columns(Col).Find(Target, Cells(Lig - 1, Col), xlValues)
                     Range(Cells(Target.Row, "A"), Cells(Target.Row, "C")).Interior.ColorIndex = _
                     Coloris.Interior.ColorIndex
                End If
           End If
      
      End Sub
      
      0
  2. ssboo Messages postés 18 Statut Membre
     
    Bonjour Michel,

    Si j'ai rajouté une boucle c'était sûrement parce que je ne connais pas très bien ce type de macro

    Je voulais aussi te remercier pour ta réponse, mais j'ai juste un dernier problème !

    Quand j'essaie de l'exécuter, elle me sors l'onglet pour enregistrer une nouvelle Macro !! du coup elle n'applique pas les modifications ! je ne comprends pas d'où vient ce problème.

    Merci encore
    0
    1. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
       
      une macro événementielle doit être installée dans le module "feuil" ou tu désires travailler

      pour accéder
      clic droit sur le nom d'onglet
      visualiser le code

      ou dans l'éditeur VBA (alt+F11) sélectionnes le module
      ci joint ta pièce jointe
      https://www.cjoint.com/?3Gcn4ovMJnL

      pour apprendre le VBA
      site:
      http://www.info-3000.com/
      très sympa et pédagogique

      à lire
      https://bidou.developpez.com/article/VBA/
      très complet pour initier mais ca ne se lit pas comme un roman policier :o)
      0