VBA: Créer un boutton dynamiquement ?

VBA: Créer un boutton dynamiquement ? - VB/VBA/VBS - Programmation

Marsh Posté le 22-11-2008 à 16:30:34    

Bonjour,
 
J'ai un problème qui doit certainement être tout simple, mais même après avoir épluché tous les codes sources que j'ai pu trouvé, je n'ai pas réussi à le résoudre.
 
Je veux simple créer un bouton, pour ensuite lui associer une fonction pré-existante. Le problème est que je veux créer ce bouton dans une feuille excel que je viens de créer dynamiquement (elle même dans un workbook que je viens de créer dynamiquement). Si je veux le créer dans ma feuille interface (celle qui contient le code, ou plus exactement les boutons qui lance les fonctions contenue dans des modules), pas de problème, le code suivant fonctionne:
 
Public Sub CreateButtonTest1(nomClient)
    ActiveSheet.Buttons.Add(199.5, 300, 81, 36).Select
    Selection.Name = nomClient
    Selection.OnAction = "test2"
End Sub
 
Par contre, quand j'essaie de passer en argument mon objet WorkSheet, ca ne fonctionne pas:
 
(newSheet est du type Worksheet, créé à partir d'un nouveau WorkBook
et nomClient est de type string).
 
Public Sub CreateButtonTest2(newSheet, nomClient)
    newSheet.Buttons.Add(199.5, 300, 81, 36).Select
    Selection.Name = nomClient
    Selection.OnAction = "test2"
End Sub
 
L'erreur est: "438"
Propriété ou méthode non géré par cet objet
et le débuggeur bug à la ligne Selection.OnAction = "test2"
 
A noter que le bouton est bien créé la ou je veux (dans mon newSheet), mais inutilisable car pas de lien vers une fonction.
 
Sur un autre forum, quelqu'un m'a suggéré que c'était probablement un problème de visibilité de mes fonctions dans la nouvelle feuille du nouveau classeur, mais je n'ai pas réussi à résoudre le problème.  
 
 
Si quelqu'un a une idée d'ou peut venir le problème, je lui serai vraiment reconnaissant !
Une autre solution serait de changer le ActiveSheet, mais je n'ai pas réussi (pourtant ca doit être possible et facile).
 
Merci d'avance,
Maxence

Reply

Marsh Posté le 22-11-2008 à 16:30:34   

Reply

Marsh Posté le 25-11-2008 à 12:05:25    

Bonjour
 
Tu entres quoi dans ton parametres newSheet ? Une chaine ? Genre feuil1 ?
 
Si c'est le cas essaie ca :
Sheets(newSheet).Buttons.Add(199.5, 300, 81, 36).Select
Tu ne déclares pas que ta chaine newSheet est une feuille donc le Buttons.add doit merder.
 
Tu peux aussi définir ton parametre newSheet comme etant une feuille justement :
Public Sub CreateButtonTest2(newSheet As Sheets, nomClient) et là methode add doit fonctionner
 
Ensuite nul part dans ton exemple tu nous mets la fonction 'test2' justement. Si tu definis le OnAction du bouton avec un nom de fonction elle doit forcement exister dans le classeur... Ou alors il faut lui faire reference si elle est dans un autre classeur (ouvert)
 
Chez moi ca marche ca si je lance 'zozo' ensuite je click sur mon bouton et j'ai bien mon msgbox :

Citation :

Sub titi(newSheet)
    Sheets(newSheet).Buttons.Add(199.5, 300, 81, 36).Select
    Selection.Name = nomClient
    Selection.OnAction = "test2"
 
End Sub
 
Function test2()
MsgBox "toto"
End Function
 
Sub zozo()
Call titi("feuil1" )
End Sub


 
Cordialement


Message édité par SuppotDeSaTante le 25-11-2008 à 12:18:43

---------------
Soyez malin, louez entre voisins !
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed