[VBA] fonction click sur commandbutton
pijaku Messages postés 13513 Date d'inscription Statut Modérateur Dernière intervention -
J'ai essayer de la mettre dans un module ou dans un module de class rien n'y fait
3 réponses
Le problème est que le clic sur un MSForms.CommandButton ne se conserve pas après enregistrement et fermeture du classeur, et l’événement n’est plus actif à la réouverture. L’approche proposée consiste à utiliser un module de classe avec WithEvents pour le bouton et d’initier les boutons via InitBoutons à chaque ouverture, afin de réattacher les gestionnaires d’événements. En pratique, il faut créer des boutons avec un nom spécifique, par exemple ButtonInitFeuille, puis appeler InitBoutons dans Workbook_Open pour reprogrammer les événements à l’ouverture. D’autres conseils soulignent que la clé est l’initialisation des boutons ou la création automatique via CreateButton, afin que les boutons restent fonctionnels sans manipulations manuelles.
-
Bonjour,
Pourrais tu placer ici même le code de ta fonction? -
oui
Code de la creation du bouton
--------------------------------------------------------------------------------------
Public Function CreateButton()
Dim o As OLEObject
Worksheets("Principal").Select
Set o = ActiveSheet.OLEObjects.Add(ClassType:="Forms.CommandButton.1", Link:=False, DisplayAsIcon:=False, Left:=100, Top:=150, Width:=80, Height:=30)
o.Select
Selection.Name = "ButtonInitFeuille"
o.Object.Caption = "Initialisation"
End Function
----------------------------------------------------------------------------------
la fonction principal qui l'appelle
----------------------------------------------------------------------------------
Sub InitFeuille()
Call CreateButton
End Sub
-----------------------------------------------------------------------------------
et la fonction du bouton que j'ai essayer de mettre soit dans le module en lui meme soit dans un module de class
-----------------------------------------------------------------------------------
Option Explicit
Public WithEvents ButtonInitFeuille As CommandButton
Private Sub ButtonInitFeuille_Click()
Call InitFeuilleTab
End Sub
--------------------------------------------------------------------------
avec ou sans les deux premiere lignes -
Module 1
-----------------------------------------------------------------------------
Dim Bouton() As New Classe1
Sub InitBoutons()
Dim cpt As Integer
Dim oleObj As OLEObject
For Each oleObj In ActiveSheet.OLEObjects
If Left(oleObj.Name, 17) = "ButtonInitFeuille" Then
cpt = cpt + 1
ReDim Preserve Bouton(1 To cpt)
Set Bouton(cpt).ButtonInitFeuille = oleObj.Object
End If
Next
End Sub
Sub CreateButton()
Dim o As OLEObject
Worksheets("Feuil1").Select
Set o = ActiveSheet.OLEObjects.Add(ClassType:="Forms.CommandButton.1", Link:=False, DisplayAsIcon:=False, Left:=100, Top:=150, Width:=80, Height:=30)
o.Select
Selection.Name = "ButtonInitFeuille" & ActiveSheet.OLEObjects.Count
o.Object.Caption = "Initialisation" & ActiveSheet.OLEObjects.Count
End Sub
Public Function InitFeuillTab()
MsgBox "Sa fonction"
End Function
-------------------------------------------------------------------------
Class 1
---------------------------------------------------------------------------
Option Explicit
Public WithEvents ButtonInitFeuille As CommandButton
Private Sub ButtonInitFeuille_Click()
Call InitFeuilleTab
End Sub
----------------------------------------------------------------------------
thisworkbook
---------------------------------------------------------------------------
Private Sub Workbook_Open()
Call InitBoutons
End Sub
----------------------------------------------------------------------------
-
-
-
-
Tu n'as pas de boutons sur ta feuille???????????????
Depuis tout à l'heure, tu me dis que le problème vient de InitButton??????????
Si tu n'as pas de bouton sur ta feuille comment veux tu les initialiser??????
SCROGNEUGNEU!!!!!!!!!
Ta macro CreateButton fonctionne t'elle?
S'agit-il de la feuille "Feuil1" ou "principale"? en conséquence, adapter : Worksheets("Feuil1").Select
Tu dis..... Grrrrrrrrr!!!!!!!!
-