Macro pour colorier des lignes

Fermé
ssboo Messages postés 17 Date d'inscription lundi 25 mars 2013 Statut Membre Dernière intervention 2 juillet 2013 - 2 juil. 2013 à 10:06
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 - 2 juil. 2013 à 14:04
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.
A voir également:

2 réponses

michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
2 juil. 2013 à 12:35
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
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
2 juil. 2013 à 13:01
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
ssboo Messages postés 17 Date d'inscription lundi 25 mars 2013 Statut Membre Dernière intervention 2 juillet 2013
2 juil. 2013 à 13:18
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
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
2 juil. 2013 à 14:04
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