Macro non activeX pour masquer/afficher des colonnes
Bonjour à tous,
J'avais créé ce bouton, il me semble activeX à l'époque avec cette ligne de commande
Private Sub CommandButton1_Click()
ActiveCell.Select 'enleve le focus au bouton
Select Case Me.CommandButton1.Caption 'agit en fonction du texte du bouton
Case "Masquer" 'cas "Masquer"
Me.CommandButton1.Caption = "Afficher" 'modifie le texte du bouton
Range("Q1,R1,S1,T1,U1,V1,W1,X1,Y1,Z1,AA1").EntireColumn.Hidden = True 'masque les colonne t aa
Case "Afficher" 'cas "Afficher"
Me.CommandButton1.Caption = "Masquer" 'modifie le texte du bouton
Range("Q1,R1,S1,T1,U1,V1,W1,X1,Y1,Z1,AA1").EntireColumn.Hidden = False 'masque les colonne t aa
End Select 'fin de l'action en fonction du texte du bouton
End Sub
Problème, c'est un fichier collaboratif, et certains l'ouvrent sous Mac.
Du coup, ma formule ne fonctionne plus .....
est ce que c'est possible d'affecter ce genre de macro à un Bouton de Controle de formulaire ? Parce que si je la copie colle, cela ne focntionne pas (je change bien le nom du bouton dans la formule)
Bonjour,
Insérez une forme standard de type rectangle à bout arrondi, initialisez le en y rentrant le texte "Afficher" ou "Masquer" et insérer ce code dans un module standard et liez le à la forme :
Sub MEF()
Dim FORME As Shape
With Worksheets("Feuil1") 'A adapter
Set FORME = .Shapes("Rounded Rectangle 1") 'A adapter
Debug.Print FORME.TextFrame.Characters.Text
Select Case FORME.TextFrame.Characters.Text 'agit en fonction du texte du bouton
Case "Masquer" 'cas "Masquer"
FORME.TextFrame.Characters.Text = "Afficher" 'modifie le texte du bouton
.Range("Q:AA").EntireColumn.Hidden = True 'masque les colonne t aa
Case "Afficher" 'cas "Afficher"
FORME.TextFrame.Characters.Text = "Masquer" 'modifie le texte du bouton
.Range("Q:AA").EntireColumn.Hidden = False 'masque les colonne t aa
End Select 'fin de l'action en fonction du texte du bouton
End With
End Sub
Les deux lignes en commentaires sont a adapter, nom de feuille où se trouve les colonnes à masquer, et nom de la forme. Attention le nom est en anglais sous l'éditeur VBA, dans mon code le nom est équivalent au contenu du champs 5.
Cdlt,
Merci, la solution est fantastique, à un détail prêt que je n'avais pas évoqué dans mon post initial.
La feuille de base est amenée à être dupliquée à de nombreuses reprises.
Or, pour le coup, la macro ne fonctionne que pour une feuille donnée (With Worksheets("Feuil1")), sauf à renommer cette ligne à chaque fois, et donc à créer autant de macros qu'il y a de feuilles. Ce peut devenir assez rapidement lourd à gérer.
Y a t il un moyen pour régler cela ?
Facile, j'ai remplacé par activesheet.