Changement de couleur de plusieurs cellule en fonction des données d'une cellule

cethan

XLDnaute Nouveau
Bonjour,

Je pratique excel depuis un certain temps à un niveau basic, et j'aimerai aujourd'hui améliorer les tableaux que j'utilise. Jusqu'à présent j'ai toujours trouvé les réponses à mes questions sur ce forum, mais aujourd'hui je reste face à un problème:

J'utilise un tableau de planning dans le lequel, en face de chaque personne, il y a 3 colonnes par jour. la première pour indiquer l'heure de début, la deuxième pour indiquer l'heure de fin, et surtout la troisième pour préciser si cette personne a été absente.

Le type d'absence peut être différente (maladie, accident, congés payés...) , et il y a une liste déroulante des différentes possibilité d'absence. Cette liste est faite grâce à la validation des données.

J'aimerai qu'en fonction du choix d'absence que l'on a sélectionné, les 3 cellules correspondantes (heure de début, heure de fin, et motif d'absence) prenne une couleur. Par exemple vert pour la maladie, bleu pour l'accident de travail, jaune pour les congés payés, rouge pour absence injustifié.... Et que si il n'y a pas d'absence , tout reste sans couleur.

Après avoir essayé plusieurs méthode, soit je n'y arrive pas, soit le résultat ne correspond pas à ce que j'aimerai.

Pourriez-vous m'aider? merci par avance du temps que vous pourrez m'accorder
 

VDAVID

XLDnaute Impliqué
Re : Changement de couleur de plusieurs cellule en fonction des données d'une cellule

Un test en attendant plus de précisions
Le code est à modifier en fonction de tes plages de valeurs. Les cellules de B19 à B22 représentent la couleur de chaque type d'absence; elles changent en fonction de leur valeur 2 équivaut à blanc;3 équivaut à rouge etc...
En espérant t'avoir aidé!
 

Pièces jointes

  • Test4.xls
    25 KB · Affichages: 210
  • Test4.xls
    25 KB · Affichages: 222
  • Test4.xls
    25 KB · Affichages: 215

cethan

XLDnaute Nouveau
Re : Changement de couleur de plusieurs cellule en fonction des données d'une cellule

Merci beaucoup, je n'attendais pas une réponse aussi rapide !
Alors ça correspond quasiment à ce que je voudrais faire, cependant la couleur correspondante au type d'absence sera indiquée en bas du tableau de planning en légende, directement en fond de la case correspondant au type d'absence. Comment faudrait t 'il faire? Je joins un fichier d'exemple, désolé de ne pas y avoir pensé avant, c'est que mes explications n’étaient pas très claires. J'ai is en feuille 2, le tableau très simplifié de mes planning mais dans l'ordre ou il sera au final.
 

Pièces jointes

  • test planning en feuille 2.xlsm
    18.6 KB · Affichages: 142

VDAVID

XLDnaute Impliqué
Re : Changement de couleur de plusieurs cellule en fonction des données d'une cellule

Re-Bonsoir,
N'ayant pas accès à excel je pourrai te répondre demain si personne d'autre ne se manifeste !
Cependant, au vue de tes explications, il te suffit, je pense, de modifier la deuxième plage de données de la fonction target pour les faire correspondre au bas du tableau de planning.
Si tu n'y arrives pas, je regarderais ton fichier exemple demain de toutes façons donc ne t'en fais pas ! ^^
Bonne soirée !
 

VDAVID

XLDnaute Impliqué
Re : Changement de couleur de plusieurs cellule en fonction des données d'une cellule

Bonjour,
Je suis repartis de ton exemple, en modifiant quelques données (Par exemple la légende en mettant juste les abréviations correpondants à tes listes de validation, ce qui me permet de simplifier énormément le code).
J'ai mis des commentaires dans le code pour que tu puisses l'adapter à ton vrai fichier.
Si tu as un autre soucis n'hésite pas !
 

Pièces jointes

  • Test4(1).xls
    32 KB · Affichages: 139
  • Test4(1).xls
    32 KB · Affichages: 135
  • Test4(1).xls
    32 KB · Affichages: 117

cethan

XLDnaute Nouveau
Re : Changement de couleur de plusieurs cellule en fonction des données d'une cellule

Merci VDAVID,

Malheureusement, dans la légende je ne peux pas laisser uniquement les abréviations, il est affiché et visible de tout le monde et doit donc est compris par tout le monde, raison pour laquelle je met une légende. En faite le vrai tableau permet de faire le planning de 40 personnes, c'est pour cela que j'utilise des abréviations, pour gagner la place, mais je suis quant même tenu de laisser la signification des ces abréviations. Et tel qu'est conçu mon tableau, l'abréviation et sa signification sont dans la même case.
 

VDAVID

XLDnaute Impliqué
Re : Changement de couleur de plusieurs cellule en fonction des données d'une cellule

Re,
Excuses-moi, en fait le code n'est pas compliqué même en gardant ta mise en forme !
Un autre test, dis moi si ça te va ! :)
 

Pièces jointes

  • Test4(1).xls
    33.5 KB · Affichages: 126
  • Test4(1).xls
    33.5 KB · Affichages: 157
  • Test4(1).xls
    33.5 KB · Affichages: 154

cethan

XLDnaute Nouveau
Re : Changement de couleur de plusieurs cellule en fonction des données d'une cellule

Merci, ça a l'air de fonctionner nickel, juste un bug: quant je veux tout effacer en faisant une sélection de toutes les cases et appuyant sur la toucher "del" afin de recommencer un nouveau planning pour la semaine suivante, une fenêtre s'ouvre :
Erreur d’exécution : '13'
Incompatibilité de type
Est-ce qu'on peux résoudre ce problème ou est-ce qu'il faudra que je supprime chaque entrée individuellement?
 

VDAVID

XLDnaute Impliqué
Re : Changement de couleur de plusieurs cellule en fonction des données d'une cellule

Re,
Remplace le code existant par :

Private Sub Worksheet_Change(ByVal Target As Range)
On Error GoTo Finish
If Not Intersect(Target, Range("B4:B6,E4:E6,H4:H6,K4:K6,N4:N6,Q4:Q6,T4:T6")) Is Nothing Then 'Ici que tu déclares les cellules où le changement de couleur est effectué en fonction de leur valeur [En gardant la même synthaxe]
Dim Cel As Range
Dim myRange As Range
Set myRange = Range("C11:O11") 'C'est içi que tu définis la plage de données où se trouve ta légende
For Each Cel In myRange
If Mid(Cel.Value, 1, 2) = Target.Value Then
x = Target.Row
y = Target.Column
Range(Cells(x, y), Cells(x, y).Offset(0, 2)).Interior.ColorIndex = Cel.Interior.ColorIndex
If Target.Value = "" Then
Range(Target, Target.Offset(0, 2)).Interior.ColorIndex = 2
End If
Exit Sub
End If
Next Cel
End If
Finish:
End Sub

Pour supprimer sans toucher à la présentation (Couleurs des cellules)

Ou:
Private Sub Worksheet_Change(ByVal Target As Range)
On Error GoTo Finishless
If Not Intersect(Target, Range("B4:B6,E4:E6,H4:H6,K4:K6,N4:N6,Q4:Q6,T4:T6")) Is Nothing Then 'Ici que tu déclares les cellules où le changement de couleur est effectué en fonction de leur valeur [En gardant la même synthaxe]
Dim Cel As Range
Dim myRange As Range
Set myRange = Range("C11:O11") 'C'est içi que tu définis la plage de données où se trouve ta légende
For Each Cel In myRange
If Mid(Cel.Value, 1, 2) = Target.Value Then
x = Target.Row
y = Target.Column
Range(Cells(x, y), Cells(x, y).Offset(0, 2)).Interior.ColorIndex = Cel.Interior.ColorIndex
If Target.Value = "" Then
Range(Target, Target.Offset(0, 2)).Interior.ColorIndex = 2
End If
Exit Sub
End If
Next Cel
End If
GoTo Finish
Finishless:
Range("B4:T6").Interior.ColorIndex = 0
Finish:
End Sub
Pour enlever toutes les mises en formes de couleurs
 

cethan

XLDnaute Nouveau
Re : Changement de couleur de plusieurs cellule en fonction des données d'une cellule

Je pense qu'on y est presque, je ne vais t’embêter qu'une dernière fois.

Pour être précis, ce n'est pas la mise en forme de toutes les cases que je voudrais supprimer, mais juste celle des cases que j'ai sélectionné pour supprimer leur données.

Par exemple, si une personne a le même planning la semaine suivante, admettons qu'il ait 2 semaines de congés, dans ce cas, je ne sélectionnerai que le reste du tableau pour supprimer les données, et pour cette personne les couleurs devront rester.

Je pense que le changement est simple et qu'au lieu de mettre
Range("B4:T6").Interior.ColorIndex = 0
Il faudrait mettre quelque chose qui utilise seulement la sélection en cours pour en changer la couleur.

Je suis désolé je ne pense pas avoir le langage adapté, j'essaye d'apprendre à comprendre déjà.
 

cethan

XLDnaute Nouveau
Re : Changement de couleur de plusieurs cellule en fonction des données d'une cellule

C'est bon, j'ai trouver, j'ai tout simplement remplacé
Range("B4:T6").Interior.ColorIndex = 0
par :
Selection.Interior.ColorIndex = 0

Je pense que c'était la bonne méthode, si je me trompe n'hésite pas à le me dire.

En tout cas tu as été super, ta compréhension et ta rapidité, merci pour tout !!
 

VDAVID

XLDnaute Impliqué
Re : Changement de couleur de plusieurs cellule en fonction des données d'une cellule

Re,
Pas de soucis !

Un autre test en espérant que cela te conviendras parfaitement !

Private Sub Worksheet_Change(ByVal Target As Range)
On Error GoTo Finish
If Not Intersect(Target, Range("B4:B6,E4:E6,H4:H6,K4:K6,N4:N6,Q4:Q6,T4:T6")) Is Nothing Then 'Ici que tu déclares les cellules où le changement de couleur est effectué en fonction de leur valeur [En gardant la même synthaxe]
Dim Cel As Range
Dim myRange As Range
Set myRange = Range("C11:O11") 'C'est içi que tu définis la plage de données où se trouve ta légende
For Each Cel In myRange
If Mid(Cel.Value, 1, 2) = Target.Value Then
x = Target.Row
y = Target.Column
Range(Cells(x, y), Cells(x, y).Offset(0, 2)).Interior.ColorIndex = Cel.Interior.ColorIndex
If Target.Value = "" Then
Range(Target, Target.Offset(0, 2)).Interior.ColorIndex = 0
End If
End If
Next Cel
End If
Finish:
Dim Cell As Range
Dim myRange1 As Range
Set myRange1 = Range("B4:B6,E4:E6,H4:H6,K4:K6,N4:N6,Q4:Q6,T4:T6")
For Each Cell In myRange1
If Cell.Value = "" Then Range(Cell, Cell.Offset(0, 2)).Interior.ColorIndex = 0
Next Cell
End Sub
 

Discussions similaires

Membres actuellement en ligne

Statistiques des forums

Discussions
312 215
Messages
2 086 330
Membres
103 186
dernier inscrit
Eliyass