Grouper/Dissocier des onglets
Bonjour,
J'ai parcouru quelques sites en vain, et il me semble que la fonctionnalité que je recherche sur Excel n'existe pas, aussi je fais appel à votre expérience pour trouver une solution de contournement.
Je travaille sur des fichiers excel qui sont "construits" et comportent beaucoup d'onglets. Il est donc complexe de naviguer au sein du fichier. Pour faciliter la navigation, j'ai créé des parties. Ces parties sont matérialisées uniquement par un code couleur. Par exemple, si 5 onglets traitent de la même chose (sans qu'il soit souhaitable de les fusionner sur un unique onglet), ces 5 onglets ont la couleur rouge par exemple.
J'aurais aimé savoir s'il était possible de grouper des onglets entre eux, comme c'est possible pour des lignes ou des colonnes à travers la fonction Données / Grouper ou Dissocier, ce qui permettrait de réduire ou déployer des onglets appartenant à la même partie.
A défaut, créer un onglet sommaire sur lequel je mettrai des macros pour afficher/masquer les groupes d'onglets...
D'autres pistes ?
Je vous remercie par avance de vos contributions.
François
Bonjour François, bonjour le forum,
Ne sachant pas quelles couleurs tu as utilisées, le code ci-dessous ne répond pas exactement à tes besoins mais peut te monter la marche à suivre. La première partie stocke dans le tableau CO toutes les couleurs utilisées. La seconde partie sélectionne le premier onglet de chaque couleur. Tu adapteras pour tes besoins...
Sub Macro1()[/color]
Dim O As Worksheet 'déclare la variable O (Onglet)
Dim CO As Variant 'déclare la variable CO (Couleur d'Onglet)
Dim D As Object 'déclare la variable D (Dictionnaire)
Set D = CreateObject("Scripting.Dictionary") 'définit le dictionnaire D
For Each O In Sheets 'boucle sur tous les onglets O du classeur
D(O.Tab.ThemeColor) = "" 'alimente le dictionnaire avec la couleur de l'onglet
Next O 'prochain onglet de la boucle
CO = D.Keys 'récupère dans la tableau CO la liste des couleurs d'onglet sans doublon
For I = 0 To UBound(CO) 'boucle 1 : sur toutes les couleurs du tableau CO
For Each O In Sheets 'boucle 2 : sur tous les onglets O du classeur
'si la couleur de l'onglet est égale à la couleur indéxée I du tableau CO, sélectionne l'onglet, message, sort de la boucle 2
If O.Tab.ThemeColor = CO(I) Then O.Select: MsgBox "la Couleur de cet onglet est : " & CO(I): Exit For
Next O 'prochain onglet de la boucle 2
Next I 'prochaine couleur de la boucle 1
End SubJe te remercie.
J'ai copié/collé ton code.
Si je fais tourner la macro, il me renvoie une fenêtre avec "la couleur de cet onglet est : 0" puis il saute à l'onglet suivant, me renvoie le message "la couleur de cet onglet est : 2".
Et la macro s'arrête là.
Une idée ?
Re,
Oui merci, ça je le savais déjà !... Si tu avais vraiment lu mon message tu ne poserais même pas la question sans fournir les informations de couleur des onglets!... Comment veux-tu qu'on les devine ! Sans fichier, difficile de faire mieux que de te mettre sur la voie...
Y'a des jours ou les feignasses me fatiguent plus que d'autres...
Sorry...
Primo, je suis daltonien, et c'est véridique, je te prie de me croire.
Secundo, je ne sais pas où trouver la table des codes couleur sur excel, mis à part le fait a priori que 0 = incolore et 2 = noir.
Tertio, mon fichier n'est pas terminé et je ne dispose pas pour le moment de l'inventaire des couleurs.
Enfin, je pensais que ta macro recensait dans un premier temps toutes les couleurs utilisées (je te cite : "la première partie stocke dans le tableau CO toutes les couleurs utilisées") et qu'ensuite elle s'indexait sur ces couleurs.
Bref, à ce stade, cette manière de faire ne convient pas tout à fait... Mais merci quand même
Bonjour,
peut être ceci pour trier / regrouper par couleur d'onglet
Option Explicit
Sub TriCouleurOnglet()
Dim f
Dim i As Long
Dim Coul
For Each f In ActiveWorkbook.Sheets
Coul = f.Tab.Colorindex
For i = 1 To ActiveWorkbook.Sheets.Count
If Coul > Sheets(i).Tab.ColorIndex Then _
f.Move after:=Sheets(i)
Next i
Next f
End SubRe, bonjour Patrick,
Oui les couleurs sont bien listées et indexées dans le Tableau CO et rien n'est plus facile de masquer / afficher les onglets d'une même couleur mais ce que je ne sais pas c'est commet indiquer à la macro la couleur que tu désires afficher. Regarde le nouveau code ci-dessous à adapter :
Sub Macro1()
Dim O As Worksheet 'déclare la variable O (Onglet)
Dim CO As Variant 'déclare la variable CO (Couleur d'Onglet)
Dim D As Object 'déclare la variable D (Dictionnaire)
Set D = CreateObject("Scripting.Dictionary") 'définit le dictionnaire D
For Each O In Sheets 'boucle sur tous les onglets O du classeur
D(O.Tab.ThemeColor) = "" 'alimente le dictionnaire avec la couleur de l'onglet
Next O 'prochain onglet de la boucle
CO = D.Keys 'récupère dans la tableau CO la liste des couleurs d'onglet sans doublon
For I = 0 To UBound(CO) 'boucle 1 : sur toutes les couleurs du tableau CO
For Each O In Sheets 'boucle 2 : sur tous les onglets O du classeur
'si la couleur de l'onglet est égale à la couleur indéxée I du tableau CO
If O.Tab.ThemeColor = CO(I) Then
O.Visible = xlSheetVisible 'affiche l'onglet
Else 'sinon
O.Visible = xlSheetHidden 'masque l'onglet
End If 'fin de la condition
Next O 'prochain onglet de la boucle 2
MsgBox "Seuls les onglet de Couleur " & CO(I) & " sont affichés !" 'message
Next I 'prochaine couleur de la boucle 1
End SubLà il a le choix , soir masquer soit trier
Que demande le peuple ?
P.
Hello à Thautème avec qui je rejoins le texte de sa signature
Bonjour,
une autre version.
L'activation d'un onglet en couleur affiche tous les onglets de cette couleur.
Les autres sont masqués sauf le 1er de chaque groupe (comme 'repliés')
Les onglets sans couleur ou xlSheetVeryHidden restent inchangés au niveau visibilité.
Code dans ThisWorkbook.
eric