focdagosu
Messages postés6Date d'inscriptionlundi 20 novembre 2006StatutMembreDernière intervention20 novembre 2008
-
14 nov. 2008 à 20:59
focdagosu
Messages postés6Date d'inscriptionlundi 20 novembre 2006StatutMembreDernière intervention20 novembre 2008
-
20 nov. 2008 à 23:06
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. Si je veux le créer dans ma feuille interface (celle qui contient le code), 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.
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).
cs_Orohena
Messages postés577Date d'inscriptionvendredi 26 septembre 2008StatutMembreDernière intervention20 novembre 20104 14 nov. 2008 à 21:59
Bonjour focdagosu
J'ai simulé ta situation et j'ai rencontré la même erreur. En fait, la macro test2, qui est dans ta feuille interface, n'est pas "visible" dans ton newSheet. Si tu peux la mettre dans un module, ça résoudra ton problème.
Si tu ne peux pas la déplacer, tu peux créer une macro intermédiaire dans un module :
focdagosu
Messages postés6Date d'inscriptionlundi 20 novembre 2006StatutMembreDernière intervention20 novembre 2008 19 nov. 2008 à 05:26
salut,
J'ai du mal m'exprimer. En faite, la feuille interface est celle qui lance les fonctions (des boutons créés avec l'éditeur d'objet). Les fonctions sont placées dans des modules, mais il reste que la feuille "référence" est la feuille interface.
Moi je voudrais créer mes nouveaux boutons sur une feuille créée dans un nouveaux workbook. Ca ne doit pas être très compliqué, mais quelque chose doit m'échaper.
Si quelqu'un à une idée... merci d'avance !
Bye
Maxence
Vous n’avez pas trouvé la réponse que vous recherchez ?
focdagosu
Messages postés6Date d'inscriptionlundi 20 novembre 2006StatutMembreDernière intervention20 novembre 2008 20 nov. 2008 à 15:48
Bonjour,
J'aimerais bien pouvoir vous répondre, mais je ne sais pas vraiment comment tester cela.
En faite j'ai ma feuil1 de mon fichier Excel (que j'ouvre en tant que page de démarrage du programme). Celui ci contient juste des boutons, qui renvoie vers des fonctions contenues dans des modules. Ce sont ces fonctions qui créent le nouveau Workbook et font les calculs.
Après je ne sais pas comment je pourrais tester si ce nouveau Workbook peut accéder aux fonctions (enfin aux SUB plutot, qui sont toutes en PUBLIC).
Si tu as une idée de comment je peux tester ca, je suis preneur !
cs_Orohena
Messages postés577Date d'inscriptionvendredi 26 septembre 2008StatutMembreDernière intervention20 novembre 20104 20 nov. 2008 à 19:37
Bonjour focdagosu
Compte tenu des explications que tu as données, je pense qu'il faut modifier ta propriété OnAction pour spécifier que la macro test2 se trouve dans le classeur Actuel :
Public Sub CreateButtonTest1(nomClient)
ActiveSheet.Buttons.Add(199.5, 300, 81, 36).Select
Selection.Name = nomClient
Selection.OnAction = "Actuel!test2"
End Sub
focdagosu
Messages postés6Date d'inscriptionlundi 20 novembre 2006StatutMembreDernière intervention20 novembre 2008 20 nov. 2008 à 23:06
Bonjour,
Mon fichier Excel s'appelle "interfaceCNH.xlsm" et ma feuille (avec les boutons qui lancent mon programme) s'appelle "Programme". J'ai essayé avec:
Selection.OnAction = " interfaceCNH!test2 "
puis avec
"interfaceCNH!Programme!test2"
et enfin avec
"Programme!test2"
et
"Feuil1!test2"
Mais toujours "Propriété ou méthode non géré par cet objet".
Par contre la procédure avec laquelle je veux travailler est:
Public Sub CreateButtonTest2(newSheet, nomClient)
newSheet.Buttons.Add(199.5, 300, 81, 36).Select
Selection.Name = nomClient
Selection.OnAction = "Feuil1!test2"
End Sub
Car celle avec ActiveSheet fonctionne (mais place les boutons dans le classeur qui lance la fonction, alors que je veux les placer dans une nouvelle feuille d'un nouveau classeur).
focdagosu
Messages postés6Date d'inscriptionlundi 20 novembre 2006StatutMembreDernière intervention20 novembre 2008 20 nov. 2008 à 23:06
Bonjour,
Mon fichier Excel s'appelle "interfaceCNH.xlsm" et ma feuille (avec les boutons qui lancent mon programme) s'appelle "Programme". J'ai essayé avec:
Selection.OnAction = " interfaceCNH!test2 "
puis avec
"interfaceCNH!Programme!test2"
et enfin avec
"Programme!test2"
et
"Feuil1!test2"
Mais toujours "Propriété ou méthode non géré par cet objet".
Par contre la procédure avec laquelle je veux travailler est:
Public Sub CreateButtonTest2(newSheet, nomClient)
newSheet.Buttons.Add(199.5, 300, 81, 36).Select
Selection.Name = nomClient
Selection.OnAction = "Feuil1!test2"
End Sub
Car celle avec ActiveSheet fonctionne (mais place les boutons dans le classeur qui lance la fonction, alors que je veux les placer dans une nouvelle feuille d'un nouveau classeur).