Désactiver un bouton en VBA
Comment faire en sorte qu’un bouton soit désactivé après qu’on a cliqué dessus ?
Le principe
La plupart des composants graphiques (bouton, zone de texte, etc.) ont une propriété Enabled
de type booléen (Oui/Non). Si Enabled = True
, l’objet est activé. Donc, sur le principe, pour qu’un bouton appelé btnTest
se désactive lui-même, il suffirait de programmer son événement Sur clic
comme ceci :
1 2 3 |
Private Sub btnTest_Click() Me.btnTest.Enabled = False End Sub |
Oui mais…
Ce bout de code marcherait sur .NET, par exemple. Mais sur Access, il y a une restriction : l’objet sélectionné (comprenez : « l’objet en cours d’utilisation », ou encore « l’objet qui a le focus ») ne peut pas être désactivé. Or comme vous venez de cliquer sur le bouton btnTest
, vous l’avez sélectionné, et il ne peut donc plus se désactiver directement (par contre, il pourrait désactiver un autre objet du formulaire).
La solution
Tout simple : il suffit de prévoir, sur votre formulaire, un autre objet, et de sélectionner cet objet avant de désactiver le bouton. Si mon formulaire contient une zone de texte appelée txtDummy
. Le code devient :
1 2 3 4 5 6 7 |
Private Sub btnTest_Click() ' On se déplace sur txtDummy Me.txtDummy.SetFocus ' On peut maintenant désactiver le bouton Me.btnTest.Enabled = False End Sub |
Il faut bien sûr que txtDummy
soit un objet lui-même actif.
Pour information, le principe s’applique aussi sur la propriété Visible
d’un bouton (si vous souhaitez faire apparaître ou disparaître un bouton).
Losrque qu’on réouvre le formulaire, le bouton apparait à nouveau. Comment faire pour qu’il soit définitivement supprimé ?
La désactivation d’un bouton par code est dynamique : elle n’est gérée que lors de la « durée de vie » du formulaire.
Maintenant, quel serait le scénario où le bouton est définitivement supprimé ?
(quand je pense « supprimé », je pense « détruit », pas seulement « masqué »)