Afficher/masquer une ou plusieurs colone VBA

Bonjour,

Afin de masquer/afficher une ou plusieurs colonnes a partir d'un bouton. J'ai vu plein de solution et aucune mais aucune ne me convient car trop longue a programmer.

solution1 : es possible d'avoir un filtre sur les colonnes sachant qu'il y a déjà un filtre pour les ligne ? ( si oui )

solution 2: es possible d'avoir un macro simple pour avoir un bouton par colonne pour les afficher/masquer ? ( le top ça serai dans un onglet extérieur )

Merci d'avance pour votre aide

4classeur-prix.xlsm (12.84 Ko)

Salut Goun80,

voici un début de solution avant d'autres précisions...

1 un clic sur Tarif A ou B

  • si les deux tarifs sont visibles, la colonne cliquée se cache ;
  • si une seule colonne est visible, switch entre les deux colonnes.

2 un clic sur Site 1/2...

  • si une seule colonne Tarif est visible, les deux colonnes sont affichées ;
  • si les deux colonne sont visibles, elles sont cachées toutes les deux et leur libellé apparaît dans une liste en [A:A] où un clic les faire réapparaître.
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
'
iCol = Target.Column
iCol1 = IIf(iCol Mod 2 = 0, iCol - 1, iCol + 1)
iCol2 = IIf(iCol Mod 2 = 0, iCol, iCol + 1)
'
Application.EnableEvents = False
'
If Not Intersect(Target, Range("C2:R2")) Is Nothing Then
    If Columns(iCol).Hidden = True Or Columns(iCol1).Hidden = True Then
        Columns(iCol1).Hidden = False
    Else
        iRow = Range("A" & Rows.Count).End(xlUp).Row + 1
        Cells(iRow, 1) = "Site " & (iCol2 - 2) / 2
        If iRow > 2 Then Range("A2:A" & iRow).Sort key1:=Range("A2"), order1:=xlAscending
        Range(Columns(iCol2 - 1), Columns(iCol2)).Hidden = True
    End If
End If
'
If Not Intersect(Target, Range("C3:R3")) Is Nothing And Target <> "" Then
    Columns(iCol).Hidden = True
    Columns(iCol1).Hidden = IIf(Columns(iCol).Hidden = True, False, True)
End If
Cells(2, iCol2) = IIf(Columns(iCol).Hidden = False And Columns(iCol1).Hidden = False, "", "Site " & (iCol2 - 2) / 2)
'
If Not Intersect(Target, Range("A:A")) Is Nothing And Target <> "" Then
    iCol1 = 2 + (CInt(Split(Target, " ")(1)) * 2)
    iCol = iCol1 - 1
    Cells(2, iCol1) = ""
    Range(Columns(iCol), Columns(iCol1)).Hidden = False
    Target.Delete shift:=xlUp
End If
'
Application.EnableEvents = True
'
End Sub

A+

8hiddenprices.xlsm (19.39 Ko)
Rechercher des sujets similaires à "afficher masquer colone vba"