Masquer colonne selon couleur en-tête Le sujet est résolu

Y compris Power BI, Power Query et toute autre question en lien avec Excel
M
MFerrand
Fanatique d'Excel
Fanatique d'Excel
Messages : 17'171
Appréciations reçues : 446
Inscrit le : 20 juillet 2015
Version d'Excel : 2010 FR

Message par MFerrand » 23 juin 2016, 23:13

Pour Masquer, on n'a comme prévu que peu de bouleversements.
La variable clr devient de type Variant, car elle va accueillir le tableau de couleurs (et non plus une seule). Une variable k (Variant) est rajoutée qui nous servira au départ à faire des tableau (avec Array) selon le bouton cliqué.
Ces tableaux sont ceux que tu as défini : (2, 3, 4, 5) - (1, 3, 4, 5) - (1, 2, 4, 5)

Au cas donc où des modifications affecteraient l'ordre des couleurs, les seules modifications à apporter à la procédure concernent ces tableaux (qui sont au début et facilement modifiables...)

Ceci fait, on charge le tableau de couleurs (en appelant la fonction précédemment créée), puis phase intermédiaire qui intervient : on défile les cellules de la ligne 1 et si sa couleur correspond à l'une des couleurs à masquer (définies dans k, d'où 2 boucles imbriquées) on la note dans la variable col qui nous servira au masquage proprement dit (après qu'on l'ait transformé en tableau avec Split). On a donc cette phase préparatoire qui s'ajoute mais en même temps le masquage s'en trouve allégé puisque la variable col a été apprêtée pour qu'on n'ait besoin de rien d'autre.
Sub Masquer()
    Dim col, clr, k, i%, m%
    Select Case Application.Caller
        Case "conventions"
            k = Array(2, 3, 4, 5)
        Case "échéances"
            k = Array(1, 3, 4, 5)
        Case "délais"
            k = Array(1, 2, 4, 5)
        Case Else
            Exit Sub
    End Select
    clr = Couleurs()
    Application.ScreenUpdating = False
    Afficher_Tout
    With ActiveSheet
        For i = 1 To .Cells(1, 1).End(xlToRight).Column
            For m = 0 To UBound(k)
                If .Cells(1, i).Interior.Color = clr(k(m)) Then
                    col = col & " " & i
                    Exit For
                End If
            Next m
        Next i
        col = Split(Trim(col))
        For m = 0 To UBound(col)
            .Columns(CInt(col(m))).Hidden = True
        Next m
    End With
    Application.ScreenUpdating = True
End Sub

Et le fichier (je le passe après car j'ai déjà eu des incidents avec perte du message, mais qui ne se produisent qu'en cas de message long accompagné de fichier...).

Cordialement.
nairda_Test Ju.xlsm
(34.31 Kio) Téléchargé 25 fois
N
Nairda
Membre habitué
Membre habitué
Messages : 64
Inscrit le : 13 juin 2016
Version d'Excel : 2010

Message par Nairda » 24 juin 2016, 09:40

Bonjour MFerrand,

Cette macro est dingue, Merci :D !
Elle correspond totalement à mes attentes pratique. J'ai bien compris comment la modifier (le début en tout cas) si je veux ajouter d'autres boutons affectant de futures couleurs :). Et pour l'ajout de colonne avec couleur existante, ça marche niquel.

Seule (petite) modification que j'ai faite est d'appeler la macro Afficher_Tout avant Couleurs :
'clr = Couleurs()
Application.ScreenUpdating = False
Afficher_Tout
clr = Couleurs()

Sans ça, le dictionnaire ne remplissait pas son rôle lorsque les colonnes étaient masquées. L'indice n'apparaissait pas dans la ligne If .Cells(1, i).Interior.Color = clr(k(m)) Then lorsque je passais d'un bouton masquer à un autre sans afficher tout.



Encore merci pour le temps passé à m'aider, le résultat est top et j'ai beaucoup appris grâce à vos explications!


Sujet clos
M
MFerrand
Fanatique d'Excel
Fanatique d'Excel
Messages : 17'171
Appréciations reçues : 446
Inscrit le : 20 juillet 2015
Version d'Excel : 2010 FR

Message par MFerrand » 24 juin 2016, 10:00

Bien vu ! J'avais pas complètement testé ! Merci.
Répondre Sujet précédentSujet suivant
  • Sujets similaires
    Réponses
    Vues
    Dernier message