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

  • Initiateur de la discussion Initiateur de la discussion cethan
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

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
 
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

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

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 !
 
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

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.
 
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?
 
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
 
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à.
 
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 !!
 
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
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
2
Affichages
462
Retour