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

public sub dans un Workbook

2 réponses
Avatar
myname
Bonjour,

je crée une "public sub test" dans la partie "ThisWorkbook" d'un classeur.

Je voudrais l'appeler depuis un autre classseur.

Après ouverture dans une variable wb, je fais :

wb.test

Mais ça me répond "cet objet ne gère pas cette méthode".

Par contre, si je la mets dans une feuille et écris :

wb.sheets(1).test

Ca marche !

Comment puis-je résoudre mon problème d'appel vers ThisWorkbook ?

2 réponses

Avatar
papou
Bonjour
Il n'y a pas d'intérêt de déclarer une macro publique dans l'objet
ThisWorkbook
Les macros appartiennent au classeur,certes, mais dans sa globalité, soit
tous les objets qui en dépendent (Microsoft Excel objets, Feuilles,
Thisworkbook, Modules et Modules de classe)
Pour résoudre ton souci, il faut déclarer ta macro publique dans un module.

Cordialement
Pascal

"myname" a écrit dans le message de news:
440823ca$
Bonjour,

je crée une "public sub test" dans la partie "ThisWorkbook" d'un classeur.

Je voudrais l'appeler depuis un autre classseur.

Après ouverture dans une variable wb, je fais :

wb.test

Mais ça me répond "cet objet ne gère pas cette méthode".

Par contre, si je la mets dans une feuille et écris :

wb.sheets(1).test

Ca marche !

Comment puis-je résoudre mon problème d'appel vers ThisWorkbook ?





Avatar
michdenis
Bonjour MyName,

De façon générale pour appeler une macro dans un autre classeur ouvert,

Il y a cette syntaxe seulement si ta macro est dans un module standard.
Que ta macro soit déclarée "Private" ou "Public" ne fait pas de différence
si tu utilise la commande : Application.Run...
Application.Run "Classeur1.xls!NomDeLaMacro"

Si ta macro est situé dans un module de classe : ThisWorkboo, Toutes les feuilles module
ou si tu as ajouté un module de classe ...
Tu dois spécifier dans quel module de classe se situe ta macro.
Attention, tu dois utiliser le nom des objets et non pas le nom des onglets
des feuilles par exemple.
Application.Run "Classeur4!ThisWorkbook.test"


P.S. Lorsque dans un module de classe, tu affubles la déclaration d'une macro de "Public",
tu ajoutes à ce module de classe une méthode et elle est accesible dans tout le classeur :

Exemple : En module de la feuil1 d'un classeur
Public Sub Denis()
Msgbox "Bonjour"
End Sub

Observe ce qui se passe, si dans la feuille module Feuil2,
tu inscris dans une ligne de code Feuil1.Denis ... si après
le point tu type D... dans la liste proposée des méthodes et propriétés
de la feuil2, tu retrouveras "Denis" avec le même icône que
la méthode "Delete".

Si tu définis dans le haut d'un module de classe une variable "Public"
la variable ainsi définit devient une propriété de ce module de classe.



Salutations!





"myname" a écrit dans le message de news: 440823ca$
Bonjour,

je crée une "public sub test" dans la partie "ThisWorkbook" d'un classeur.

Je voudrais l'appeler depuis un autre classseur.

Après ouverture dans une variable wb, je fais :

wb.test

Mais ça me répond "cet objet ne gère pas cette méthode".

Par contre, si je la mets dans une feuille et écris :

wb.sheets(1).test

Ca marche !

Comment puis-je résoudre mon problème d'appel vers ThisWorkbook ?