Microsoft 365 Incrémenter l'affichage de colonnes masquées par un clic

supercopain

XLDnaute Junior
Bonjour à tous,
j'espère être à la bonne place pour ma question...
je ne suis pas trop à l'aise avec le VBA,
Au boulot on ma demandé de faire une feuille évolutives en fonction des données (masquer les colonnes non utilisées)
Alors, je me demandais si il était possible d'afficher colonnes par colonne en cliquant sur un bouton, (+ pour afficher et - pour les re-masquer)
chaque clique afficherais ou masquerais une colonne supplémentaire. (les colonnes sont déjà masquées: AA;AB;AC;AD;AE,....)
et ce sur plusieurs onglets en même temps.
d'avance, je vous remercie pour votre aide.

PS: ci-joint une capture d'écran
 

Pièces jointes

  • Exemple.jpg
    Exemple.jpg
    12.9 KB · Affichages: 36
Dernière édition:

supercopain

XLDnaute Junior
Bonjour,

Je suis désolé pour le temps de réponse,
je vous joint un exemple de fichier Excel avec un descriptif de ce que je souhaite faire pour afficher et masquer les colonnes.

D'avance je vous remercie
 

Pièces jointes

  • Exemple affichage par colonne.xlsx
    18.5 KB · Affichages: 7

job75

XLDnaute Barbatruc
Bonjour supercopain, shinozak,

L'ennui des boutons c'est que si on les masque on ne peut plus les utiliser.

Utilisez plutôt ces macros qui se lancent par des raccourcis clavier :
VB:
Sub Masquer()
'se lance par Ctrl+M
Selection.EntireColumn.Hidden = True
End Sub

Sub Afficher()
'se lance par Ctrl+A
Columns.Hidden = False
End Sub
A+
 

Pièces jointes

  • Exemple affichage par colonne(1).xlsm
    15.4 KB · Affichages: 5

supercopain

XLDnaute Junior
Bonjour supercopain, shinozak,

L'ennui des boutons c'est que si on les masque on ne peut plus les utiliser.

Utilisez plutôt ces macros qui se lancent par des raccourcis clavier :
VB:
Sub Masquer()
'se lance par Ctrl+M
Selection.EntireColumn.Hidden = True
End Sub

Sub Afficher()
'se lance par Ctrl+A
Columns.Hidden = False
End Sub
A+
Bonjour je vous remercie pour votre proposition, mais je souhaiterais que les colonnes s'affichent/masque une à une, à chaque clic sur le bouton (+) ou le bouton (-) ces boutons resterons toujours accessible.
D'avance merci.
 

job75

XLDnaute Barbatruc
Bonjour,
VB:
Sub Ajouter()
With Feuil1.Cells(9, Columns.Count).End(xlToLeft)
    .EntireColumn.Columns(2).Insert
    .Cells(1, 2) = LCase(Split(.Address(1, 0), "$")(0))
    .Cells(1, 2).Borders.Weight = xlThin 'bordures
End With
End Sub

Sub Supprimer()
With Feuil1.Cells(9, Columns.Count).End(xlToLeft)
    If .Column > 2 Then .EntireColumn.Delete
End With
End Sub
A+
 

Pièces jointes

  • Exemple affichage par colonne(1).xlsm
    19.4 KB · Affichages: 9

supercopain

XLDnaute Junior
Oui Lionel et c'est ce que j'ai fait au post #4 mais dans le fichier du post #3 il est écrit :

donc il faut la créer si elle n'existe pas, et en toute logique le bouton - doit la supprimer.

Et si notre ami veut autre chose il n'a qu'à être plus clair.
Bonjour à tous,
je vais essayer d'être plus clair
Actuellement, dans mon classeur Excel j'ai un onglet "Hz1" avec les colonnes suivantes masquées AA;AB;AC;AD;AE;AF;AG;AH;AI;AJ;AK;AL;AM;AQ
avec un clic sur le bouton je souhaite afficher la colonne AA, un deuxième clic et la colonne AB s'affiche, etc...
et un deuxième bouton pour les (re)masquer
D'avance je vous remercie pour votre patience
Bonne journée
 

TooFatBoy

XLDnaute Barbatruc
Bonjour,

Oui Lionel et c'est ce que j'ai fait au post #4 mais dans le fichier du post #3 il est écrit :
donc il faut la créer si elle n'existe pas, et en toute logique le bouton - doit la supprimer.
Ok, le contexte parle bien de masquer et démasquer et non de créer ou supprimer des colonnes, et le fichier de #3 comporte bien des colonnes masquées.
Mais dans le fichier, une phrase parle de "nouvelle colonne" et il y a eu un petit problème d'interprétation. 😉

Il est évident que la langue française peut être bien alambiquée !...
Par exemple, parfois l'ordre des mots dans une phrase peut légèrement changer le sens de ladite phrase.
Ainsi, "une nouvelle colonne" est employé pour parler de la colonne suivante (au sens élément suivant d'une liste), alors que pour parler d'une colonne nouvellement créée on emploiera "une colonne nouvelle".

Nouveau :
Qui succède à un être, à une chose de même ordre, ou qui vient continuer une série.
Le plus souvent, dans ce sens, Nouveau se place avant le nom. On distingue ainsi Un nouveau livre, un autre livre, un livre différent de celui qu’on lisait, qu’on écrivait auparavant, et Un livre nouveau, un livre qui vient de paraître.
 
Dernière édition:

job75

XLDnaute Barbatruc
Bonjour supercopain, bonjour Marcel32, le forum,

Bon on y arrive enfin :
VB:
Sub Afficher()
Dim i%
With Sheets("Hz1").[AA:AN] 'à adapter
    For i = 1 To .Columns.Count
        If .Columns(i).Hidden Then .Columns(i).Hidden = False: Exit Sub
    Next
End With
End Sub

Sub Masquer()
Dim i%
With Sheets("Hz1").[AA:AN] 'à adapter
    For i = .Columns.Count To 1 Step -1
        If Not .Columns(i).Hidden Then .Columns(i).Hidden = True: Exit Sub
    Next
End With
End Sub
A+
 

Pièces jointes

  • Exemple affichage par colonne(2).xlsm
    19.6 KB · Affichages: 3

supercopain

XLDnaute Junior
Bonjour supercopain, bonjour Marcel32, le forum,

Bon on y arrive enfin :
VB:
Sub Afficher()
Dim i%
With Sheets("Hz1").[AA:AN] 'à adapter
    For i = 1 To .Columns.Count
        If .Columns(i).Hidden Then .Columns(i).Hidden = False: Exit Sub
    Next
End With
End Sub

Sub Masquer()
Dim i%
With Sheets("Hz1").[AA:AN] 'à adapter
    For i = .Columns.Count To 1 Step -1
        If Not .Columns(i).Hidden Then .Columns(i).Hidden = True: Exit Sub
    Next
End With
End Sub
A+
Bonjour !
Merci beaucoup c'est exactement ça qu'il me fallait ....
mais j'ai un petit problème avec une une autre macro (dans la même feuille) lorsque la liste à choix est sélectionnée la largeur de la colonne augmente a 80 pour permettre la lecture complète du choix dés que l'on qui la liste la colonne reprends ça taille initiale 6.57.


Option Explicit

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

Application.ScreenUpdating = False
Columns("O:AQ").ColumnWidth = 6.57


If Not Intersect(Range("O34:AQ34"), Target) Is Nothing And Target.Count = 1 Then
Columns(Target.Column).ColumnWidth = 80

End If
End Sub

Mon problème: les colonnes ne reste pas masquées...

cordialement
 

Pièces jointes

  • Exemple affichage par colonne(3).xlsm
    25.4 KB · Affichages: 2

job75

XLDnaute Barbatruc
Bonjour,
VB:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    Application.ScreenUpdating = False
    On Error Resume Next 'si aucune SpecialCell
    With Columns("O:AQ").SpecialCells(xlCellTypeVisible)
        .ColumnWidth = 6.57
        Intersect(Columns("O:AQ"), ActiveCell.EntireColumn).ColumnWidth = 80
    End With
End Sub
A+
 

Pièces jointes

  • Exemple affichage par colonne(3).xlsm
    20.9 KB · Affichages: 3

supercopain

XLDnaute Junior
Bonjour,
VB:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    Application.ScreenUpdating = False
    On Error Resume Next 'si aucune SpecialCell
    With Columns("O:AQ").SpecialCells(xlCellTypeVisible)
        .ColumnWidth = 6.57
        Intersect(Columns("O:AQ"), ActiveCell.EntireColumn).ColumnWidth = 80
    End With
End Sub
A+
Bonjour,
J'ai ajouter ce code à la place de l'ancien, mais ça me plante Excel, je n'arrive pas à la faire fonctionner.

Il y a peut-être d'autre façon d'y arriver ce que je souhaite faire:
1 Dans mon Onglet Hz1 une partie des colonnes sont affichées par défauts et le reste est masquées
2 lorsque je rempli les colonnes la taille se modifie pour facilité la lecture du contenu.
3 une fois toute mes colonnes (affichées par défauts) son pleines, et si il m'en faut des supplémentaires, je les affiches (avec le bouton +) elle contient les mêmes caractéristiques que la colonne précédente.

L'onglet Hz1 est la référence, il faut que les actions se fasse aussi sur les onglets suivants: Hz2;Hz3;Hz4......Hz8


Je vous remercie pour votre aide
Cordialement
 
Dernière édition:

job75

XLDnaute Barbatruc
Bonjour supercopain,
J'ai ajouter ce code à la place de l'ancien, mais ça me plante Excel, je n'arrive pas à la faire fonctionner.
En effet il faut ajouter les Application.EnableEvents pour éviter le bouclage :
VB:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    Application.ScreenUpdating = False
    Application.EnableEvents = False 'désactive les évènements
    On Error Resume Next 'si aucune SpecialCell
    With Columns("O:AQ").SpecialCells(xlCellTypeVisible)
        .ColumnWidth = 6.57
        Intersect(.Cells, ActiveCell.EntireColumn).ColumnWidth = 80
    End With
    Application.EnableEvents = True 'réactive les évènements
End Sub
A+
 

Pièces jointes

  • Exemple affichage par colonne(4).xlsm
    21 KB · Affichages: 5

Discussions similaires

Statistiques des forums

Discussions
311 720
Messages
2 081 926
Membres
101 842
dernier inscrit
seb0390