XL 2016 VBA - Affichage de colonne par catégories

Roseline

XLDnaute Occasionnel
Bonjour,
J'ai un fichier qui va contenir une énorme quantité de ligne et de colonne. Dans mon fichier joint comme exemple, ce que j'ai besoin c'est que lorsque je choisi une couleur dans ma cellule B1, j'ai besoin que toutes les colonnes sous la couleur choisie apparaissent (le bleu est choisi, donc je devrais voir apparaître seulement les colonnes C/D/E. Les autres devraient être masquées. Par contre, si je choisi un numéro dans ma cellule B4 (j'ai choisi 1, les colonnes C, F et K devraient apparaître et les autres doivent être masquées. Si je choisi 5 dans ma cellule B4, j'aurai seulement la colonne J qui apparaîtra. Bien entendu mes colonnes A et B doivent toujours rester visibles.
Merci de votre très précieuse et belle journée à vous!
 

Pièces jointes

  • Test - Excel Download.xlsm
    37.4 KB · Affichages: 28

job75

XLDnaute Barbatruc
Bonjour gbinforme,

Bah Roseline ne fournissant pas de fichier on peut tout imaginer :
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim v1, v2, v3, c As Range
v1 = [B1]: v2 = [B4] & "*": v3 = [B5]
If v1 & v2 & v3 = "*" Then Columns.Hidden = False: Exit Sub 'affiche tout
Application.ScreenUpdating = False
With Range("A1", UsedRange)
    With .Columns(3).Resize(, .Columns.Count - 2)
        .Hidden = True 'masque tout
        For Each c In .Rows(4).Cells
            If v1 <> "" And v2 & v3 <> "*" Then If c.MergeArea(1) = v1 And CStr(c(2)) Like v2 & v3 Then c.EntireColumn.Hidden = False
            If v1 <> "" And v2 & v3 = "*" Then If c = v1 Then c.MergeArea.EntireColumn.Hidden = False
            If v1 = "" And v2 & v3 <> "*" Then If CStr(c(2)) Like v2 & v3 Then c.EntireColumn.Hidden = False
        Next
    End With
End With
End Sub
A+
 

Pièces jointes

  • Test - Excel Download(3).xlsm
    32.3 KB · Affichages: 5

job75

XLDnaute Barbatruc
Puisqu'on en a parlé on peut même imaginer d'afficher/masquer la 3ème colonne avec v3 :
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim v1, v2, v3, c As Range
v1 = [B1]: v2 = [B4]: v3 = [B5]
Application.ScreenUpdating = False
With Range("A1", UsedRange)
    .Columns(3).Hidden = LCase(v3) Like "masquer*"
    With .Columns(4).Resize(, .Columns.Count - 3)
        If v1 & v2 = "" Then .Columns.Hidden = False: Exit Sub 'affiche tout
        .Hidden = True 'masque tout
        For Each c In .Rows(4).Cells
            If v1 <> "" And v2 <> "" Then If c.MergeArea(1) = v1 And c(2) = v2 Then c.EntireColumn.Hidden = False
            If v1 <> "" And v2 = "" Then If c = v1 Then c.MergeArea.EntireColumn.Hidden = False
            If v1 = "" And v2 <> "*" Then If c(2) = v2 Then c.EntireColumn.Hidden = False
        Next
    End With
End With
End Sub
 

Pièces jointes

  • Test - Excel Download(4).xlsm
    32.4 KB · Affichages: 3

Roseline

XLDnaute Occasionnel
Bonjour gbinforme,

Bah Roseline ne fournissant pas de fichier on peut tout imaginer :
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim v1, v2, v3, c As Range
v1 = [B1]: v2 = [B4] & "*": v3 = [B5]
If v1 & v2 & v3 = "*" Then Columns.Hidden = False: Exit Sub 'affiche tout
Application.ScreenUpdating = False
With Range("A1", UsedRange)
    With .Columns(3).Resize(, .Columns.Count - 2)
        .Hidden = True 'masque tout
        For Each c In .Rows(4).Cells
            If v1 <> "" And v2 & v3 <> "*" Then If c.MergeArea(1) = v1 And CStr(c(2)) Like v2 & v3 Then c.EntireColumn.Hidden = False
            If v1 <> "" And v2 & v3 = "*" Then If c = v1 Then c.MergeArea.EntireColumn.Hidden = False
            If v1 = "" And v2 & v3 <> "*" Then If CStr(c(2)) Like v2 & v3 Then c.EntireColumn.Hidden = False
        Next
    End With
End With
End Sub
A+
Bonjour Job75,
Désolé pour le délai de ma réponse. Voici donc mon fichier à partir du vôtre. Ce que je désire c'est que les trois sélections que je peux faire dans la colonne B fonctionne ensemble. Je désire que l'affichage de mes colonnes se fasse en fonction de ces trois critères, par exemple: Si je sélectionne dans la Cellule B1 Groupe 1, cellule B2 Blanc et dans la cellule B3 Kiwi. Aussi, que si je fais un seul choix dans mon menu déroulant, ex groupe 1, que je vois tout l'affichage du groupe 1. Si je prend seulement la couleur Blanc qu'on voit seulement les colonnes correspondant au blanc et si je choisis seulement nectarine je vois seulement les colonnes indiquées Nectarine. Les colonnes s'ajustent avec les demandes des autres choix ou d'un seul choix et si tout est vide (B1/B2/B3), tout est démasqué.
Ce n'est pas facile d'expliquer ce qu'on désire des fois mais sachez que votre aide est grandement appréciée
Merci encore et bonne journée :)
 

Pièces jointes

  • jOB75.xlsm
    33.8 KB · Affichages: 8

job75

XLDnaute Barbatruc
Bonsoir Roseline,

J'ai dit qu'on pouvait tout imaginer mais là votre imagination n'est pas débordante.

En effet la cellule B1 et les cellules C1 I1 N1 sont tout à fait inutiles.

Entrez en C2 le texte GROUPE 1 - BLEU et faites la même chose en I2 et N2.

A+
 

Roseline

XLDnaute Occasionnel
Bonsoir Roseline,

J'ai dit qu'on pouvait tout imaginer mais là votre imagination n'est pas débordante.

En effet la cellule B1 et les cellules C1 I1 N1 sont tout à fait inutiles.

Entrez en C2 le texte GROUPE 1 - BLEU et faites la même chose en I2 et N2.

A+
Bonjour,
Pas toujours facile d'explique ce qu'on veut et la raison du pourquoi. Quoi qu'il en soit je vous remercie grandement de votre aide.
Bonne journée à vous !
 

Discussions similaires

Statistiques des forums

Discussions
311 720
Messages
2 081 926
Membres
101 841
dernier inscrit
ferid87