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

comment exécuter une Procédure Sub Privat ?

12 réponses
Avatar
bartez
Bonjour,

Je cherche à éxécuter une procédure de type Sub Privat à partir d'un autre
classeur.
Ma procédure s'appelle "Mise_à_Jour"
Elle est dans le module "Menu" du classeur "Base.xls"
Ce classeur "Base" est masqué à l'affichage.

Merci de votre aide
Philippe

10 réponses

1 2
Avatar
michdenis
Bonsoir Philippe,

Attention : La ligne de déclaration de ta macro ne peut pas contenir l'expression "Private" comme dans Private sub toto() , car le
mot "Private" limite la portée de la macro seulement au module où elle est située. Elle ne peut pas être appelée par une autre
procédure à l'extérieur de ce module. La même problématique s'applique si dans le haut du module où sont tes macros que tu désires
appeler, tu utilises l'expression suivante : "Option Private Module"


Exécuter une macro d'un autre classeur:

A )
Nom de la macro : "test1"
Si ton classeur est fermé et que la macro appelée se retrouve dans un module standard :
Application.Run "'C:Mes documentsAnswer.xls'!test1"

Même chose mais si le classeur est déjà ouvert :
Application.Run "Answer.xls!test1"

B ) Si le nom de ton classeur contient des espaces :

L'utilisation des apostrophes "'" permet d'utiliser
un nom de classeur contenant des espaces , sans
ces dernières, point de salut.
Dim LaMacro As String
LaMacro = "'" & ThisWorkbook.Name & "'!test1"
Application.Run LaMacro

C) Si la macro appelée est dans un module feuille du classeur au lieu d'être dans un module Standard :

Dans la ligne de commande, tu dois insérer le nom de l'objet "Feuille" que tu retrouves dans la fenêtre VBE (visual basic editor).
Dans la fenêtre de gauche de ton projet, la liste des feuilles est affichée dans ce format : "toto"("Feuil4")
toto = Nom de l'onglet de la feuille
Feuil4 = Propriété Name de l'objet Feuille (worksheet)
Dans la commande suiivante, tu dois utiliser le nom de la feuille et non de l'onglet de la feuille

Si le fichier est ouvert :
Application.Run "modele.xls!Feuil4.test1"

Si le fichier est fermé :
Application.Run "'C:Mes documentsAnswer.xls'!Feuil4.test1"



Salutations!




"bartez" a écrit dans le message de news:
Bonjour,

Je cherche à éxécuter une procédure de type Sub Privat à partir d'un autre
classeur.
Ma procédure s'appelle "Mise_à_Jour"
Elle est dans le module "Menu" du classeur "Base.xls"
Ce classeur "Base" est masqué à l'affichage.

Merci de votre aide
Philippe
Avatar
bartez
Merci pour tous tes renseignements, ils viennent de m'éclairer sur pas mal
de difficultés que j'avais et vont donc m'être très utiles.

Une autre petite question : tu as écris ceci.

Attention : La ligne de déclaration de ta macro ne peut pas contenir
l'expression "Private" comme dans Private sub toto() , car le
mot "Private" limite la portée de la macro seulement au module où elle est
située. Elle ne peut pas être appelée par une autre
procédure à l'extérieur de ce module. La même problématique s'applique si
dans le haut du module où sont tes macros que tu désires
appeler, tu utilises l'expression suivante : "Option Private Module"


Si je veux pouvoir appeler ma macro à partir d'un autre module, mais que je
ne veux pas que cette macro apparaisse en faisant ALT+F8.
Existe-t-il une solution ?
Je déclarais en effet certaines de mes macros comme Privat pour qu'elles ne
puissent pas être lancées par qqun à un moment inoportun. Mais je
n'utilisais peut être pas la bonne méthode.

Merci de ton aide
Philippe

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

Bonsoir Philippe,

Attention : La ligne de déclaration de ta macro ne peut pas contenir
l'expression "Private" comme dans Private sub toto() , car le
mot "Private" limite la portée de la macro seulement au module où elle est
située. Elle ne peut pas être appelée par une autre
procédure à l'extérieur de ce module. La même problématique s'applique si
dans le haut du module où sont tes macros que tu désires
appeler, tu utilises l'expression suivante : "Option Private Module"


Exécuter une macro d'un autre classeur:

A )
Nom de la macro : "test1"
Si ton classeur est fermé et que la macro appelée se retrouve dans un
module standard :
Application.Run "'C:Mes documentsAnswer.xls'!test1"

Même chose mais si le classeur est déjà ouvert :
Application.Run "Answer.xls!test1"

B ) Si le nom de ton classeur contient des espaces :

L'utilisation des apostrophes "'" permet d'utiliser
un nom de classeur contenant des espaces , sans
ces dernières, point de salut.
Dim LaMacro As String
LaMacro = "'" & ThisWorkbook.Name & "'!test1"
Application.Run LaMacro

C) Si la macro appelée est dans un module feuille du classeur au lieu
d'être dans un module Standard :

Dans la ligne de commande, tu dois insérer le nom de l'objet "Feuille" que
tu retrouves dans la fenêtre VBE (visual basic editor).
Dans la fenêtre de gauche de ton projet, la liste des feuilles est
affichée dans ce format : "toto"("Feuil4")
toto = Nom de l'onglet de la feuille
Feuil4 = Propriété Name de l'objet Feuille (worksheet)
Dans la commande suiivante, tu dois utiliser le nom de la feuille et non
de l'onglet de la feuille

Si le fichier est ouvert :
Application.Run "modele.xls!Feuil4.test1"

Si le fichier est fermé :
Application.Run "'C:Mes documentsAnswer.xls'!Feuil4.test1"



Salutations!




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

Bonjour,

Je cherche à éxécuter une procédure de type Sub Privat à partir d'un autre
classeur.
Ma procédure s'appelle "Mise_à_Jour"
Elle est dans le module "Menu" du classeur "Base.xls"
Ce classeur "Base" est masqué à l'affichage.

Merci de votre aide
Philippe





Avatar
MPi
Salut,

Je ne sais pas si c'est possible dans ton cas, mais si tu mets un paramètre
à ta fonction, même s'il ne sert à rien, cette fonction n'apparaîtra pas dans
la liste des macros (Alt-F8)

Michel


Merci pour tous tes renseignements, ils viennent de m'éclairer sur pas mal
de difficultés que j'avais et vont donc m'être très utiles.

Une autre petite question : tu as écris ceci.

Attention : La ligne de déclaration de ta macro ne peut pas contenir
l'expression "Private" comme dans Private sub toto() , car le
mot "Private" limite la portée de la macro seulement au module où elle est
située. Elle ne peut pas être appelée par une autre
procédure à l'extérieur de ce module. La même problématique s'applique si
dans le haut du module où sont tes macros que tu désires
appeler, tu utilises l'expression suivante : "Option Private Module"


Si je veux pouvoir appeler ma macro à partir d'un autre module, mais que je
ne veux pas que cette macro apparaisse en faisant ALT+F8.
Existe-t-il une solution ?
Je déclarais en effet certaines de mes macros comme Privat pour qu'elles ne
puissent pas être lancées par qqun à un moment inoportun. Mais je
n'utilisais peut être pas la bonne méthode.

Merci de ton aide
Philippe

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

Bonsoir Philippe,

Attention : La ligne de déclaration de ta macro ne peut pas contenir
l'expression "Private" comme dans Private sub toto() , car le
mot "Private" limite la portée de la macro seulement au module où elle est
située. Elle ne peut pas être appelée par une autre
procédure à l'extérieur de ce module. La même problématique s'applique si
dans le haut du module où sont tes macros que tu désires
appeler, tu utilises l'expression suivante : "Option Private Module"


Exécuter une macro d'un autre classeur:

A )
Nom de la macro : "test1"
Si ton classeur est fermé et que la macro appelée se retrouve dans un
module standard :
Application.Run "'C:Mes documentsAnswer.xls'!test1"

Même chose mais si le classeur est déjà ouvert :
Application.Run "Answer.xls!test1"

B ) Si le nom de ton classeur contient des espaces :

L'utilisation des apostrophes "'" permet d'utiliser
un nom de classeur contenant des espaces , sans
ces dernières, point de salut.
Dim LaMacro As String
LaMacro = "'" & ThisWorkbook.Name & "'!test1"
Application.Run LaMacro

C) Si la macro appelée est dans un module feuille du classeur au lieu
d'être dans un module Standard :

Dans la ligne de commande, tu dois insérer le nom de l'objet "Feuille" que
tu retrouves dans la fenêtre VBE (visual basic editor).
Dans la fenêtre de gauche de ton projet, la liste des feuilles est
affichée dans ce format : "toto"("Feuil4")
toto = Nom de l'onglet de la feuille
Feuil4 = Propriété Name de l'objet Feuille (worksheet)
Dans la commande suiivante, tu dois utiliser le nom de la feuille et non
de l'onglet de la feuille

Si le fichier est ouvert :
Application.Run "modele.xls!Feuil4.test1"

Si le fichier est fermé :
Application.Run "'C:Mes documentsAnswer.xls'!Feuil4.test1"



Salutations!




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

Bonjour,

Je cherche à éxécuter une procédure de type Sub Privat à partir d'un autre
classeur.
Ma procédure s'appelle "Mise_à_Jour"
Elle est dans le module "Menu" du classeur "Base.xls"
Ce classeur "Base" est masqué à l'affichage.

Merci de votre aide
Philippe










Avatar
Ange Ounis
Je déclarais en effet certaines de mes macros comme Privat pour qu'elles ne
puissent pas être lancées par qqun à un moment inoportun. Mais je
n'utilisais peut être pas la bonne méthode.


Essaye plutôt d'écrire en tête du module qui contient ces macros que tu veux
cacher au "qqun" en question :

Option Private Module

Cette instruction déclare en quelque sorte l'accès aux procédures de ce module
réservé au code VBA du projet (ie aux autres procédures) et elles n'apparaissent
pas dans la boite de dialogue OutilsMacroMacros...
On peut malgré tout toujours les exécuter par l'intermédiaire de cette boite de
dialogue mais à condition de connaître leur nom exact.

----------
Ange Ounis
----------

Merci pour tous tes renseignements, ils viennent de m'éclairer sur pas mal
de difficultés que j'avais et vont donc m'être très utiles.

Une autre petite question : tu as écris ceci.


Attention : La ligne de déclaration de ta macro ne peut pas contenir
l'expression "Private" comme dans Private sub toto() , car le
mot "Private" limite la portée de la macro seulement au module où elle est
située. Elle ne peut pas être appelée par une autre
procédure à l'extérieur de ce module. La même problématique s'applique si
dans le haut du module où sont tes macros que tu désires
appeler, tu utilises l'expression suivante : "Option Private Module"



Si je veux pouvoir appeler ma macro à partir d'un autre module, mais que je
ne veux pas que cette macro apparaisse en faisant ALT+F8.
Existe-t-il une solution ?
Je déclarais en effet certaines de mes macros comme Privat pour qu'elles ne
puissent pas être lancées par qqun à un moment inoportun. Mais je
n'utilisais peut être pas la bonne méthode.

Merci de ton aide
Philippe

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


Bonsoir Philippe,

Attention : La ligne de déclaration de ta macro ne peut pas contenir
l'expression "Private" comme dans Private sub toto() , car le
mot "Private" limite la portée de la macro seulement au module où elle est
située. Elle ne peut pas être appelée par une autre
procédure à l'extérieur de ce module. La même problématique s'applique si
dans le haut du module où sont tes macros que tu désires
appeler, tu utilises l'expression suivante : "Option Private Module"


Exécuter une macro d'un autre classeur:

A )
Nom de la macro : "test1"
Si ton classeur est fermé et que la macro appelée se retrouve dans un
module standard :
Application.Run "'C:Mes documentsAnswer.xls'!test1"

Même chose mais si le classeur est déjà ouvert :
Application.Run "Answer.xls!test1"

B ) Si le nom de ton classeur contient des espaces :

L'utilisation des apostrophes "'" permet d'utiliser
un nom de classeur contenant des espaces , sans
ces dernières, point de salut.
Dim LaMacro As String
LaMacro = "'" & ThisWorkbook.Name & "'!test1"
Application.Run LaMacro

C) Si la macro appelée est dans un module feuille du classeur au lieu
d'être dans un module Standard :

Dans la ligne de commande, tu dois insérer le nom de l'objet "Feuille" que
tu retrouves dans la fenêtre VBE (visual basic editor).
Dans la fenêtre de gauche de ton projet, la liste des feuilles est
affichée dans ce format : "toto"("Feuil4")
toto = Nom de l'onglet de la feuille
Feuil4 = Propriété Name de l'objet Feuille (worksheet)
Dans la commande suiivante, tu dois utiliser le nom de la feuille et non
de l'onglet de la feuille

Si le fichier est ouvert :
Application.Run "modele.xls!Feuil4.test1"

Si le fichier est fermé :
Application.Run "'C:Mes documentsAnswer.xls'!Feuil4.test1"



Salutations!




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

Bonjour,

Je cherche à éxécuter une procédure de type Sub Privat à partir d'un autre
classeur.
Ma procédure s'appelle "Mise_à_Jour"
Elle est dans le module "Menu" du classeur "Base.xls"
Ce classeur "Base" est masqué à l'affichage.

Merci de votre aide
Philippe










Avatar
bartez
Je croyais que Option Private Module m'interdisait par la suite de faire
appel à une procédure contenue dans ce module à partir d'un autre classeur
ou un autre module.

tu peux m'en expliquer un peu plus svp !

Je cherche à lancer une procédure contenu dans un autre classeur sans que
cette procédure ne soit utilisable en dehors du code VBA. c'est à dire que
personne ne puisse la lancer en faisant Outils, Macro, éxécuter une macro.

Merci de ton aide
Philippe

"Ange Ounis" a écrit dans le message de news:

Je déclarais en effet certaines de mes macros comme Privat pour qu'elles
ne
puissent pas être lancées par qqun à un moment inoportun. Mais je
n'utilisais peut être pas la bonne méthode.


Essaye plutôt d'écrire en tête du module qui contient ces macros que tu
veux cacher au "qqun" en question :

Option Private Module

Cette instruction déclare en quelque sorte l'accès aux procédures de ce
module réservé au code VBA du projet (ie aux autres procédures) et elles
n'apparaissent pas dans la boite de dialogue OutilsMacroMacros...
On peut malgré tout toujours les exécuter par l'intermédiaire de cette
boite de dialogue mais à condition de connaître leur nom exact.

----------
Ange Ounis
----------

Merci pour tous tes renseignements, ils viennent de m'éclairer sur pas
mal de difficultés que j'avais et vont donc m'être très utiles.

Une autre petite question : tu as écris ceci.


Attention : La ligne de déclaration de ta macro ne peut pas contenir
l'expression "Private" comme dans Private sub toto() , car le
mot "Private" limite la portée de la macro seulement au module où elle
est située. Elle ne peut pas être appelée par une autre
procédure à l'extérieur de ce module. La même problématique s'applique si
dans le haut du module où sont tes macros que tu désires
appeler, tu utilises l'expression suivante : "Option Private Module"



Si je veux pouvoir appeler ma macro à partir d'un autre module, mais que
je ne veux pas que cette macro apparaisse en faisant ALT+F8.
Existe-t-il une solution ?
Je déclarais en effet certaines de mes macros comme Privat pour qu'elles
ne puissent pas être lancées par qqun à un moment inoportun. Mais je
n'utilisais peut être pas la bonne méthode.

Merci de ton aide
Philippe

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


Bonsoir Philippe,

Attention : La ligne de déclaration de ta macro ne peut pas contenir
l'expression "Private" comme dans Private sub toto() , car le
mot "Private" limite la portée de la macro seulement au module où elle
est située. Elle ne peut pas être appelée par une autre
procédure à l'extérieur de ce module. La même problématique s'applique si
dans le haut du module où sont tes macros que tu désires
appeler, tu utilises l'expression suivante : "Option Private Module"


Exécuter une macro d'un autre classeur:

A )
Nom de la macro : "test1"
Si ton classeur est fermé et que la macro appelée se retrouve dans un
module standard :
Application.Run "'C:Mes documentsAnswer.xls'!test1"

Même chose mais si le classeur est déjà ouvert :
Application.Run "Answer.xls!test1"

B ) Si le nom de ton classeur contient des espaces :

L'utilisation des apostrophes "'" permet d'utiliser
un nom de classeur contenant des espaces , sans
ces dernières, point de salut.
Dim LaMacro As String
LaMacro = "'" & ThisWorkbook.Name & "'!test1"
Application.Run LaMacro

C) Si la macro appelée est dans un module feuille du classeur au lieu
d'être dans un module Standard :

Dans la ligne de commande, tu dois insérer le nom de l'objet "Feuille"
que tu retrouves dans la fenêtre VBE (visual basic editor).
Dans la fenêtre de gauche de ton projet, la liste des feuilles est
affichée dans ce format : "toto"("Feuil4")
toto = Nom de l'onglet de la feuille
Feuil4 = Propriété Name de l'objet Feuille (worksheet)
Dans la commande suiivante, tu dois utiliser le nom de la feuille et non
de l'onglet de la feuille

Si le fichier est ouvert :
Application.Run "modele.xls!Feuil4.test1"

Si le fichier est fermé :
Application.Run "'C:Mes documentsAnswer.xls'!Feuil4.test1"



Salutations!




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

Bonjour,

Je cherche à éxécuter une procédure de type Sub Privat à partir d'un
autre
classeur.
Ma procédure s'appelle "Mise_à_Jour"
Elle est dans le module "Menu" du classeur "Base.xls"
Ce classeur "Base" est masqué à l'affichage.

Merci de votre aide
Philippe











Avatar
michdenis
Bonjour Bartez,

Tu as une très bonne question...J'avoue que ma réponse n'était pas très claire concernant l'utilisation du mot "Private " dans la
déclaration d'une procédure et de l'expression "Option Private module" dans le haut du module.

***Utilisation de Application.Run "NomMacro****

Pour appeler une macro, si on utilise "Application.Run "NomMacro" tel que j'ai défini dans mon premier message, Il est possible
d'exécuter ladite "Macro" nonobstant que l'on ait eu recours à "Private" dans la déclaration de la macro appelée ou à "Option
Private module" dans le haut du module ou que l'on ait utilisé la combinaison des 2. Cette affirmation est vraie dans tous les cas
de figure.

1- la macro appelée est dans le même classeur que la macro appelante
2- la macro appelée est dans un autre classeur.xls
3= la macro appelée se retrouve dans un fichier de type "Xla" - Macro complémentaire.


***Sans l'utilisation de Application.Run "NomMacro****
**** Utilisant seulement le nom de la macro appelée****

Pour appeler une macro, si on utilise seulement son "Nom" ...

1- dans le même classeur :
Utilisation de Private dans la déclaration limite l'appel de la macro par son NOM par les autres modules du projet.
Dans ce cas, "Option Private module" est sans objet... n'impose aucune limite.

2 - dans un autre classeur de type XLS :
l'utilisation de "Application.Run" est nécessaire donc toutes les macros sont accessibles nonobstant "private sub.." ou Option
Private Module

3- dans un classeur de type xla ( macro complémentaire)
Si on ajoute à un projet la référence d'une macro complémentaire, il est possible d'utiliser seulement le "Nom" de la macro comme si
les modules ce fichier .xla faisait parti du projet .xls en cours. Cependant, si la macro appelée est située dans un module dont l'
option "Option Private module" est définie, aucune des procédures de ce module ne sera disponible pour le projet en cours. Ces
procédures ne seront disponibles que pour les modules du classeur.xla dans lequels elles se retrouvent. Dans le cas ou l'option
"option Private module" n'est pas défini dans le haut du module du fichier xla, mais que la macro appelée possède "private" dans sa
déclaration, seulement les procédures définies de cette manière (avec private dans leur déclaration) ne seront accessibles.



Salutations!


"bartez" a écrit dans le message de news: %
Je croyais que Option Private Module m'interdisait par la suite de faire
appel à une procédure contenue dans ce module à partir d'un autre classeur
ou un autre module.

tu peux m'en expliquer un peu plus svp !

Je cherche à lancer une procédure contenu dans un autre classeur sans que
cette procédure ne soit utilisable en dehors du code VBA. c'est à dire que
personne ne puisse la lancer en faisant Outils, Macro, éxécuter une macro.

Merci de ton aide
Philippe

"Ange Ounis" a écrit dans le message de news:

Je déclarais en effet certaines de mes macros comme Privat pour qu'elles
ne
puissent pas être lancées par qqun à un moment inoportun. Mais je
n'utilisais peut être pas la bonne méthode.


Essaye plutôt d'écrire en tête du module qui contient ces macros que tu
veux cacher au "qqun" en question :

Option Private Module

Cette instruction déclare en quelque sorte l'accès aux procédures de ce
module réservé au code VBA du projet (ie aux autres procédures) et elles
n'apparaissent pas dans la boite de dialogue OutilsMacroMacros...
On peut malgré tout toujours les exécuter par l'intermédiaire de cette
boite de dialogue mais à condition de connaître leur nom exact.

----------
Ange Ounis
----------

Merci pour tous tes renseignements, ils viennent de m'éclairer sur pas
mal de difficultés que j'avais et vont donc m'être très utiles.

Une autre petite question : tu as écris ceci.


Attention : La ligne de déclaration de ta macro ne peut pas contenir
l'expression "Private" comme dans Private sub toto() , car le
mot "Private" limite la portée de la macro seulement au module où elle
est située. Elle ne peut pas être appelée par une autre
procédure à l'extérieur de ce module. La même problématique s'applique si
dans le haut du module où sont tes macros que tu désires
appeler, tu utilises l'expression suivante : "Option Private Module"



Si je veux pouvoir appeler ma macro à partir d'un autre module, mais que
je ne veux pas que cette macro apparaisse en faisant ALT+F8.
Existe-t-il une solution ?
Je déclarais en effet certaines de mes macros comme Privat pour qu'elles
ne puissent pas être lancées par qqun à un moment inoportun. Mais je
n'utilisais peut être pas la bonne méthode.

Merci de ton aide
Philippe

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


Bonsoir Philippe,

Attention : La ligne de déclaration de ta macro ne peut pas contenir
l'expression "Private" comme dans Private sub toto() , car le
mot "Private" limite la portée de la macro seulement au module où elle
est située. Elle ne peut pas être appelée par une autre
procédure à l'extérieur de ce module. La même problématique s'applique si
dans le haut du module où sont tes macros que tu désires
appeler, tu utilises l'expression suivante : "Option Private Module"


Exécuter une macro d'un autre classeur:

A )
Nom de la macro : "test1"
Si ton classeur est fermé et que la macro appelée se retrouve dans un
module standard :
Application.Run "'C:Mes documentsAnswer.xls'!test1"

Même chose mais si le classeur est déjà ouvert :
Application.Run "Answer.xls!test1"

B ) Si le nom de ton classeur contient des espaces :

L'utilisation des apostrophes "'" permet d'utiliser
un nom de classeur contenant des espaces , sans
ces dernières, point de salut.
Dim LaMacro As String
LaMacro = "'" & ThisWorkbook.Name & "'!test1"
Application.Run LaMacro

C) Si la macro appelée est dans un module feuille du classeur au lieu
d'être dans un module Standard :

Dans la ligne de commande, tu dois insérer le nom de l'objet "Feuille"
que tu retrouves dans la fenêtre VBE (visual basic editor).
Dans la fenêtre de gauche de ton projet, la liste des feuilles est
affichée dans ce format : "toto"("Feuil4")
toto = Nom de l'onglet de la feuille
Feuil4 = Propriété Name de l'objet Feuille (worksheet)
Dans la commande suiivante, tu dois utiliser le nom de la feuille et non
de l'onglet de la feuille

Si le fichier est ouvert :
Application.Run "modele.xls!Feuil4.test1"

Si le fichier est fermé :
Application.Run "'C:Mes documentsAnswer.xls'!Feuil4.test1"



Salutations!




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

Bonjour,

Je cherche à éxécuter une procédure de type Sub Privat à partir d'un
autre
classeur.
Ma procédure s'appelle "Mise_à_Jour"
Elle est dans le module "Menu" du classeur "Base.xls"
Ce classeur "Base" est masqué à l'affichage.

Merci de votre aide
Philippe











Avatar
bartez
Ok, merci michdenis, je crois que cette fois j'ai compris ;)

Je vais toutes les redéclarer en Public pour pouvoir les atteindre par
Application.Run. Par contre j'ai du boulot pour leur ajouter des tests en
pagaille pour bloquer ces procédures au cas ou qqun en exécuterais une dans
un mauvais contexte. J'ai en effet quelques procédures qui me reformate un
tabeau en effaçant toutes les valeurs saisies sans aucun control.

Merci de ton aide, je vais me mettre au boulot tout de suite ;)

Philippe

"michdenis" a écrit dans le message de news:
%
Bonjour Bartez,

Tu as une très bonne question...J'avoue que ma réponse n'était pas très
claire concernant l'utilisation du mot "Private " dans la
déclaration d'une procédure et de l'expression "Option Private module"
dans le haut du module.

***Utilisation de Application.Run "NomMacro****

Pour appeler une macro, si on utilise "Application.Run "NomMacro" tel que
j'ai défini dans mon premier message, Il est possible
d'exécuter ladite "Macro" nonobstant que l'on ait eu recours à "Private"
dans la déclaration de la macro appelée ou à "Option
Private module" dans le haut du module ou que l'on ait utilisé la
combinaison des 2. Cette affirmation est vraie dans tous les cas
de figure.

1- la macro appelée est dans le même classeur que la macro appelante
2- la macro appelée est dans un autre classeur.xls
3= la macro appelée se retrouve dans un fichier de type "Xla" - Macro
complémentaire.


***Sans l'utilisation de Application.Run "NomMacro****
**** Utilisant seulement le nom de la macro appelée****

Pour appeler une macro, si on utilise seulement son "Nom" ...

1- dans le même classeur :
Utilisation de Private dans la déclaration limite l'appel de la macro par
son NOM par les autres modules du projet.
Dans ce cas, "Option Private module" est sans objet... n'impose aucune
limite.

2 - dans un autre classeur de type XLS :
l'utilisation de "Application.Run" est nécessaire donc toutes les macros
sont accessibles nonobstant "private sub.." ou Option
Private Module

3- dans un classeur de type xla ( macro complémentaire)
Si on ajoute à un projet la référence d'une macro complémentaire, il est
possible d'utiliser seulement le "Nom" de la macro comme si
les modules ce fichier .xla faisait parti du projet .xls en cours.
Cependant, si la macro appelée est située dans un module dont l'
option "Option Private module" est définie, aucune des procédures de ce
module ne sera disponible pour le projet en cours. Ces
procédures ne seront disponibles que pour les modules du classeur.xla dans
lequels elles se retrouvent. Dans le cas ou l'option
"option Private module" n'est pas défini dans le haut du module du fichier
xla, mais que la macro appelée possède "private" dans sa
déclaration, seulement les procédures définies de cette manière (avec
private dans leur déclaration) ne seront accessibles.



Salutations!


"bartez" a écrit dans le message de news:
%
Je croyais que Option Private Module m'interdisait par la suite de faire
appel à une procédure contenue dans ce module à partir d'un autre classeur
ou un autre module.

tu peux m'en expliquer un peu plus svp !

Je cherche à lancer une procédure contenu dans un autre classeur sans que
cette procédure ne soit utilisable en dehors du code VBA. c'est à dire que
personne ne puisse la lancer en faisant Outils, Macro, éxécuter une macro.

Merci de ton aide
Philippe

"Ange Ounis" a écrit dans le message de news:

Je déclarais en effet certaines de mes macros comme Privat pour
qu'elles
ne
puissent pas être lancées par qqun à un moment inoportun. Mais je
n'utilisais peut être pas la bonne méthode.


Essaye plutôt d'écrire en tête du module qui contient ces macros que tu
veux cacher au "qqun" en question :

Option Private Module

Cette instruction déclare en quelque sorte l'accès aux procédures de ce
module réservé au code VBA du projet (ie aux autres procédures) et elles
n'apparaissent pas dans la boite de dialogue OutilsMacroMacros...
On peut malgré tout toujours les exécuter par l'intermédiaire de cette
boite de dialogue mais à condition de connaître leur nom exact.

----------
Ange Ounis
----------

Merci pour tous tes renseignements, ils viennent de m'éclairer sur pas
mal de difficultés que j'avais et vont donc m'être très utiles.

Une autre petite question : tu as écris ceci.


Attention : La ligne de déclaration de ta macro ne peut pas contenir
l'expression "Private" comme dans Private sub toto() , car le
mot "Private" limite la portée de la macro seulement au module où elle
est située. Elle ne peut pas être appelée par une autre
procédure à l'extérieur de ce module. La même problématique s'applique
si
dans le haut du module où sont tes macros que tu désires
appeler, tu utilises l'expression suivante : "Option Private Module"



Si je veux pouvoir appeler ma macro à partir d'un autre module, mais que
je ne veux pas que cette macro apparaisse en faisant ALT+F8.
Existe-t-il une solution ?
Je déclarais en effet certaines de mes macros comme Privat pour qu'elles
ne puissent pas être lancées par qqun à un moment inoportun. Mais je
n'utilisais peut être pas la bonne méthode.

Merci de ton aide
Philippe

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


Bonsoir Philippe,

Attention : La ligne de déclaration de ta macro ne peut pas contenir
l'expression "Private" comme dans Private sub toto() , car le
mot "Private" limite la portée de la macro seulement au module où elle
est située. Elle ne peut pas être appelée par une autre
procédure à l'extérieur de ce module. La même problématique s'applique
si
dans le haut du module où sont tes macros que tu désires
appeler, tu utilises l'expression suivante : "Option Private Module"


Exécuter une macro d'un autre classeur:

A )
Nom de la macro : "test1"
Si ton classeur est fermé et que la macro appelée se retrouve dans un
module standard :
Application.Run "'C:Mes documentsAnswer.xls'!test1"

Même chose mais si le classeur est déjà ouvert :
Application.Run "Answer.xls!test1"

B ) Si le nom de ton classeur contient des espaces :

L'utilisation des apostrophes "'" permet d'utiliser
un nom de classeur contenant des espaces , sans
ces dernières, point de salut.
Dim LaMacro As String
LaMacro = "'" & ThisWorkbook.Name & "'!test1"
Application.Run LaMacro

C) Si la macro appelée est dans un module feuille du classeur au lieu
d'être dans un module Standard :

Dans la ligne de commande, tu dois insérer le nom de l'objet "Feuille"
que tu retrouves dans la fenêtre VBE (visual basic editor).
Dans la fenêtre de gauche de ton projet, la liste des feuilles est
affichée dans ce format : "toto"("Feuil4")
toto = Nom de l'onglet de la feuille
Feuil4 = Propriété Name de l'objet Feuille (worksheet)
Dans la commande suiivante, tu dois utiliser le nom de la feuille et non
de l'onglet de la feuille

Si le fichier est ouvert :
Application.Run "modele.xls!Feuil4.test1"

Si le fichier est fermé :
Application.Run "'C:Mes documentsAnswer.xls'!Feuil4.test1"



Salutations!




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

Bonjour,

Je cherche à éxécuter une procédure de type Sub Privat à partir d'un
autre
classeur.
Ma procédure s'appelle "Mise_à_Jour"
Elle est dans le module "Menu" du classeur "Base.xls"
Ce classeur "Base" est masqué à l'affichage.

Merci de votre aide
Philippe














Avatar
michdenis
Bonjour Bartez,

| Ok, merci michdenis, je crois que cette fois j'ai compris ;)

Je ne suis pas certain ... !!! ;-))

| Je vais toutes les redéclarer en Public
Ce n'est absolument pas nécessaire puisque la commande "Application.Run" se fout éperduement de la présence des mots Private et
Option Private Module dans le haut du module pour exécuter une macro. Ce faisant, si tu déclares ta macro avec le mot "private"
comme dans Private Sub MaMacro() dans un module standard, tu pourras l'exécuter à partir de n'importe où avec la commande
"Application.Run "MaMacro"". Cependant, ta macro n'apparaîtra pas dans la fenêtre " Les macros" ( fenêtre s'ouvrant avec le
raccourci clavier Alt +F8 ) donc inaccessible pour les usagers de ce classeur.

Je crois que tu aurais avantage à relire la réponse !!

;-))


Salutations!





"bartez" a écrit dans le message de news: %23gQ$
Ok, merci michdenis, je crois que cette fois j'ai compris ;)

Je vais toutes les redéclarer en Public pour pouvoir les atteindre par
Application.Run. Par contre j'ai du boulot pour leur ajouter des tests en
pagaille pour bloquer ces procédures au cas ou qqun en exécuterais une dans
un mauvais contexte. J'ai en effet quelques procédures qui me reformate un
tabeau en effaçant toutes les valeurs saisies sans aucun control.

Merci de ton aide, je vais me mettre au boulot tout de suite ;)

Philippe

"michdenis" a écrit dans le message de news:
%
Bonjour Bartez,

Tu as une très bonne question...J'avoue que ma réponse n'était pas très
claire concernant l'utilisation du mot "Private " dans la
déclaration d'une procédure et de l'expression "Option Private module"
dans le haut du module.

***Utilisation de Application.Run "NomMacro****

Pour appeler une macro, si on utilise "Application.Run "NomMacro" tel que
j'ai défini dans mon premier message, Il est possible
d'exécuter ladite "Macro" nonobstant que l'on ait eu recours à "Private"
dans la déclaration de la macro appelée ou à "Option
Private module" dans le haut du module ou que l'on ait utilisé la
combinaison des 2. Cette affirmation est vraie dans tous les cas
de figure.

1- la macro appelée est dans le même classeur que la macro appelante
2- la macro appelée est dans un autre classeur.xls
3= la macro appelée se retrouve dans un fichier de type "Xla" - Macro
complémentaire.


***Sans l'utilisation de Application.Run "NomMacro****
**** Utilisant seulement le nom de la macro appelée****

Pour appeler une macro, si on utilise seulement son "Nom" ...

1- dans le même classeur :
Utilisation de Private dans la déclaration limite l'appel de la macro par
son NOM par les autres modules du projet.
Dans ce cas, "Option Private module" est sans objet... n'impose aucune
limite.

2 - dans un autre classeur de type XLS :
l'utilisation de "Application.Run" est nécessaire donc toutes les macros
sont accessibles nonobstant "private sub.." ou Option
Private Module

3- dans un classeur de type xla ( macro complémentaire)
Si on ajoute à un projet la référence d'une macro complémentaire, il est
possible d'utiliser seulement le "Nom" de la macro comme si
les modules ce fichier .xla faisait parti du projet .xls en cours.
Cependant, si la macro appelée est située dans un module dont l'
option "Option Private module" est définie, aucune des procédures de ce
module ne sera disponible pour le projet en cours. Ces
procédures ne seront disponibles que pour les modules du classeur.xla dans
lequels elles se retrouvent. Dans le cas ou l'option
"option Private module" n'est pas défini dans le haut du module du fichier
xla, mais que la macro appelée possède "private" dans sa
déclaration, seulement les procédures définies de cette manière (avec
private dans leur déclaration) ne seront accessibles.



Salutations!


"bartez" a écrit dans le message de news:
%
Je croyais que Option Private Module m'interdisait par la suite de faire
appel à une procédure contenue dans ce module à partir d'un autre classeur
ou un autre module.

tu peux m'en expliquer un peu plus svp !

Je cherche à lancer une procédure contenu dans un autre classeur sans que
cette procédure ne soit utilisable en dehors du code VBA. c'est à dire que
personne ne puisse la lancer en faisant Outils, Macro, éxécuter une macro.

Merci de ton aide
Philippe

"Ange Ounis" a écrit dans le message de news:

Je déclarais en effet certaines de mes macros comme Privat pour
qu'elles
ne
puissent pas être lancées par qqun à un moment inoportun. Mais je
n'utilisais peut être pas la bonne méthode.


Essaye plutôt d'écrire en tête du module qui contient ces macros que tu
veux cacher au "qqun" en question :

Option Private Module

Cette instruction déclare en quelque sorte l'accès aux procédures de ce
module réservé au code VBA du projet (ie aux autres procédures) et elles
n'apparaissent pas dans la boite de dialogue OutilsMacroMacros...
On peut malgré tout toujours les exécuter par l'intermédiaire de cette
boite de dialogue mais à condition de connaître leur nom exact.

----------
Ange Ounis
----------

Merci pour tous tes renseignements, ils viennent de m'éclairer sur pas
mal de difficultés que j'avais et vont donc m'être très utiles.

Une autre petite question : tu as écris ceci.


Attention : La ligne de déclaration de ta macro ne peut pas contenir
l'expression "Private" comme dans Private sub toto() , car le
mot "Private" limite la portée de la macro seulement au module où elle
est située. Elle ne peut pas être appelée par une autre
procédure à l'extérieur de ce module. La même problématique s'applique
si
dans le haut du module où sont tes macros que tu désires
appeler, tu utilises l'expression suivante : "Option Private Module"



Si je veux pouvoir appeler ma macro à partir d'un autre module, mais que
je ne veux pas que cette macro apparaisse en faisant ALT+F8.
Existe-t-il une solution ?
Je déclarais en effet certaines de mes macros comme Privat pour qu'elles
ne puissent pas être lancées par qqun à un moment inoportun. Mais je
n'utilisais peut être pas la bonne méthode.

Merci de ton aide
Philippe

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


Bonsoir Philippe,

Attention : La ligne de déclaration de ta macro ne peut pas contenir
l'expression "Private" comme dans Private sub toto() , car le
mot "Private" limite la portée de la macro seulement au module où elle
est située. Elle ne peut pas être appelée par une autre
procédure à l'extérieur de ce module. La même problématique s'applique
si
dans le haut du module où sont tes macros que tu désires
appeler, tu utilises l'expression suivante : "Option Private Module"


Exécuter une macro d'un autre classeur:

A )
Nom de la macro : "test1"
Si ton classeur est fermé et que la macro appelée se retrouve dans un
module standard :
Application.Run "'C:Mes documentsAnswer.xls'!test1"

Même chose mais si le classeur est déjà ouvert :
Application.Run "Answer.xls!test1"

B ) Si le nom de ton classeur contient des espaces :

L'utilisation des apostrophes "'" permet d'utiliser
un nom de classeur contenant des espaces , sans
ces dernières, point de salut.
Dim LaMacro As String
LaMacro = "'" & ThisWorkbook.Name & "'!test1"
Application.Run LaMacro

C) Si la macro appelée est dans un module feuille du classeur au lieu
d'être dans un module Standard :

Dans la ligne de commande, tu dois insérer le nom de l'objet "Feuille"
que tu retrouves dans la fenêtre VBE (visual basic editor).
Dans la fenêtre de gauche de ton projet, la liste des feuilles est
affichée dans ce format : "toto"("Feuil4")
toto = Nom de l'onglet de la feuille
Feuil4 = Propriété Name de l'objet Feuille (worksheet)
Dans la commande suiivante, tu dois utiliser le nom de la feuille et non
de l'onglet de la feuille

Si le fichier est ouvert :
Application.Run "modele.xls!Feuil4.test1"

Si le fichier est fermé :
Application.Run "'C:Mes documentsAnswer.xls'!Feuil4.test1"



Salutations!




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

Bonjour,

Je cherche à éxécuter une procédure de type Sub Privat à partir d'un
autre
classeur.
Ma procédure s'appelle "Mise_à_Jour"
Elle est dans le module "Menu" du classeur "Base.xls"
Ce classeur "Base" est masqué à l'affichage.

Merci de votre aide
Philippe














Avatar
bartez
Bonjour michdenis !

Tu as raison, j'avais encore rien compris :(

Maintenant je comprend qu'il est possible de lancer une procédure même si
elle est déclarée Privat, par contre je ne comprend pas pourquoi chez moi le
test suivant ne fonctionne pas.

Exemple :

j'ai créé une procédure dans le module "menu" du classeur "synthèse.xls" de
type Privat appelée "naz"

dans un autre classeur, j'ai tenté d'exécuter cette procédure à l'aide de la
ligne
Application.Run "synthèse.xls!naz"

et j'obtiens toujours un message d'erreur qui me dit :
"erreur d'exécution '1004' erreur défini par l'application ou par l'objet"

Si tu pouvais m'éclairer encore un peu sur ce mystère, j'utiliserais bien
volontier Application.Run plutot que de devoir tout déclarer en Public en
incorporant des gardes fous un peu partout.

Merci pour ton aide et pour le temps que tu as passé à essayer de me faire
comprendre. J'ai 43 ans et je suis un peu dur de la feuille ;-))

Philippe

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

Bonjour Bartez,

| Ok, merci michdenis, je crois que cette fois j'ai compris ;)

Je ne suis pas certain ... !!! ;-))

| Je vais toutes les redéclarer en Public
Ce n'est absolument pas nécessaire puisque la commande "Application.Run"
se fout éperduement de la présence des mots Private et
Option Private Module dans le haut du module pour exécuter une macro. Ce
faisant, si tu déclares ta macro avec le mot "private"
comme dans Private Sub MaMacro() dans un module standard, tu pourras
l'exécuter à partir de n'importe où avec la commande
"Application.Run "MaMacro"". Cependant, ta macro n'apparaîtra pas dans la
fenêtre " Les macros" ( fenêtre s'ouvrant avec le
raccourci clavier Alt +F8 ) donc inaccessible pour les usagers de ce
classeur.

Je crois que tu aurais avantage à relire la réponse !!

;-))


Salutations!





"bartez" a écrit dans le message de news:
%23gQ$
Ok, merci michdenis, je crois que cette fois j'ai compris ;)

Je vais toutes les redéclarer en Public pour pouvoir les atteindre par
Application.Run. Par contre j'ai du boulot pour leur ajouter des tests en
pagaille pour bloquer ces procédures au cas ou qqun en exécuterais une
dans
un mauvais contexte. J'ai en effet quelques procédures qui me reformate un
tabeau en effaçant toutes les valeurs saisies sans aucun control.

Merci de ton aide, je vais me mettre au boulot tout de suite ;)

Philippe

"michdenis" a écrit dans le message de news:
%
Bonjour Bartez,

Tu as une très bonne question...J'avoue que ma réponse n'était pas très
claire concernant l'utilisation du mot "Private " dans la
déclaration d'une procédure et de l'expression "Option Private module"
dans le haut du module.

***Utilisation de Application.Run "NomMacro****

Pour appeler une macro, si on utilise "Application.Run "NomMacro" tel que
j'ai défini dans mon premier message, Il est possible
d'exécuter ladite "Macro" nonobstant que l'on ait eu recours à "Private"
dans la déclaration de la macro appelée ou à "Option
Private module" dans le haut du module ou que l'on ait utilisé la
combinaison des 2. Cette affirmation est vraie dans tous les cas
de figure.

1- la macro appelée est dans le même classeur que la macro appelante
2- la macro appelée est dans un autre classeur.xls
3= la macro appelée se retrouve dans un fichier de type "Xla" - Macro
complémentaire.


***Sans l'utilisation de Application.Run "NomMacro****
**** Utilisant seulement le nom de la macro appelée****

Pour appeler une macro, si on utilise seulement son "Nom" ...

1- dans le même classeur :
Utilisation de Private dans la déclaration limite l'appel de la macro par
son NOM par les autres modules du projet.
Dans ce cas, "Option Private module" est sans objet... n'impose aucune
limite.

2 - dans un autre classeur de type XLS :
l'utilisation de "Application.Run" est nécessaire donc toutes les macros
sont accessibles nonobstant "private sub.." ou Option
Private Module

3- dans un classeur de type xla ( macro complémentaire)
Si on ajoute à un projet la référence d'une macro complémentaire, il est
possible d'utiliser seulement le "Nom" de la macro comme si
les modules ce fichier .xla faisait parti du projet .xls en cours.
Cependant, si la macro appelée est située dans un module dont l'
option "Option Private module" est définie, aucune des procédures de ce
module ne sera disponible pour le projet en cours. Ces
procédures ne seront disponibles que pour les modules du classeur.xla
dans
lequels elles se retrouvent. Dans le cas ou l'option
"option Private module" n'est pas défini dans le haut du module du
fichier
xla, mais que la macro appelée possède "private" dans sa
déclaration, seulement les procédures définies de cette manière (avec
private dans leur déclaration) ne seront accessibles.



Salutations!


"bartez" a écrit dans le message de news:
%
Je croyais que Option Private Module m'interdisait par la suite de faire
appel à une procédure contenue dans ce module à partir d'un autre
classeur
ou un autre module.

tu peux m'en expliquer un peu plus svp !

Je cherche à lancer une procédure contenu dans un autre classeur sans que
cette procédure ne soit utilisable en dehors du code VBA. c'est à dire
que
personne ne puisse la lancer en faisant Outils, Macro, éxécuter une
macro.

Merci de ton aide
Philippe

"Ange Ounis" a écrit dans le message de news:

Je déclarais en effet certaines de mes macros comme Privat pour
qu'elles
ne
puissent pas être lancées par qqun à un moment inoportun. Mais je
n'utilisais peut être pas la bonne méthode.


Essaye plutôt d'écrire en tête du module qui contient ces macros que tu
veux cacher au "qqun" en question :

Option Private Module

Cette instruction déclare en quelque sorte l'accès aux procédures de ce
module réservé au code VBA du projet (ie aux autres procédures) et elles
n'apparaissent pas dans la boite de dialogue OutilsMacroMacros...
On peut malgré tout toujours les exécuter par l'intermédiaire de cette
boite de dialogue mais à condition de connaître leur nom exact.

----------
Ange Ounis
----------

Merci pour tous tes renseignements, ils viennent de m'éclairer sur pas
mal de difficultés que j'avais et vont donc m'être très utiles.

Une autre petite question : tu as écris ceci.


Attention : La ligne de déclaration de ta macro ne peut pas contenir
l'expression "Private" comme dans Private sub toto() , car le
mot "Private" limite la portée de la macro seulement au module où elle
est située. Elle ne peut pas être appelée par une autre
procédure à l'extérieur de ce module. La même problématique s'applique
si
dans le haut du module où sont tes macros que tu désires
appeler, tu utilises l'expression suivante : "Option Private Module"



Si je veux pouvoir appeler ma macro à partir d'un autre module, mais
que
je ne veux pas que cette macro apparaisse en faisant ALT+F8.
Existe-t-il une solution ?
Je déclarais en effet certaines de mes macros comme Privat pour
qu'elles
ne puissent pas être lancées par qqun à un moment inoportun. Mais je
n'utilisais peut être pas la bonne méthode.

Merci de ton aide
Philippe

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


Bonsoir Philippe,

Attention : La ligne de déclaration de ta macro ne peut pas contenir
l'expression "Private" comme dans Private sub toto() , car le
mot "Private" limite la portée de la macro seulement au module où elle
est située. Elle ne peut pas être appelée par une autre
procédure à l'extérieur de ce module. La même problématique s'applique
si
dans le haut du module où sont tes macros que tu désires
appeler, tu utilises l'expression suivante : "Option Private Module"


Exécuter une macro d'un autre classeur:

A )
Nom de la macro : "test1"
Si ton classeur est fermé et que la macro appelée se retrouve dans un
module standard :
Application.Run "'C:Mes documentsAnswer.xls'!test1"

Même chose mais si le classeur est déjà ouvert :
Application.Run "Answer.xls!test1"

B ) Si le nom de ton classeur contient des espaces :

L'utilisation des apostrophes "'" permet d'utiliser
un nom de classeur contenant des espaces , sans
ces dernières, point de salut.
Dim LaMacro As String
LaMacro = "'" & ThisWorkbook.Name & "'!test1"
Application.Run LaMacro

C) Si la macro appelée est dans un module feuille du classeur au lieu
d'être dans un module Standard :

Dans la ligne de commande, tu dois insérer le nom de l'objet "Feuille"
que tu retrouves dans la fenêtre VBE (visual basic editor).
Dans la fenêtre de gauche de ton projet, la liste des feuilles est
affichée dans ce format : "toto"("Feuil4")
toto = Nom de l'onglet de la feuille
Feuil4 = Propriété Name de l'objet Feuille (worksheet)
Dans la commande suiivante, tu dois utiliser le nom de la feuille et
non
de l'onglet de la feuille

Si le fichier est ouvert :
Application.Run "modele.xls!Feuil4.test1"

Si le fichier est fermé :
Application.Run "'C:Mes documentsAnswer.xls'!Feuil4.test1"



Salutations!




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

Bonjour,

Je cherche à éxécuter une procédure de type Sub Privat à partir d'un
autre
classeur.
Ma procédure s'appelle "Mise_à_Jour"
Elle est dans le module "Menu" du classeur "Base.xls"
Ce classeur "Base" est masqué à l'affichage.

Merci de votre aide
Philippe



















Avatar
bartez
C'est encore moi :-))

Je viens de voir d'ou venait mon erreur.
je ne mettais pas les apostrophes ( ' ) devant et derrière de nom du
classeur.
du coup, la ligne suivante fonctionne :-)

Application.Run "'synthèse.xls'!naz"

Peux tu me dire à quoi servent exactement ces caractères ?

Bonne journée
Philippe

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

Bonjour Bartez,

| Ok, merci michdenis, je crois que cette fois j'ai compris ;)

Je ne suis pas certain ... !!! ;-))

| Je vais toutes les redéclarer en Public
Ce n'est absolument pas nécessaire puisque la commande "Application.Run"
se fout éperduement de la présence des mots Private et
Option Private Module dans le haut du module pour exécuter une macro. Ce
faisant, si tu déclares ta macro avec le mot "private"
comme dans Private Sub MaMacro() dans un module standard, tu pourras
l'exécuter à partir de n'importe où avec la commande
"Application.Run "MaMacro"". Cependant, ta macro n'apparaîtra pas dans la
fenêtre " Les macros" ( fenêtre s'ouvrant avec le
raccourci clavier Alt +F8 ) donc inaccessible pour les usagers de ce
classeur.

Je crois que tu aurais avantage à relire la réponse !!

;-))


Salutations!





"bartez" a écrit dans le message de news:
%23gQ$
Ok, merci michdenis, je crois que cette fois j'ai compris ;)

Je vais toutes les redéclarer en Public pour pouvoir les atteindre par
Application.Run. Par contre j'ai du boulot pour leur ajouter des tests en
pagaille pour bloquer ces procédures au cas ou qqun en exécuterais une
dans
un mauvais contexte. J'ai en effet quelques procédures qui me reformate un
tabeau en effaçant toutes les valeurs saisies sans aucun control.

Merci de ton aide, je vais me mettre au boulot tout de suite ;)

Philippe

"michdenis" a écrit dans le message de news:
%
Bonjour Bartez,

Tu as une très bonne question...J'avoue que ma réponse n'était pas très
claire concernant l'utilisation du mot "Private " dans la
déclaration d'une procédure et de l'expression "Option Private module"
dans le haut du module.

***Utilisation de Application.Run "NomMacro****

Pour appeler une macro, si on utilise "Application.Run "NomMacro" tel que
j'ai défini dans mon premier message, Il est possible
d'exécuter ladite "Macro" nonobstant que l'on ait eu recours à "Private"
dans la déclaration de la macro appelée ou à "Option
Private module" dans le haut du module ou que l'on ait utilisé la
combinaison des 2. Cette affirmation est vraie dans tous les cas
de figure.

1- la macro appelée est dans le même classeur que la macro appelante
2- la macro appelée est dans un autre classeur.xls
3= la macro appelée se retrouve dans un fichier de type "Xla" - Macro
complémentaire.


***Sans l'utilisation de Application.Run "NomMacro****
**** Utilisant seulement le nom de la macro appelée****

Pour appeler une macro, si on utilise seulement son "Nom" ...

1- dans le même classeur :
Utilisation de Private dans la déclaration limite l'appel de la macro par
son NOM par les autres modules du projet.
Dans ce cas, "Option Private module" est sans objet... n'impose aucune
limite.

2 - dans un autre classeur de type XLS :
l'utilisation de "Application.Run" est nécessaire donc toutes les macros
sont accessibles nonobstant "private sub.." ou Option
Private Module

3- dans un classeur de type xla ( macro complémentaire)
Si on ajoute à un projet la référence d'une macro complémentaire, il est
possible d'utiliser seulement le "Nom" de la macro comme si
les modules ce fichier .xla faisait parti du projet .xls en cours.
Cependant, si la macro appelée est située dans un module dont l'
option "Option Private module" est définie, aucune des procédures de ce
module ne sera disponible pour le projet en cours. Ces
procédures ne seront disponibles que pour les modules du classeur.xla
dans
lequels elles se retrouvent. Dans le cas ou l'option
"option Private module" n'est pas défini dans le haut du module du
fichier
xla, mais que la macro appelée possède "private" dans sa
déclaration, seulement les procédures définies de cette manière (avec
private dans leur déclaration) ne seront accessibles.



Salutations!


"bartez" a écrit dans le message de news:
%
Je croyais que Option Private Module m'interdisait par la suite de faire
appel à une procédure contenue dans ce module à partir d'un autre
classeur
ou un autre module.

tu peux m'en expliquer un peu plus svp !

Je cherche à lancer une procédure contenu dans un autre classeur sans que
cette procédure ne soit utilisable en dehors du code VBA. c'est à dire
que
personne ne puisse la lancer en faisant Outils, Macro, éxécuter une
macro.

Merci de ton aide
Philippe

"Ange Ounis" a écrit dans le message de news:

Je déclarais en effet certaines de mes macros comme Privat pour
qu'elles
ne
puissent pas être lancées par qqun à un moment inoportun. Mais je
n'utilisais peut être pas la bonne méthode.


Essaye plutôt d'écrire en tête du module qui contient ces macros que tu
veux cacher au "qqun" en question :

Option Private Module

Cette instruction déclare en quelque sorte l'accès aux procédures de ce
module réservé au code VBA du projet (ie aux autres procédures) et elles
n'apparaissent pas dans la boite de dialogue OutilsMacroMacros...
On peut malgré tout toujours les exécuter par l'intermédiaire de cette
boite de dialogue mais à condition de connaître leur nom exact.

----------
Ange Ounis
----------

Merci pour tous tes renseignements, ils viennent de m'éclairer sur pas
mal de difficultés que j'avais et vont donc m'être très utiles.

Une autre petite question : tu as écris ceci.


Attention : La ligne de déclaration de ta macro ne peut pas contenir
l'expression "Private" comme dans Private sub toto() , car le
mot "Private" limite la portée de la macro seulement au module où elle
est située. Elle ne peut pas être appelée par une autre
procédure à l'extérieur de ce module. La même problématique s'applique
si
dans le haut du module où sont tes macros que tu désires
appeler, tu utilises l'expression suivante : "Option Private Module"



Si je veux pouvoir appeler ma macro à partir d'un autre module, mais
que
je ne veux pas que cette macro apparaisse en faisant ALT+F8.
Existe-t-il une solution ?
Je déclarais en effet certaines de mes macros comme Privat pour
qu'elles
ne puissent pas être lancées par qqun à un moment inoportun. Mais je
n'utilisais peut être pas la bonne méthode.

Merci de ton aide
Philippe

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


Bonsoir Philippe,

Attention : La ligne de déclaration de ta macro ne peut pas contenir
l'expression "Private" comme dans Private sub toto() , car le
mot "Private" limite la portée de la macro seulement au module où elle
est située. Elle ne peut pas être appelée par une autre
procédure à l'extérieur de ce module. La même problématique s'applique
si
dans le haut du module où sont tes macros que tu désires
appeler, tu utilises l'expression suivante : "Option Private Module"


Exécuter une macro d'un autre classeur:

A )
Nom de la macro : "test1"
Si ton classeur est fermé et que la macro appelée se retrouve dans un
module standard :
Application.Run "'C:Mes documentsAnswer.xls'!test1"

Même chose mais si le classeur est déjà ouvert :
Application.Run "Answer.xls!test1"

B ) Si le nom de ton classeur contient des espaces :

L'utilisation des apostrophes "'" permet d'utiliser
un nom de classeur contenant des espaces , sans
ces dernières, point de salut.
Dim LaMacro As String
LaMacro = "'" & ThisWorkbook.Name & "'!test1"
Application.Run LaMacro

C) Si la macro appelée est dans un module feuille du classeur au lieu
d'être dans un module Standard :

Dans la ligne de commande, tu dois insérer le nom de l'objet "Feuille"
que tu retrouves dans la fenêtre VBE (visual basic editor).
Dans la fenêtre de gauche de ton projet, la liste des feuilles est
affichée dans ce format : "toto"("Feuil4")
toto = Nom de l'onglet de la feuille
Feuil4 = Propriété Name de l'objet Feuille (worksheet)
Dans la commande suiivante, tu dois utiliser le nom de la feuille et
non
de l'onglet de la feuille

Si le fichier est ouvert :
Application.Run "modele.xls!Feuil4.test1"

Si le fichier est fermé :
Application.Run "'C:Mes documentsAnswer.xls'!Feuil4.test1"



Salutations!




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

Bonjour,

Je cherche à éxécuter une procédure de type Sub Privat à partir d'un
autre
classeur.
Ma procédure s'appelle "Mise_à_Jour"
Elle est dans le module "Menu" du classeur "Base.xls"
Ce classeur "Base" est masqué à l'affichage.

Merci de votre aide
Philippe



















1 2