Microsoft 365 Bouton ( forme ) pour lancer une macro avec changement de texte

tuonoman

XLDnaute Occasionnel
Bonjour à tous,

J’ai 2 macros qui affiche ou masque des colonnes.

Via un bouton (une forme en l’occurrence ) je souhaite permuter le texte de la forme et activer une macro.

Mais je n’y arrive pas.

Pourriez-vous me donnez un coup de main.

Merci
 

Pièces jointes

  • Bouton.xlsm
    54 KB · Affichages: 17

soan

XLDnaute Barbatruc
Inactif
Bonjour tuonoman,

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. :)

soan
 

Pièces jointes

  • Bouton.xlsm
    51 KB · Affichages: 6

soan

XLDnaute Barbatruc
Inactif
@tuonoman

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")

soan
 
Dernière édition:

patricktoulon

XLDnaute Barbatruc
re
bonjour
sinon sans variabilisation
VB:
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
 
Dernière édition:

soan

XLDnaute Barbatruc
Inactif
@tuonoman (salut patrick)

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

soan
 

Discussions similaires