XL 2016 VBA : Colorer en vert l'onglet actif

AIXELS

XLDnaute Occasionnel
Supporter XLD
Bonjour à tous.
Tout d'abord, une bonne et heureuse année à tous. 🔆
Je suis nouveau sur le Forum et je débute en VBA
J'ai recherché une réponse à ma question, mais aucun résultat trouvé.
Peut-être que la question a déjà été posée ?
Je vous prie d'être indulgent. Par avance merci.
En activant un onglet, le colorer en vert et reprendre sa couleur initiale
en activant un autre onglet qui sera coloré en vert etc...
Bien cordialement.
 

Pièces jointes

  • Couleur_Onglet.xlsm
    21 KB · Affichages: 31

AIXELS

XLDnaute Occasionnel
Supporter XLD
Bonjour à tous les amis du Forum.
Je reviens vers vous pour faire évoluer mon fichier après utilisation.
Colorer l'onglet "actif" en vert pour chaque onglet dès qu'il est actif.
Mémoriser sa couleur initiale et la rétablir dès lors qu'on quitte l'onglet.
Exemple:
SUIVI est de couleur blanc. Dès qu'il est sélectionné devient vert.
Dès que l'on active un autre onglet exemple Feuil1 en rouge
devient vert puisque actif.
(Je n'arrive pas à mémoriser sa couleur initiale)
SUIVI reprend sa couleur initiale etc...
Prenez soin de vous 😷
Bien cordialement.
 

Pièces jointes

  • JOUR MOIS EN COURS COLORER EN VERT (2).xlsm
    31.6 KB · Affichages: 8

eriiic

XLDnaute Barbatruc
Bonjour à tous,

dans ThisWorbook toujours :
VB:
Dim coulAvant
Private Sub Workbook_SheetActivate(ByVal Sh As Object)
   coulAvant = Sh.Tab.Color
   Sh.Tab.Color = vbGreen
End Sub

Private Sub Workbook_SheetdeActivate(ByVal Sh As Object)
   If Not IsEmpty(coulAvant) Then Sh.Tab.Color = coulAvant
End Sub
eric
 

AIXELS

XLDnaute Occasionnel
Supporter XLD
Bonjour à tous,

dans ThisWorbook toujours :
VB:
Dim coulAvant
Private Sub Workbook_SheetActivate(ByVal Sh As Object)
   coulAvant = Sh.Tab.Color
   Sh.Tab.Color = vbGreen
End Sub

Private Sub Workbook_SheetdeActivate(ByVal Sh As Object)
   If Not IsEmpty(coulAvant) Then Sh.Tab.Color = coulAvant
End Sub
eric
Bonsoir Eric.
Merci pour l'intérêt que tu portes à mon problème.
J'ai ajouté les lignes de codes que tu m'as transmises.
J'ai un message d'erreur. Voir image écran jointe.
Bien cordialement.
 

Pièces jointes

  • Message d'erreur.jpg
    Message d'erreur.jpg
    108.7 KB · Affichages: 23

riton00

XLDnaute Impliqué
Bonsoir,

Comme ça

VB:
Option Explicit
Dim coulAvant
Private Sub Workbook_SheetActivate(ByVal Sh As Object)
   coulAvant = Sh.Tab.Color
   Sh.Tab.Color = vbGreen
End Sub

Private Sub Workbook_SheetdeActivate(ByVal Sh As Object)
   If Not IsEmpty(coulAvant) Then Sh.Tab.Color = coulAvant
End Sub

'================
Private Sub Workbook_Open()
Sheets("SUIVI").Select
Application.WindowState = xlMaximized
Cells(4 + Month(Date), 2 + Day(Date)).Select
End Sub

Slts
 

fanch55

XLDnaute Barbatruc
Salut,
C'est le pb avec les variables publiques qui sont "rincées" dès qu'on entre en "Debug" suite à erreur quelconque. Moi j'avais planché sur une variable dictionary dans le thisworkbook :
VB:
Option Explicit
Dim TabColor

Private Sub Workbook_SheetActivate(ByVal Sh As Object)
    Sh.Tab.Color = vbGreen
End Sub

Private Sub Workbook_SheetdeActivate(ByVal Sh As Object)
    If TabColor.exists(Sh.CodeName) _
    Then Sh.Tab.ColorIndex = TabColor(Sh.CodeName)
End Sub
Private Sub Workbook_Open()
    Tab_Color
    Sheets("SUIVI").Select
    Application.WindowState = xlMaximized
    Cells(4 + Month(Date), 2 + Day(Date)).Select
End Sub
Sub Tab_Color()
Dim Sh As Worksheet
    Set TabColor = CreateObject("Scripting.Dictionary")
    For Each Sh In ThisWorkbook.Sheets
        TabColor.Add Sh.CodeName, Sh.Tab.ColorIndex
    Next
    Set Sh = Nothing
End Sub
Mais pas de contournement trouvé, il faut obligatoirement exécuter la sub "Tab_Color" une fois la modification de couleur de l'onglet effectuée ... ou une erreur rencontrée ...🤔
 

mapomme

XLDnaute Barbatruc
Supporter XLD
Bonsoir @fanch55 :),
Oui mais si on ferme le classeur en l'enregistrant, l'onglet actif aura par le suite aura la couleur verte, non ?

Re riton,
Pour l'instant, je ne vois qu'une astuce du type de celle que tu suggères. Et encore, je ne suis pas certain que le phénomène ci-dessus ne se produise pas.

Peut-être une feuille Couleur (cachée) avec une table codeName / couleur de l'onglet ?
 
Dernière édition:

eriiic

XLDnaute Barbatruc
J'ai un message d'erreur. Voir image écran jointe.
Dim coulAvant est une variable publique, à déclarer en tête de module avant toute procédure.

Pour palier à tous les problèmes on peut imaginer sauvegarder toutes les couleurs dans une feuille param avec le codename de l'onglet.
Les restaurer à partir de là, et les réinitialiser à l'ouverture (sauf la feuille active) pour pallier aux trous dans la raquette.
eric
 

Dranreb

XLDnaute Barbatruc
Bonsoir.
Essayez comme ça, peut être, dans ThisWorkbook :
VB:
Private Sub Workbook_SheetActivate(ByVal Sh As Object)
   Sh.Names.Add "CoulTab", Sh.Tab.Color
   Sh.Tab.Color = &HFF00&
   End Sub
Private Sub Workbook_SheetDeactivate(ByVal Sh As Object)
   On Error Resume Next
   If Sh.Tab.Color <> &HFF00& Then
      Sh.Names.Add "CoulTab", Sh.Tab.Color
   Else
      Sh.Tab.Color = Sh.[CoulTab]: End If
   End Sub
 

AIXELS

XLDnaute Occasionnel
Supporter XLD
Bonjour à riton00, éric, fan55, mapomme, Dranreb et tous les amis du Forum.
Merci pour vos réponses respectives. Mais il y'a un mais:
Je me suis complètement emmêlé les fichiers. Je suis perdu.
Je n'ai pas assez d'expérience, j'aurais dû sauvegarder sous vos noms respectifs.
"C'est le métier qui rentre."
Certains fonctionnent, mais remettent ne gardent pas en mémoire la couleur
un autre garde en mémoire les couleurs mais suivi et le dernier onglet reste en vert.
Je vous propose si vous le voulez de me renvoyer mon fichier avec votre code.
Par avance merci à tous.
Bien cordialement.
 

Discussions similaires

Réponses
2
Affichages
341
Réponses
6
Affichages
688

Statistiques des forums

Discussions
314 450
Messages
2 109 719
Membres
110 551
dernier inscrit
Khyolyanna