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 supercopain,

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+
Bonjour et encore un grand merci pour votre aide et votre patience!
ça fonctionne, mais ..
est-ce qu'il est possible d'adapter ce code pour qu'il y ai uniquement l'agrandissement de colonne à 80 lorsque je clic dans les cellules de ("O34:AQ34") et dès que l'on clique sur une cellule voisine (exemple : hors de la ligne 34) la largeur de la colonne reviens à 6.57...

La suite dans mon "projet" c'est que les colonnes que j'ai affichées dans Hz1 s'affichent aussi dans les autres onglets Hz2;Hz3;Hz4...

MERCI
 

job75

XLDnaute Barbatruc
Bonjour supercopain, le forum,
est-ce qu'il est possible d'adapter ce code pour qu'il y ai uniquement l'agrandissement de colonne à 80 lorsque je clic dans les cellules de ("O34:AQ34") et dès que l'on clique sur une cellule voisine (exemple : hors de la ligne 34) la largeur de la colonne reviens à 6.57...
Utilisez ce fichier (5) :
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 Range("O34:AQ34").SpecialCells(xlCellTypeVisible)
        .ColumnWidth = 6.57
        Intersect(.Cells, ActiveCell).ColumnWidth = 80
    End With
    Application.EnableEvents = True 'réactive les évènements
End Sub
A+
 

Pièces jointes

  • Exemple affichage par colonne(5).xlsm
    21.1 KB · Affichages: 0

job75

XLDnaute Barbatruc
La suite dans mon "projet" c'est que les colonnes que j'ai affichées dans Hz1 s'affichent aussi dans les autres onglets Hz2;Hz3;Hz4...
Placez dans ThisWorkbook :
VB:
Private Sub Workbook_SheetActivate(ByVal Sh As Object)
If TypeName(Sh) <> "Worksheet" Then Exit Sub
Dim c As Range
Application.ScreenUpdating = False
For Each c In Sheets("Hz1").Columns("O:AQ")
    Sh.Columns(c.Column).ColumnWidth = c.ColumnWidth
    Sh.Columns(c.Column).Hidden = c.Hidden
Next
End Sub
La macro se déclenche quand on active une feuille, fichier (6).

Edit : ajouté le test If TypeName(Sh) pour le cas où la feuille serait un graphique.
 

Pièces jointes

  • Exemple affichage par colonne(6).xlsm
    32.1 KB · Affichages: 1
Dernière édition:

supercopain

XLDnaute Junior
Placez dans ThisWorkbook :
VB:
Private Sub Workbook_SheetActivate(ByVal Sh As Object)
If TypeName(Sh) <> "Worksheet" Then Exit Sub
Dim c As Range
Application.ScreenUpdating = False
For Each c In Sheets("Hz1").Columns("O:AQ")
    Sh.Columns(c.Column).ColumnWidth = c.ColumnWidth
    Sh.Columns(c.Column).Hidden = c.Hidden
Next
End Sub
La macro se déclenche quand on active une feuille, fichier (6).

Edit : ajouté le test If TypeName(Sh) pour le cas où la feuille serait un graphique.
Bonjour,
Me voilà de retour ...
C'est nickel ! mes colonnes se masque et s'affiche comme je le souhaite!
et pour l'agrandissement des colonnes c'est parfait!
je vais maintenant m'attaquer à la mise en page des graphiques.
Est-ce que je dois solder cette conversation ou je la garde ouverte pour mes prochaines questions sur mes graphiques (..va surement y en avoir..)

En attendant je vous souhaite un excellent weekend !
Encore un grand MERCI pour votre aide!
 

supercopain

XLDnaute Junior
Bonjour,
Me voilà de retour ...
C'est nickel ! mes colonnes se masque et s'affiche comme je le souhaite!
et pour l'agrandissement des colonnes c'est parfait!
je vais maintenant m'attaquer à la mise en page des graphiques.
Est-ce que je dois solder cette conversation ou je la garde ouverte pour mes prochaines questions sur mes graphiques (..va surement y en avoir..)

En attendant je vous souhaite un excellent weekend !
Encore un grand MERCI pour votre aide!
Re Bonjour,
A la suite de l'utilisation de cette petite macro je me rends compte qu'il ne faudrait l'utiliser uniquement sur les onglets ou je l'utilise pour afficher/masquer des colonnes (pas sur le classeur en entier car sur d'autre onglets des données se trouvent masquées...)
avez-vous une solution pour modifier ce code??
 

job75

XLDnaute Barbatruc
Bonjour supercopain,

Il suffit de compléter le test d'exclusion en début de macro :
VB:
Private Sub Workbook_SheetActivate(ByVal Sh As Object)
If Not Sh.Name Like "Hz*" Or TypeName(Sh) <> "Worksheet" Then Exit Sub
'-----
End Sub
A+
 

supercopain

XLDnaute Junior
Bonjour supercopain,

Il suffit de compléter le test d'exclusion en début de macro :
VB:
Private Sub Workbook_SheetActivate(ByVal Sh As Object)
If Not Sh.Name Like "Hz*" Or TypeName(Sh) <> "Worksheet" Then Exit Sub
'-----
End Sub
A+
Bonjour Job75
merci pour ta réponse
je dois indiquer le nom de l'onglets ou des onglets qui n'utilise pas la macro ?

Private Sub Workbook_SheetActivate(ByVal Sh As Object)
If Not Sh.Name Like "BD" Or TypeName(Sh) <> "Worksheet" Then Exit Sub
Dim c As Range
Application.ScreenUpdating = False
For Each c In Sheets("Hz1").Columns("O:AU")
Sh.Columns(c.Column).ColumnWidth = c.ColumnWidth
Sh.Columns(c.Column).Hidden = c.Hidden
Next
End Sub
tu me "traduire" ce que va faire ce test d'exclusion?
 

Discussions similaires