Afficher / masquer selon entête de colonne

RootDje

XLDnaute Nouveau
Bonjour !
Après avoir fouillé dans les archives du site, j'ai pu adapter un code pour pouvoir afficher ou non certaines colonnes selon les entêtes. Voir le fichier en attaché :
  • Cellule A1 : Tout => on affiche toute les colonnes
  • Cellule A1 : N => affiche seulement les colonnes avec entête N
  • etc...
Le soucis, c'est que l'on ne peut afficher qu'un seul entête, et pas plusieurs, c'est tout ou un seul entête...:p
J'aimerais le faire évoluer pour pouvoir afficher des colonnes qui correspondent à 2 entêtes différents. Dans mon fichier, afficher les colonnes N et les colonnes N-1, par exemple.
Une bonne âme pour me donner un coup de main ?
Merci !! :cool:
 

Pièces jointes

  • test colonne.xlsx
    13.5 KB · Affichages: 56

job75

XLDnaute Barbatruc
Re : Afficher / masquer selon entête de colonne

Bonsoir RootDje,

Voyez le fichier joint et cette macro dans le code de la feuille (clic droit sur l'onglet, Visualiser le code) :

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim s, cel As Range
If Intersect(Target, [A1]) Is Nothing Then Exit Sub
If [A1] = "" Or [A1] = "Tout" Then Columns.Hidden = False: Exit Sub
Application.ScreenUpdating = False
Columns("E:S").Hidden = True 'colonnes A:D non masquées
For Each s In Split([A1], " / ")
  For Each cel In [E3:S3]
    If cel = s Then cel.EntireColumn.Hidden = False
  Next
Next
End Sub
Edit 1 : pour un fichier .xls la liste en Feuil2 doit être nommée.

Edit 2 : heureux de te croiser kjin :)

A+
 

Pièces jointes

  • test colonne(1).xls
    36.5 KB · Affichages: 55
Dernière édition:

job75

XLDnaute Barbatruc
Re : Afficher / masquer selon entête de colonne

Re,

Tiens, un phénomène que je n'avais jamais remarqué.

Je suis sur Excel 2010 et sur le fichier .xls, la flèche de la liste déroulante reste affichée (mais inactive) quand on sélectionne une autre cellule que A1.

La flèche s'efface bien sur le fichier .xlsm ci-joint.

A+
 

Pièces jointes

  • test colonne(1).xlsm
    19.2 KB · Affichages: 48

RootDje

XLDnaute Nouveau
Re : Afficher / masquer selon entête de colonne

Merci beaucoup job75 ! :cool:
Ca fait le travail pile poil ! Je viens juste de me rendre compte que le fichier que j'avais mis en PJ n'avait pas le code... je viens d'apprendre que les xlsx ne prenaient pas en compte les macros...
en tous cas merci beaucoup !!
++
 

job75

XLDnaute Barbatruc
Re : Afficher / masquer selon entête de colonne

Bonjour RootDje, kjin, le forum,

Avec le masquage des colonnes les bordures n'allaient pas bien en ligne 2.

Voilà qui est mieux :

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim s, cel As Range
If Intersect(Target, [A1]) Is Nothing Then Exit Sub
Application.ScreenUpdating = False
If [A1] = "" Or [A1] = "Tout" Then
  Columns.Hidden = False
Else
  Columns("E:S").Hidden = True 'colonnes A:D non masquées
  For Each s In Split([A1], " / ")
    For Each cel In [E3:S3]
      If cel = s Then cel.EntireColumn.Hidden = False
    Next
  Next
End If
'---Bordures---
Application.DisplayAlerts = False
For Each s In Array("E2:G2", "H2:M2", "N2:S2")
  With Range(s)
    .Merge
    .UnMerge
    .Value = .Cells(1)
    With .SpecialCells(xlCellTypeVisible)
      With Range(.Areas(1), .Areas(.Areas.Count))
        .Merge
        .Borders(xlEdgeLeft).Weight = xlThin
        .Borders(xlEdgeRight).Weight = xlThin
      End With
    End With
  End With
Next
End Sub
Fichiers (2).

A+
 

Pièces jointes

  • test colonne(2).xls
    48 KB · Affichages: 44
  • test colonne(2).xlsm
    21.1 KB · Affichages: 53

RootDje

XLDnaute Nouveau
Re : Afficher / masquer selon entête de colonne

La cerise sur le gateau !! :D
Cependant quand je l'intègre dans mon fichier de travail, ca plante lors de l'affichage N-1, parce que sur certains groupes de celulles, je n'ai pas la donnée en N-1 et donc pas d'entete N-1 en ligne 3, du coup j'ai "Erreur d'execution '1004' Pas de cellules correspondantes...
 

job75

XLDnaute Barbatruc
Re : Afficher / masquer selon entête de colonne

Re,

Le tableau Array("E2:G2", "H2:M2", "N2:S2") correspond aux plages de cellules fusionnées (ou unique).

Il faut bien sûr l'adapter correctement sur votre fichier.

Maintenant si un titre en ligne 2 peut être masqué, pour éviter le bug sur SpecialCells :

Code:
'---Bordures---
Application.DisplayAlerts = False
On Error Resume Next 'si pas de SpecialCells
'----
A+
 

Discussions similaires

Réponses
2
Affichages
210

Statistiques des forums

Discussions
312 489
Messages
2 088 849
Membres
103 974
dernier inscrit
chmikha