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.
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
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...
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...
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
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.
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!
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??
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?