j'espère que tu m'en voudras pas trop : j'ai supprimé tout ton code VBA, alors c'est inutile que tu cherches ta sub Rounded_Rectangle_1_Click() ; ni ta sub Cacher_colonne() ; ni ta sub afficher_colonne() ; à la place, je te propose ce code VBA avec une seule sub :
VB:
Option Explicit
Sub HideShowColumns()
Dim b As Boolean: b = Columns("L").Hidden: Columns("L:P").Hidden = Not b
ActiveSheet.Shapes("Rectangle 1").TextFrame.Characters.Text = _
IIf(b, "Masqu", "Affich") & "er les détails"
End Sub
si besoin, tu peux demander une adaptation.
à te lire pour avoir ton avis.
Dim b As Boolean : déclare une variable b, de type booléen ; cette variable booléenne peut donc contenir la valeur True (=Vrai) ou False (=Faux).
b = Columns("L").Hidden ; si la colonne L est cachée, ce qui est le cas quand on a masqué les colonnes L:P, alors b vaut True ; sinon : si la colonne L est visible, ce qui est le cas quand on a affiché les colonnes L:P, alors b vaut False.
Columns("L:P").Hidden = Not b : pour les colonnes L:P, on positionne Hidden à l'inverse de la valeur de b : si b = True (car L était cachée), alors ça met .Hidden = Not True ; donc .Hidden = False : on affiche L:P ; dans le cas contraire : si b = False (car L était visible), alors ça met .Hidden = Not False ; donc .Hidden = True : on masque L:P ; il s'agit donc bien d'une inversion de l'état caché ou non pour les colonnes L:P.
il reste plus qu'à afficher le texte correct dans la forme automatique, grâce à cette partie de l'instruction suivante : IIf(b, "Masqu", "Affich") & "er les détails" ; si b est True, ça affiche "Masqu" & "er les détails" ; si b est False, ça affiche "Affich" & "er les détails".
note que IIf() est l'équivalent VBA du SI() ; il y a donc 3 parties entre les parenthèses : 1er argument = la condition ; 2ème argument = ce qu'on veut si le test est VRAI ; 3ème argument = ce qu'on veut si le test est FAUX.
IIf(b, "Masqu", "Affich") est une abréviation de : IIf(b=True, "Masqu", "Affich")
Option Explicit
Sub HideShowColumns()
With Columns("L:P")
.Hidden = Not .Hidden:
ActiveSheet.Shapes("Rectangle 1").TextFrame.Characters.Text = Array("Afficher ", "Masquer ")(Abs(Not .Hidden)) & "les détails"
End With
End Sub
dans ton post #3, tu m'as demandé une explication de ma macro ; je t'ai écrit une explication bien détaillée dans mon post #4 ; l'aurais-tu manquée ? tu peux cliquer sur le lien bleu pour aller sur mon post #4 ; pour ce que tu demandes dans ton post #6, c'est comme si on écrivait :
Columns("L:P").Hidden = Not Columns("L:P").Hidden