Macro pour colorier des lignes

[Fermé]
Signaler
Messages postés
17
Date d'inscription
lundi 25 mars 2013
Statut
Membre
Dernière intervention
2 juillet 2013
-
Messages postés
16506
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
16 septembre 2021
-
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

Messages postés
16506
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
16 septembre 2021
3 220
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 ?
Messages postés
16506
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
16 septembre 2021
3 220
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
Messages postés
17
Date d'inscription
lundi 25 mars 2013
Statut
Membre
Dernière intervention
2 juillet 2013

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
Messages postés
16506
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
16 septembre 2021
3 220
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)