Coloration de lignes en fonction du contenu d'une colonne

Bonjour,

J'ai effectué pas mal de recherches sur le net pour essayer de trouver une macro qui me permettrait de colorer certaines lignes en fonction d'un critère présent sur une colonne. La mise en forme conditionnelle ne me convient pas car les variables de la colonne en question varient très souvent et l'utilisateur final n'est pas assez à l'aise sur Excel pour les faire évoluer via des mise en formes conditionnelles.

Je vous explique l'idéal que je souhaiterai atteindre : Aujourd'hui je dois affecter des tâches journalières (un onglet par jour pour 5 jours ouvrés) à des salariés variables et j'aimerai être repérant pour chaque salarié en fonction d'un code couleur qui lui serait propre sur la semaine. En gros, si je colore "toto" en jaune sur mon onglet de paramétrage, j'aimerai qu'il me colore les lignes "toto" en jaune dans les 5 onglets journaliers.

J'ai réussi à trouver une macro qui répond à peu près à mes besoins. C'est le "à peu près" qui ne me convient pas en terme d'utilisation :-). En effet, j'aimerais que la macro se lance sur les onglets concernés soit toute seul, soit via un bouton. Pour l'instant, elle se lance sur la ligne concernée par la cellule modifiée. Et donc il faut aller cliquer sur chaque cellule du tableau pour que la macro s'applique... donc elle perd un peu d'intérêt. Les couleurs définies sont écrites en dur dans le code et retrouvées via un numéro de couleur et non pas par un code couleur variable par macro en fonction de la couleur de la cellule choisie par l'utilisateur. Ce dernier point me dérange beaucoup moins.

Je pense avoir trouvé le souci qui se situe au niveau du code suivant et je ne sais pas quoi codé à la place... la faiblesse de mes compétences VBA expliquant cela... :

- If Not Application.Intersect(Target, Range("A1:K" & Dl)) Is Nothing Then ...

Dans "thisworkbook", j'ai mis la macro ci-dessous et dans les autres onglets à colorer j'ai mis "option explicit" (je ne sais pas à quoi ça sert mais cela fonctionne comme ça :-). Ci-dessous la macro simplifiée avec un nombre de couleur réduit pour l'exemple.

Option Explicit
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
Application.Volatile
'Déclaration des variables
Dim couleurs(), Ligne%, Dl%, Couleur%
Dl = Range("A" & Rows.Count).End(xlUp).Row 'Derniére ligne remplie
If Not Application.Intersect(Target, Range("A1:K" & Dl)) Is Nothing Then 'Sur changement d'une cellue en colonne B (de la ligne 12 à la dernière)
Ligne = Target.Row 'N° de la ligne concernée
Couleur = Cells(Ligne, 11)
Select Case Couleur 'Choix de la couleur
Case Is = 1
Range(Cells(Ligne, 1), Cells(Ligne, 11)).Interior.Color = RGB(146, 208, 80)
Case Is = 2
Range(Cells(Ligne, 1), Cells(Ligne, 11)).Interior.Color = RGB(151, 71, 6)
Case Else
Range(Cells(Ligne, 1), Cells(Ligne, 11)).Interior.Color = RGB(255, 255, 255)
End Select
End if
Exit Sub
End Sub

Je joins un exemple.

Merci pour votre aide :-)

Avec la pièce jointe c'est mieux...

Bonjour,

Merci de déposer un fichier sans données personnelles SVP

A+

oups je n'avais pas tout effacé...

50exemple.xlsm (72.25 Ko)

Re

Merci

Sinon pourquoi ne pas mettre le nom directement dans la cellule en couleur, ce serait plus simple pour le code

A+

Bonjour,

je ferais ceci :
- Supprimez la feuille 1 contenant vos couleurs
- Supprimez les modules 1 et 2 dans l'éditeur VBA
- dans la feuille Parametres, colonne A, vous mettez vos noms et la couleur choisie sur vos noms

dans Thisworkbook, utiliser ce code qui appliquera la couleur dès que vous choisirez un nom en colonne I

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
Dim dl As Integer, ligne As Integer
Dim cel As Range

If ActiveSheet.Name = "PARAMETRES" Then Exit Sub
dl = Range("A" & Rows.Count).End(xlUp).Row 'Derniére ligne remplie
For Each cel In Range("I2:I" & dl)
    On Error Resume Next
    ligne = Sheets("Parametres").Range("A:A").Find(cel, LookIn:=xlValues, lookat:=xlWhole).Row
    If ligne > 0 Then
        Range(Cells(cel.Row, 1), Cells(cel.Row, 11)).Interior.Color = Sheets("Parametres").Range("A" & ligne).Interior.Color
    End If
    Ligne = 0
Next cel
End sub

Autre chose : pour votre liste de validation nommée "accompagnateur", modifiez la formule dans le gestionnaire de noms --> =DECALER(PARAMETRES!$A$2;;;NBVAL(PARAMETRES!$A:$A)-1)

Rem : Lorsque vous postez un code, veillez à utiliser les balises de code en cliquant sur l'icone </> dans la barre de menu et collant votre code dans la fenêtre. Pour votre 1er post, je suppose que c'est BrunoM45 qui a corrigé.

Cordialement

Edit : oups Bruno, désolé... je n'avais pas vu que tu avais reposté. Mais même idée !

Salut Dan

Ca fait plaisir de te croiser même idée effectivement

Super merci cela fonctionne!

En effet, votre solution est idéale c'est ce que je n'avais pas réussi à trouver sur le net. je n'avais réussi qu'à trouvé la solution avec un code saisi en dur...

Pouvez-vous me transmettre toutes vos compétences via une clé usb que je puisse les intégrer dans mon cerveau ? :-)

Merci pour aide et votre réactivité

Rechercher des sujets similaires à "coloration lignes fonction contenu colonne"