Changer la couleur d'un onglet EXCEL selon conditions
Résolu
Tom188
Messages postés
28
Date d'inscription
Statut
Membre
Dernière intervention
-
Tom188 Messages postés 28 Date d'inscription Statut Membre Dernière intervention -
Tom188 Messages postés 28 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
Je remplie via une formule plusieurs cellules par page. Si toutes ces cellules sont "valide" alors la couleur de l'onglet doit être verte.
Si une seule est "non valide" alors l'onglet doit être de couleur rouge
Si certaine ne sont pas rempli, l'onglet ne change pas de couleur.
Je souhaite faire cela via VBA.
M'avez vous un code simple pour cela ? Je suis un novice.
Je vous remercie
Je remplie via une formule plusieurs cellules par page. Si toutes ces cellules sont "valide" alors la couleur de l'onglet doit être verte.
Si une seule est "non valide" alors l'onglet doit être de couleur rouge
Si certaine ne sont pas rempli, l'onglet ne change pas de couleur.
Je souhaite faire cela via VBA.
M'avez vous un code simple pour cela ? Je suis un novice.
Je vous remercie
A voir également:
- Excel couleur onglet conditionnelle
- Mise en forme conditionnelle excel - Guide
- Liste déroulante excel - Guide
- Excel liste déroulante conditionnelle - Guide
- Somme si couleur excel - Guide
- Word et excel gratuit - Guide
10 réponses
Bon, t'as essayé un truc mais tu pars de loin, j'ai l'impression...
Colle ceci dans "ThisWorkbook" dans l'éditeur VBA :
Une macro est soit exécutée à la demande (Alt+F8 ou bouton), soit s'exécute automatiquement. Pour ce deuxième moyen, il y a des noms de procédures réservés correspondant à l'action qui la déclenche ; dans ce cas, tout changement de sélection dans une feuille.
On peut adapter le code pour que les onglets se mettent tous dans la bonne couleur lors de la sauvegarde uniquement...
PS : Salutations à pijaku
Colle ceci dans "ThisWorkbook" dans l'éditeur VBA :
Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range) If (ActiveSheet.Cells(9, 2) = "Valide" And ActiveSheet.Cells(12, 2) = "Valide") Then ActiveSheet.Tab.ColorIndex = 10 'vert ElseIf (ActiveSheet.Cells(9, 2) = "Non Valide" Or ActiveSheet.Cells(12, 2) = "Non Valide") Then ActiveSheet.Tab.ColorIndex = 3 'rouge Else ActiveSheet.Tab.ColorIndex = 1 'noir End If End Sub
Une macro est soit exécutée à la demande (Alt+F8 ou bouton), soit s'exécute automatiquement. Pour ce deuxième moyen, il y a des noms de procédures réservés correspondant à l'action qui la déclenche ; dans ce cas, tout changement de sélection dans une feuille.
On peut adapter le code pour que les onglets se mettent tous dans la bonne couleur lors de la sauvegarde uniquement...
PS : Salutations à pijaku
Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range) If (ActiveSheet.Cells(9, 2) = "VALIDE" And ActiveSheet.Cells(12, 2) = "VALIDE" And ActiveSheet.Cells(15, 2) = "VALIDE" And ActiveSheet.Cells(18, 2) = "VALIDE" And ActiveSheet.Cells(21, 2) = "VALIDE" And ActiveSheet.Cells(24, 2) = "VALIDE" And ActiveSheet.Cells(27, 2) = "VALIDE" And ActiveSheet.Cells(30, 2) = "VALIDE" And ActiveSheet.Cells(33, 2) = "VALIDE" And ActiveSheet.Cells(36, 2) = "VALIDE" And ActiveSheet.Cells(39, 2) = "VALIDE" And ActiveSheet.Cells(42, 2) = "VALIDE" And ActiveSheet.Cells(45, 2) = "VALIDE" And ActiveSheet.Cells(48, 2) = "VALIDE") Then ActiveSheet.Tab.ColorIndex = 10 'vert ElseIf (ActiveSheet.Cells(9, 2) = "NON VALIDE" Or ActiveSheet.Cells(12, 2) = "NON VALIDE" Or ActiveSheet.Cells(15, 2) = "NON VALIDE" Or ActiveSheet.Cells(18, 2) = "NON VALIDE" Or ActiveSheet.Cells(21, 2) = "NON VALIDE" Or ActiveSheet.Cells(24, 2) = "NON VALIDE" Or ActiveSheet.Cells(27, 2) = "NON VALIDE" Or ActiveSheet.Cells(30, 2) = "NON VALIDE" Or ActiveSheet.Cells(33, 2) = "NON VALIDE" Or ActiveSheet.Cells(36, 2) = "NON VALIDE" Or ActiveSheet.Cells(39, 2) = "NON VALIDE" Or ActiveSheet.Cells(42, 2) = "NON VALIDE" Or ActiveSheet.Cells(45, 2) = "NON VALIDE" Or ActiveSheet.Cells(48, 2) = "NON VALIDE") Then ActiveSheet.Tab.ColorIndex = 3 'rouge Else ActiveSheet.Tab.ColorIndex = 1 'noir End If End Sub
Mon résultat pour le moment.
Non je suis désolé, j'en serais incapable... L'informatique n'est pas mon domaine de compétences et n'ai jamais fait d'algorithme.
Cependant ce que vous m'avez donné est déjà pas mal.
Il faudrait que je l'adapte manuellement à chaque page EXCEL. Je doute que ce soit la meilleure façon mais si elle fonctionne, ça ira. Même si cela demande un peu plus de travail.
Au lieu de l'inscrire dans le WORKSHEET, je peux l'inscrire dans chaque page en adaptant ?
Cependant ce que vous m'avez donné est déjà pas mal.
Il faudrait que je l'adapte manuellement à chaque page EXCEL. Je doute que ce soit la meilleure façon mais si elle fonctionne, ça ira. Même si cela demande un peu plus de travail.
Au lieu de l'inscrire dans le WORKSHEET, je peux l'inscrire dans chaque page en adaptant ?
Bonjour,
Une syntaxe, peut être plus facile à adapter :
Cordialement,
Franck
Une syntaxe, peut être plus facile à adapter :
Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range) Dim RngPlageVal As Range, RngCel As Range Dim Valid As Integer, NonValid As Integer 'Ce Range peut être facilement adapté : Set RngPlageVal = Range("B9,B12,B15,B18, B21,B24,B27,B30,B33,B36,B39,B42,B45,B48") 'On va boucler sur toutes les cellules du Range et compter 'les "valide" et "non valide". For Each RngCel In RngPlageVal If RngCel.Value = "VALIDE" Then Valid = Valid + 1 If RngCel.Value = "NON VALIDE" Then NonValid = NonValid + 1 Next 'si le nombre de cellules valides = Nombre de cellule de notre plage 'Autrement dit : Si toutes les cellules de notre plage sont "valides" If Valid = RngPlageVal.Cells.Count Then 'alors vert ActiveSheet.Tab.ColorIndex = 10 'vert 'Si Une et Une seule cellule est Non Valide Alors ElseIf NonValid = 1 Then ActiveSheet.Tab.ColorIndex = 3 'rouge 'Dans tous les autres cas : Else ActiveSheet.Tab.ColorIndex = 1 'noir End If End Sub
Cordialement,
Franck
Bonjour pijaku / Franck,
Je pense que c'est bien vu de définir la plage de cette façon.
Toutefois, je crois que Tom souhaite tolérer que les cellules soient vides (et donc avoir un onglet vert). Un booléen pour voir si on rencontre autre chose que "VALIDE" ou une cellule vide me semble plus approprié.
Tom188, peux-tu confirmer le besoin souligné ?
Je pense que c'est bien vu de définir la plage de cette façon.
Toutefois, je crois que Tom souhaite tolérer que les cellules soient vides (et donc avoir un onglet vert). Un booléen pour voir si on rencontre autre chose que "VALIDE" ou une cellule vide me semble plus approprié.
Tom188, peux-tu confirmer le besoin souligné ?
Bonjour,
Si la formation n'est pas faite, par exemple en B21 et que la cellule est vide. L'onglet doit être noir.
Vert si tout est VALIDE
Rouge si un seul NON VALIDE (même si des cellules sont vides comme B21)
Noir si incomplet.
J'espère être clair, je suis conscient que mes explications pour des experts doivent pas être évidentes...
Si la formation n'est pas faite, par exemple en B21 et que la cellule est vide. L'onglet doit être noir.
Vert si tout est VALIDE
Rouge si un seul NON VALIDE (même si des cellules sont vides comme B21)
Noir si incomplet.
J'espère être clair, je suis conscient que mes explications pour des experts doivent pas être évidentes...
Cela fonctionne également.
Je n'arrive cependant pas à la faire fonctionner pour les onglets n'ayant par exemple que B9,B12,B15,B18, B21,B24,B27,B30,B33,B36
Car les B39,B42,B45,B48 n'étant pas remplis, l'onglet reste au noir.
Dois je copier la formule dans les code de chaque page et l'adapter ?
Je vous remercie.
J'ai déjà énormément avancé.
Je n'arrive cependant pas à la faire fonctionner pour les onglets n'ayant par exemple que B9,B12,B15,B18, B21,B24,B27,B30,B33,B36
Car les B39,B42,B45,B48 n'étant pas remplis, l'onglet reste au noir.
Dois je copier la formule dans les code de chaque page et l'adapter ?
Je vous remercie.
J'ai déjà énormément avancé.
Tu peux copier, mais idéalement, il faudrait distinguer s'il est normal ou pas que B39,B42,B45,B48 soient vides.
Par exemple en lisant ton fichier, comment vois-je que Gérard DUPONT n'a pas passé la formation B39 mais que c'est normal ? Alors que pour Michel DURAND, B39 est aussi vide mais il devrait passer la formation..
Par exemple en lisant ton fichier, comment vois-je que Gérard DUPONT n'a pas passé la formation B39 mais que c'est normal ? Alors que pour Michel DURAND, B39 est aussi vide mais il devrait passer la formation..
C'est un peu plus vicieux. C'est pas qu'il soit normal ou anormal, c'est que leur poste ne les amènera jamais à passer ces formations. Donc la tableau s'arrête plus tôt. Les mentions ne sont pas les mêmes selon les agents.
Pour compléter, je dirais que l'onglet doit être VERT pour toutes les formations qu'un agents lambda doit VALIDER. Un agent peut avoir un tableau allant jusque B21, un autre jusque B48 etc...
La longueur des tableaux n'est pas forcément la même selon les agents. Mais c'est toujours les mêmes cellules qui sont remplies (la première est forcément B9, la seconde 3 cellules plus bas...) seulement il ne peut y en avoir que 4 ou 5 ou...
J'essaie d'être au maximum clair ;)
Pour compléter, je dirais que l'onglet doit être VERT pour toutes les formations qu'un agents lambda doit VALIDER. Un agent peut avoir un tableau allant jusque B21, un autre jusque B48 etc...
La longueur des tableaux n'est pas forcément la même selon les agents. Mais c'est toujours les mêmes cellules qui sont remplies (la première est forcément B9, la seconde 3 cellules plus bas...) seulement il ne peut y en avoir que 4 ou 5 ou...
J'essaie d'être au maximum clair ;)
Si tu écris "STOP", tu peux essayer le code suivant :
Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range) Dim Valid As Integer, NonValid As Integer, couleur_onglet As Integer, ligne As Integer couleur_onglet = 10 'vert par défaut NonValid = 0 For ligne = 9 To 48 Step 3 If (ActiveSheet.Cells(ligne, 2).Value <> "VALIDE" And ActiveSheet.Cells(ligne, 2).Value <> "NON VALIDE" And ActiveSheet.Cells(ligne, 2).Value <> "STOP") Then 'cellule vide ou de contenu anormal couleur_onglet = 1 'noir Exit For ElseIf ActiveSheet.Cells(ligne, 2).Value = "NON VALIDE" Then couleur_onglet = 3 'rouge NonValid = NonValid + 1 If NonValid = 2 Then couleur_onglet = 1 'noir Exit For End If ElseIf ActiveSheet.Cells(ligne, 2).Value = "STOP" Then Exit For End If Next ligne ActiveSheet.Tab.ColorIndex = couleur_onglet End Sub
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Bonjour,
Les "conditions" pour attribuer la couleur sont trop vagues pour qu'on te fournisse un code tout fait, mais tu peux t'inspirer d'autres sujets approchants, p. ex. : https://forums.commentcamarche.net/forum/affich-12887761-excel-couleur-onglet-en-fonction-cellule
Les "conditions" pour attribuer la couleur sont trop vagues pour qu'on te fournisse un code tout fait, mais tu peux t'inspirer d'autres sujets approchants, p. ex. : https://forums.commentcamarche.net/forum/affich-12887761-excel-couleur-onglet-en-fonction-cellule
Merci.
En fait, je remplis dans un fichier si l'agent en question à passé la formation.
Une fois Date, type et état rempli, une cellule se met "Valide".
Si une de ces 3 cellules n'est pas remplie, il met 'Non Valide'.
Si rien n'est rempli, il laisse vide.
C'est cette cellule qui change (il y en a donc plusieurs, une pour chaque formation), qui doit etre prise en compte.
Dans la page, une fois toutes les formations "Valide", l'onglet doit devenir vert.
En fait, je remplis dans un fichier si l'agent en question à passé la formation.
Une fois Date, type et état rempli, une cellule se met "Valide".
Si une de ces 3 cellules n'est pas remplie, il met 'Non Valide'.
Si rien n'est rempli, il laisse vide.
C'est cette cellule qui change (il y en a donc plusieurs, une pour chaque formation), qui doit etre prise en compte.
Dans la page, une fois toutes les formations "Valide", l'onglet doit devenir vert.
Bonjour,
Je rejoins Zoul67 (que je salue au passage), pour te dire :
Les "conditions" pour attribuer la couleur sont trop vagues pour qu'on te fournisse un code tout fait
Tu dis :
* Si une de ces 3 cellules n'est pas remplie, il met 'Non Valide'
Ceci amène deux questions :
>Qu'elles cellules doivent être complétées?
>Dans qu'elle cellule est affiché 'Non Valide'?
* C'est cette cellule qui change (il y en a donc plusieurs, une pour chaque formation)
Ceci amène deux questions :
> Qu'elle cellule change?
> Il y en a plusieurs : lesquelles?
Il nous faut donc les adresses précises de toutes ces cellules concernées, du genre : A1, B1, C1 etc, et à quoi elles correspondent...
Ou alors, au minimum, de combien de fois 'Valide' doit être écrit dans ta feuille pour que l'onglet cchange de couleur.
Ou encore....
Désolé, nous n'avons pas encode de boule de cristal...
Je rejoins Zoul67 (que je salue au passage), pour te dire :
Les "conditions" pour attribuer la couleur sont trop vagues pour qu'on te fournisse un code tout fait
Tu dis :
* Si une de ces 3 cellules n'est pas remplie, il met 'Non Valide'
Ceci amène deux questions :
>Qu'elles cellules doivent être complétées?
>Dans qu'elle cellule est affiché 'Non Valide'?
* C'est cette cellule qui change (il y en a donc plusieurs, une pour chaque formation)
Ceci amène deux questions :
> Qu'elle cellule change?
> Il y en a plusieurs : lesquelles?
Il nous faut donc les adresses précises de toutes ces cellules concernées, du genre : A1, B1, C1 etc, et à quoi elles correspondent...
Ou alors, au minimum, de combien de fois 'Valide' doit être écrit dans ta feuille pour que l'onglet cchange de couleur.
Ou encore....
Désolé, nous n'avons pas encode de boule de cristal...
Au temps pour moi.
Par exemple je remplis : D7(type de formation), D8(date), et D9 (valide, non valide) et ainsi B9 se remplis "Valide" (seulement si les 3 sont remplies).
Si D7 et ou D8 ne sont pas remplies, alors B9 reste vierge.
Si D9 est remplie "Non Valide" alors B9 est également remplie en "Non Valide".
C'est en fonction de B9 que doit être choisie la couleur de l'onglet car il prend en compte toutes les conditions.
Ceci est pour une formation, pareil pour D10, D11et D12 ou B12 se remplie en fonction.
Une fois que B9 et B12 sont "Valide" l'onglet doit être vert. Si l'un des deux est vierge, l'onglet ne change pas. Si l'un des deux ou tous sont "Non Valide" l'onglet doit être rouge.
Par exemple je remplis : D7(type de formation), D8(date), et D9 (valide, non valide) et ainsi B9 se remplis "Valide" (seulement si les 3 sont remplies).
Si D7 et ou D8 ne sont pas remplies, alors B9 reste vierge.
Si D9 est remplie "Non Valide" alors B9 est également remplie en "Non Valide".
C'est en fonction de B9 que doit être choisie la couleur de l'onglet car il prend en compte toutes les conditions.
Ceci est pour une formation, pareil pour D10, D11et D12 ou B12 se remplie en fonction.
Une fois que B9 et B12 sont "Valide" l'onglet doit être vert. Si l'un des deux est vierge, l'onglet ne change pas. Si l'un des deux ou tous sont "Non Valide" l'onglet doit être rouge.
J'ai essayé quelque chose comme :
Qui ne prend évidemment pas toutes les conditions mais quand je l'execute, EXCEL me demande de créer une macro et ainsi je ne peux pas la faire fonctionner. Je dois mal m'y prendre pour ouvrir ou enregistrer une macro sou worksheet_change
Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address = "$D$9" Then If Target.Value = VALIDE Then ActiveSheet.Tab.ColorIndex = 3 Else ActiveSheet.Tab.ColorIndex = xlNone End If End If End Sub
Qui ne prend évidemment pas toutes les conditions mais quand je l'execute, EXCEL me demande de créer une macro et ainsi je ne peux pas la faire fonctionner. Je dois mal m'y prendre pour ouvrir ou enregistrer une macro sou worksheet_change
Au temps pour moi.
Par exemple je remplis : D7(type de formation), D8(date), et D9 (valide, non valide) et ainsi B9 se remplis "Valide" (seulement si les 3 sont remplies).
Si D7 et ou D8 ne sont pas remplies, alors B9 reste vierge.
Si D9 est remplie "Non Valide" alors B9 est également remplie en "Non Valide".
C'est en fonction de B9 que doit être choisie la couleur de l'onglet car il prend en compte toutes les conditions.
Ceci est pour une formation, pareil pour D10, D11et D12 ou B12 se remplie en fonction.
Une fois que B9 et B12 sont "Valide" l'onglet doit être vert. Si l'un des deux est vierge, l'onglet ne change pas. Si l'un des deux ou tous sont "Non Valide" l'onglet doit être rouge.
Par exemple je remplis : D7(type de formation), D8(date), et D9 (valide, non valide) et ainsi B9 se remplis "Valide" (seulement si les 3 sont remplies).
Si D7 et ou D8 ne sont pas remplies, alors B9 reste vierge.
Si D9 est remplie "Non Valide" alors B9 est également remplie en "Non Valide".
C'est en fonction de B9 que doit être choisie la couleur de l'onglet car il prend en compte toutes les conditions.
Ceci est pour une formation, pareil pour D10, D11et D12 ou B12 se remplie en fonction.
Une fois que B9 et B12 sont "Valide" l'onglet doit être vert. Si l'un des deux est vierge, l'onglet ne change pas. Si l'un des deux ou tous sont "Non Valide" l'onglet doit être rouge.
Je rajouterais qu'il est important de prendre B9 et B12 en référence car lorsque je rajoute une date de recyclage pour la formation en E7, E8 et E9 par exemple => B9 prend la dernière valeur, soit E9 et plus D9 pour inscrire "Valide" ou "Non Valide"
En lançant la macro, l'onglet doit soit rester au vert ou virer au rouge si l'agent n'est plus valide.
En lançant la macro, l'onglet doit soit rester au vert ou virer au rouge si l'agent n'est plus valide.
Ca fonctionne plutôt bien merci bcp.
Imaginons qu'au lieu d'avoir juste B9 et B12 j'ai également B15, B18 ... B48
Je ne peux pas tout copier dans une seule ligne, ça bloque à un moment.
Sinon ça fonctionne.
J'avais un peu minimiser le pbm pour que ce soit plus simple à expliquer pour moi ... ;)
Imaginons qu'au lieu d'avoir juste B9 et B12 j'ai également B15, B18 ... B48
Je ne peux pas tout copier dans une seule ligne, ça bloque à un moment.
Sinon ça fonctionne.
J'avais un peu minimiser le pbm pour que ce soit plus simple à expliquer pour moi ... ;)
ça ne va pas plus loin que 48.
Ca fonctionne bien pour le moment.
Cependant (petite difficulté supplémentaire...) lorsque pour un agent ça ne va que jusque 32 par exemple. L'onglet reste noir alors que tout est au vert...
Je pense que la formule continue quand même...
Ce n'est problématique que pour les VALIDE car, de toute façon, un seul NON VALIDE rend rouge mais je pense que TOUT doit être VALIDE pour etre vert même ceux n'existant pas sur certaines pages...
Enfin c'est déjà super quand même !!
Ca fonctionne bien pour le moment.
Cependant (petite difficulté supplémentaire...) lorsque pour un agent ça ne va que jusque 32 par exemple. L'onglet reste noir alors que tout est au vert...
Je pense que la formule continue quand même...
Ce n'est problématique que pour les VALIDE car, de toute façon, un seul NON VALIDE rend rouge mais je pense que TOUT doit être VALIDE pour etre vert même ceux n'existant pas sur certaines pages...
Enfin c'est déjà super quand même !!
Je l'ai collé dans ThisWorkbook.
Pour la faire fonctionner, j'ai essayé d'appuyer sur le "Play" mais une fenêtre d'ouvre "Macro" ou je dois rentrer un nom...