VBA Word : activer ou désactiver un bouton dans un menu personnalisé [Résolu]

Signaler
Messages postés
7
Date d'inscription
dimanche 4 mars 2012
Statut
Membre
Dernière intervention
31 mars 2012
-
Messages postés
7
Date d'inscription
dimanche 4 mars 2012
Statut
Membre
Dernière intervention
31 mars 2012
-
Bonjour à tous.

Dans un modèle de Word 2007, j'ai créé un menu composé de 2 boutons : jusque là, tout fonctionne très bien.

PROBLEME : en fonction du contexte, je veux pouvoir activer ou désactiver un des 2 boutons avec une ligne du genre
"xxx.Bouton1.Visible = False"
C'est le "xxx" qui me pose problème.
Quelqu'un peut-il m'aider ? Merci par avance.

Pour info , voici le code qui m'a permis de créer menu et boutons :
Set Ajout   = ActiveDocument.CommandBars.ActiveMenuBar _
.Controls.Add(Type:=msoControlPopup, Temporary:=True)
Set MenuModif = Ajout.Add(Type:=msoControlPopup, Temporary:=True)
MenuModif.Caption = "Modification"
Set Bouton1 = MenuModif.Controls.Add(Type:=msoControlButton, ID:=1)
 	Bouton1.Caption = "Déformatage"
Bouton1.OnAction = "Deform"
Set Bouton2 = MenuModif.Controls.Add(Type:=msoControlButton, ID:=2)
Bouton2.Caption = "Reformatage"
Bouton2.OnAction = "Reform"

5 réponses

Messages postés
7
Date d'inscription
dimanche 4 mars 2012
Statut
Membre
Dernière intervention
31 mars 2012

Trop facile - j'avais déjà essayé - mais j'ai un message "Objet absent".

J'ai donc réglé le problème différemment et, cette fois, tout fonctionne :
- en fait, je recrée mon menu "Modification" et ses boutons à chaque ouverture du document
- je le supprime à chaque fermeture
- le fait de le recréer me permet de conserver mes objets durant tout le temps que le doc est ouvert.

Bref, cela donne le code suivant :
' Dans le module du document :
  Public MenuModif ' Objet menu
  Public Bouton1 ' Objet 1er bouton
  Public Bouton2 'Objet 2ème bouton
  '
  Public Sub AutoOpen()
    Set Ajout = ActiveDocument.CommandBars.ActiveMenuBar _
.Controls.Add(Type:=msoControlPopup, Temporary:=True)
    Set MenuModif = Ajout.Add(Type:=msoControlPopup, Temporary:=True)
MenuModif.Caption = "Modification"
    Set Bouton1 = MenuModif.Controls _
        .Add(Type:=msoControlButton, ID:=1)
 	Bouton1.Caption = "Déformatage"
Bouton1.OnAction = "Deform"
Bouton1.Enabled = False
    Set Bouton2 = MenuModif.Controls _
        .Add(Type:=msoControlButton, ID:=2)
Bouton2.Caption = "Reformatage"
Bouton2.OnAction = "Reform"
Bouton2.Enabled = False
  End Sub
  '
  Public Sub AutoClose()
    Bouton1.Delete
    Bouton2.Delete
    MenuModif.Delete
  End Sub
  '
  Sub MaProc
    Bouton1.Enabled = True ' Ça marche avec les boutons
    MenuModif.Enabled = False ' Ça marche aussi avec le menu
  End Sub

De la discussion jaillit la lumière...
Merci beaucoup pour ton aide, Le Pivert.
Messages postés
7
Date d'inscription
dimanche 4 mars 2012
Statut
Membre
Dernière intervention
31 mars 2012

PS : dans Word 2007, mon menu s'est automatiquement placé dans l'onglet "Compléments" du ruban

Bonjour,

Apparemment tes xxx ne servent à rien. Juste à mettre les lignes

bouton1.visible = false


ou

bouton2.visible = false


Ou bien la question posée n'est pas la vraie question.

PS. Ne pas confondre VBA et VBScript. C'est VBA (VisualBasic édition Applications qui vient avec Office.
Messages postés
7
Date d'inscription
dimanche 4 mars 2012
Statut
Membre
Dernière intervention
31 mars 2012

Pas facile à expliquer :
- la procédure décrite plus haut n'est pas exécutée à chaque ouverture du document mais elle l'a été une seule fois pour créer menu et boutons ; depuis, menu et boutons existent et je ne la relance pas.
- donc, si j'envoie un "Bouton1.Visible True" ou un "Reformatage.Visible True", j'obtiens le message d'erreur "424 - Objet requis" car, bien sûr, ces noms d'objets n'existent pas.

Ma difficulté, dès lors, consiste à retrouver le chemin exact qui me permettra de modifier les propriétés de ces boutons (d'où l'impérieuse nécessité du "xxx").

Avant d'envoyer un "Bouton1.Visible = False", je dois déclarer un
"Set Bouton1 = Menubars?????????"

Tout ce que j'ai essayé n'a pas fonctionné jusqu'à présent.
Messages postés
6930
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
25 septembre 2020
112
Bonjour,
Essaie ceci:

Application.CommandBars("Modification").Controls("Déformatage").Visible = False
Application.CommandBars("Modification").Controls("Reform").Visible = False


@+Le Pivert