Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

bouton et evenement dynamique

5 réponses
Avatar
jordan
Bonjour,

Sous excel 97, j'essaie de cr=E9er dynamiquement des boutons
sur une feuille et de leur affecter un =E9v=E9nement click
similaire pour tous (je suis dans la phase o=F9 je teste
qu'avec un seul bouton cr=E9=E9 dynamiquement)
Pour cela je suis pass=E9 par un module de classe nomm=E9 classe1

dont voici le code

'--------------------------------------------
Public WithEvents boutonUp As CommandButton

Private Sub boutonUp_Click()
MsgBox "bouton clique"

End Sub
'--------------------------------------------

et dans un module standard

'--------------------------------------------
Dim bt As classe1

Sub bt_Add_Click()

set bouton =3D
Sheets("database").OLEObjects.Add(ClassType:=3D"Forms.CommandButton.1",
Width:=3D80, Height:=3D20)

set bt =3D New classe1
set bt.boutonUp =3D
Sheets("database").OLEObjects("CommandButton1").Object

End Sub
'--------------------------------------------

La macro bt_Add_Click est affect=E9e =E0 un bouton.
En cliquant sur ce bouton, un bouton est cr=E9e dynamiquement.
Il n'y a aucune erreur de compilation, d'ex=E9cution.
Le seul soucis est que le bouton cr=E9=E9 ne r=E9agit pas =E0
l'=E9v=E9nement click

Comment faire pour que cela fonctionne

Merci

Jordan

5 réponses

Avatar
Alain CROS
Bonjour.

Dans le module standard, essayer comme ça :

Dim bt As Classe1

Sub bt_Add_Click()
Dim Bouton As OLEObject
Set Bouton = Sheets("database").OLEObjects.Add _
(ClassType:="Forms.CommandButton.1", Width:€, Height: )
Application.OnTime Now + TimeSerial(0, 0, 1), "Jaffect"
End Sub

Sub Jaffect()
Set bt = New Classe1
Set bt.boutonUp = Sheets("database").OLEObjects("CommandButton1").Object
End Sub

Alain CROS

"jordan" a écrit dans le message de news: 08d801c535c3$033336b0$
Bonjour,

Sous excel 97, j'essaie de créer dynamiquement des boutons
sur une feuille et de leur affecter un événement click
similaire pour tous (je suis dans la phase où je teste
qu'avec un seul bouton créé dynamiquement)
Pour cela je suis passé par un module de classe nommé classe1

dont voici le code

'--------------------------------------------
Public WithEvents boutonUp As CommandButton

Private Sub boutonUp_Click()
MsgBox "bouton clique"

End Sub
'--------------------------------------------

et dans un module standard

'--------------------------------------------
Dim bt As classe1

Sub bt_Add_Click()

set bouton Sheets("database").OLEObjects.Add(ClassType:="Forms.CommandButton.1",
Width:€, Height: )

set bt = New classe1
set bt.boutonUp Sheets("database").OLEObjects("CommandButton1").Object

End Sub
'--------------------------------------------

La macro bt_Add_Click est affectée à un bouton.
En cliquant sur ce bouton, un bouton est crée dynamiquement.
Il n'y a aucune erreur de compilation, d'exécution.
Le seul soucis est que le bouton créé ne réagit pas à
l'événement click

Comment faire pour que cela fonctionne

Merci

Jordan
Avatar
merci beaucoup

ça fonctionne


-----Message d'origine-----
Bonjour.

Dans le module standard, essayer comme ça :

Dim bt As Classe1

Sub bt_Add_Click()
Dim Bouton As OLEObject
Set Bouton = Sheets("database").OLEObjects.Add _
(ClassType:="Forms.CommandButton.1", Width:€,
Height: )

Application.OnTime Now + TimeSerial(0, 0, 1), "Jaffect"
End Sub

Sub Jaffect()
Set bt = New Classe1
Set bt.boutonUp =
Sheets("database").OLEObjects("CommandButton1").Object

End Sub

Alain CROS

"jordan" a écrit
dans le message de news:

08d801c535c3$033336b0$
Bonjour,

Sous excel 97, j'essaie de créer dynamiquement des boutons
sur une feuille et de leur affecter un événement click
similaire pour tous (je suis dans la phase où je teste
qu'avec un seul bouton créé dynamiquement)
Pour cela je suis passé par un module de classe nommé classe1

dont voici le code

'--------------------------------------------
Public WithEvents boutonUp As CommandButton

Private Sub boutonUp_Click()
MsgBox "bouton clique"

End Sub
'--------------------------------------------

et dans un module standard

'--------------------------------------------
Dim bt As classe1

Sub bt_Add_Click()

set bouton =
Sheets("database").OLEObjects.Add(ClassType:="Forms.CommandButton.1",
Width:€, Height: )

set bt = New classe1
set bt.boutonUp =
Sheets("database").OLEObjects("CommandButton1").Object

End Sub
'--------------------------------------------

La macro bt_Add_Click est affectée à un bouton.
En cliquant sur ce bouton, un bouton est crée dynamiquement.
Il n'y a aucune erreur de compilation, d'exécution.
Le seul soucis est que le bouton créé ne réagit pas à
l'événement click

Comment faire pour que cela fonctionne

Merci

Jordan




.



Avatar
anonymousA
excellente réponse comme d'hab, mais saurais-tu expliquer pourquoi
exactement?.

Par ailleurs, pour avoir essayé le même genre de manip sur un exemple à
peine différent, en fait des combobox qui pointent sur un module de
classe , j'obtiens un truc assez amusant: quand tu lances la procédure
une 1ere fois, ca ne marche pas. Par contre quand tu le lances une autre
fois ( après avoir supprimé les 1ers combobox) et ensuite indéfiniment,
ca marche à tous les coups.

Ci-dessous la proc en question

Dans un module standard

Dim TABCOMBO(1 To 50) As New cls
Sub creation()

Dim WS As Worksheet

Set WS = ActiveWorkbook.ActiveSheet

Set plageselect = WS.Range("A3:A9")

I = 1

For Each c In plageselect

'on crée chaque combobox
With c
Set dp = WS.OLEObjects.Add(ClassType:="Forms.Combobox.1",
Left:=.Left, Top:=.Top, Width:, Height:)
End With
dp.Name = "HZFILTER" & I
dp.Placement = 1

'on nourrit les combobox des valurs situés dans les 3 cellules à droite
'du combobox
For A = 1 To 3
dp.Object.AddItem c.Offset(0, A)
Next

I = I + 1

Next

'on fait pointer les combobox vers le module de classe
On Error Resume Next
For I = 1 To WS.OLEObjects.Count 'on suppose bien sur ici que la feuille
'ne contient que les OLEObjects qui nous interessent
valtempcombo = "HZFILTER" & I
Set TABCOMBO(I).FILTERH = WS.OLEObjects(valtempcombo).Object
Next

On Error GoTo 0

End Sub

dans un module de classe nommé cls

Public WithEvents FILTERH As ComboBox

Private Sub FILTERH_Click()

MsgBox "coucou"

End Sub

Si tu essayes ces procs, tu constateras que la 1ere fois, bernique. Puis
à partir de la 2eme fois , ca marche à tous les coups.Par ailleurs, si
tu as le malheur de ne pas déclarer ws as worksheet ou de remplcaer ws
par activeworkbook.activesheet ca ne fonctionne plus du tou.
D'autant plus amusant que dans le même genre d'idées, j'avais développé
une proc quasi similaire dans le but de faire un filtre horizontal ( je
sais , ca a l'air truffe mais pas tant que ca) et j'ai mis ce truc en
xla et bien là ca marche à tous les coups.

Des explications ou une piste ?, je suis intéréssé pour le fun à tout le
moins.

A+

Bonjour.

Dans le module standard, essayer comme ça :

Dim bt As Classe1

Sub bt_Add_Click()
Dim Bouton As OLEObject
Set Bouton = Sheets("database").OLEObjects.Add _
(ClassType:="Forms.CommandButton.1", Width:€, Height: )
Application.OnTime Now + TimeSerial(0, 0, 1), "Jaffect"
End Sub

Sub Jaffect()
Set bt = New Classe1
Set bt.boutonUp = Sheets("database").OLEObjects("CommandButton1").Object
End Sub

Alain CROS

"jordan" a écrit dans le message de news: 08d801c535c3$033336b0$
Bonjour,

Sous excel 97, j'essaie de créer dynamiquement des boutons
sur une feuille et de leur affecter un événement click
similaire pour tous (je suis dans la phase où je teste
qu'avec un seul bouton créé dynamiquement)
Pour cela je suis passé par un module de classe nommé classe1

dont voici le code

'--------------------------------------------
Public WithEvents boutonUp As CommandButton

Private Sub boutonUp_Click()
MsgBox "bouton clique"

End Sub
'--------------------------------------------

et dans un module standard

'--------------------------------------------
Dim bt As classe1

Sub bt_Add_Click()

set bouton > Sheets("database").OLEObjects.Add(ClassType:="Forms.CommandButton.1",
Width:€, Height: )

set bt = New classe1
set bt.boutonUp > Sheets("database").OLEObjects("CommandButton1").Object

End Sub
'--------------------------------------------

La macro bt_Add_Click est affectée à un bouton.
En cliquant sur ce bouton, un bouton est crée dynamiquement.
Il n'y a aucune erreur de compilation, d'exécution.
Le seul soucis est que le bouton créé ne réagit pas à
l'événement click

Comment faire pour que cela fonctionne

Merci

Jordan






Avatar
Alain CROS
Bonjour.

excellente réponse comme d'hab,


Je te remercie, mais n'en rajoute pas trop ...

mais saurais-tu expliquer pourquoi exactement?.

Exactement, non, mais je pense que le problème vient du fait que XL et VBA constituent 2 programmes différents qui tournent en
parallèle mais en collaboration.
Lorsqu'un contrôle est ajouté dans XL, il faut un certain temps pour que VBA reçoive l'information et mette à jour sa base de
donnée. Si tout de suite aprés la création, tu configures des paramètres conçernant VBA, cette mise à jour n'a pas été faite et VBA
ne sait pas de quoi tu parle.

My2cents.

Alain CROS

Avatar
anonymousA
Te remercie de ta réponse. Ai posé la même question sur le forum
Américain. On verra bien.
Par ailleurs, je ne suis pas flatteur par nature.D'ailleurs, je fais
rarement de compliments et pose aussi rarement de questions mais je sais
reconnaitre les réponses qui sortent de l'ordinaire.

A+

Bonjour.


excellente réponse comme d'hab,



Je te remercie, mais n'en rajoute pas trop ...

mais saurais-tu expliquer pourquoi exactement?.

Exactement, non, mais je pense que le problème vient du fait que XL et VBA constituent 2 programmes différents qui tournent en
parallèle mais en collaboration.
Lorsqu'un contrôle est ajouté dans XL, il faut un certain temps pour que VBA reçoive l'information et mette à jour sa base de
donnée. Si tout de suite aprés la création, tu configures des paramètres conçernant VBA, cette mise à jour n'a pas été faite et VBA
ne sait pas de quoi tu parle.

My2cents.

Alain CROS