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

Macro pour un classeur seulement

19 réponses
Avatar
Pierre F.
Bonjour à toutes et tous!

Dans un classeur, j'ai une vingtaine de macros, toutes spécifiques à ce
classeur.
Or, lorsqu'il est ouvert, et que j'ouvre un autres classeur, TOUTES les
macros des 2 classeurs sont présentes quand j'ouvre le VBA ...

C'est gênant car certaines déclenchent des évènements sur simple clic ou
"change" dans d'autres classeurs :-)

J'ai été dans outils/macros et j'ai choisi "Ce classeur" puis enregistré
mon fichier.

Mais rien ne change, dès que j'ouvre à nouveau ce classeur, c'est le
choix "dans tous les classeurs" qui est visible.

Comment faire pour que les macros de ce classeur ne se "mélangent" pas à
celles des autres

Merci pour votre aide.

Cordialement,
Pierre F.

10 réponses

1 2
Avatar
Jacquouille
Bonjour
Sans être expert, je crois que pour neutraliser les macro pour un seul
classeur, il faut les déclarer "private sub".
Ces macros ne seront plus appelables à partir des autres classeurs.
Sinon, elles seraient public..
Bonne chance.

--
Bien amicalmement,
"Le vin est au repas ce que le parfum est à la femme."

Jacquouille.

"Pierre F." a écrit dans le message de news:
9fdd$49197704$55da2a83$
Bonjour à toutes et tous!

Dans un classeur, j'ai une vingtaine de macros, toutes spécifiques à ce
classeur.
Or, lorsqu'il est ouvert, et que j'ouvre un autres classeur, TOUTES les
macros des 2 classeurs sont présentes quand j'ouvre le VBA ...

C'est gênant car certaines déclenchent des évènements sur simple clic ou
"change" dans d'autres classeurs :-)

J'ai été dans outils/macros et j'ai choisi "Ce classeur" puis enregistré
mon fichier.

Mais rien ne change, dès que j'ouvre à nouveau ce classeur, c'est le choix
"dans tous les classeurs" qui est visible.

Comment faire pour que les macros de ce classeur ne se "mélangent" pas à
celles des autres

Merci pour votre aide.

Cordialement,
Pierre F.


Avatar
Pierre F.
Jacquouille a écrit :
Bonjour
Sans être expert, je crois que pour neutraliser les macro pour un seul
classeur, il faut les déclarer "private sub".
Ces macros ne seront plus appelables à partir des autres classeurs.
Sinon, elles seraient public..
Bonne chance.




Merci pour ta réponse;

je l'ai fait et le problème c'est que maintenant, tous les appels aux
macros plantent, même en renommant l'appel par private "nomdelamacro"

??

Cordialement,
Pierre F.
Avatar
michdenis
Si j'ai bien compris ta question, il n'y a pas de commande
en vba qui permet de définir dans la fenêtre d'appel des
macros, l'item ce classeur dans la liste déroulante.

Cependant, on peut utiliser une séquence de touche en
faisant appel à la commande "Sendkeys" pour obtenir
ce que l'on désire.

Si tu as une version Excel 2007, place ce qui suit dans le ThisWorkbook
de ton classeur :

Ceci t'assure qu'à chaque fois qu'un classeur qui a dans son thisWorkbook
ce code, affichera dans la fenêtre des macros seulement les macros que
le classeur possède en propre dans son code.

N.B- Ne pas faire appel au mot "Private" dans la déclaration de la procédure
si tu désires qu'elle s'affiche dans la fenêtre d'appel des macros.

'---------------------------------------------
Private Sub Workbook_Activate()
Dim X As String
X = ThisWorkbook.Name
SendKeys "%" & "{C}" & "PM" & vbTab & vbTab & X & "~" & "{Esc}"
End Sub
'---------------------------------------------
Sub Workbook_Open()
Dim X As String
X = ThisWorkbook.Name
SendKeys "%" & "{C}" & "PM" & vbTab & vbTab & X & "~" & "{Esc}"
End Sub
'---------------------------------------------

Pour Excel 1997-2003, Tu dois utiliser cette séquence pour la ligne de code
SendKeys

SendKeys "%" & "{O}" & "MM" & vbTab & vbTab & X & "~" & "{Esc}"

P.S- Attention aux coupures de lignes de code intempestif par
le service de messagerie.




"Pierre F." a écrit dans le message de news:
9fdd$49197704$55da2a83$
Bonjour à toutes et tous!

Dans un classeur, j'ai une vingtaine de macros, toutes spécifiques à ce
classeur.
Or, lorsqu'il est ouvert, et que j'ouvre un autres classeur, TOUTES les
macros des 2 classeurs sont présentes quand j'ouvre le VBA ...

C'est gênant car certaines déclenchent des évènements sur simple clic ou
"change" dans d'autres classeurs :-)

J'ai été dans outils/macros et j'ai choisi "Ce classeur" puis enregistré
mon fichier.

Mais rien ne change, dès que j'ouvre à nouveau ce classeur, c'est le
choix "dans tous les classeurs" qui est visible.

Comment faire pour que les macros de ce classeur ne se "mélangent" pas à
celles des autres

Merci pour votre aide.

Cordialement,
Pierre F.
Avatar
michdenis
Pour excel 2007, j'ai pris pour acquis que l'onglet du menu "Developpeur"
était déjà affiché. Dans le cas contraire, il faudrait ajouter en début de
procédure ceci :

Application.ShowDevTools = True

En fait, afin de s'assurer de la chose, on peut ajouter cette ligne de
code et la laisser là en permanence :

'------------------------------
Sub Test()
Dim X As String
Application.ShowDevTools = True
X = ThisWorkbook.Name
SendKeys "%" & "{C}" & "PM" & vbTab & vbTab & X & "~" & "{Esc}"
End Sub
'------------------------------

N.B. Pour des raisons de test dans mon premier message...
j'avais enlevé le mot Private à la macro événementielle
Sub Workbook_Open() ...ce n'est d'aucune utilité pour le
déroulement de la macro.





"michdenis" a écrit dans le message de news:
%
Si j'ai bien compris ta question, il n'y a pas de commande
en vba qui permet de définir dans la fenêtre d'appel des
macros, l'item ce classeur dans la liste déroulante.

Cependant, on peut utiliser une séquence de touche en
faisant appel à la commande "Sendkeys" pour obtenir
ce que l'on désire.

Si tu as une version Excel 2007, place ce qui suit dans le ThisWorkbook
de ton classeur :

Ceci t'assure qu'à chaque fois qu'un classeur qui a dans son thisWorkbook
ce code, affichera dans la fenêtre des macros seulement les macros que
le classeur possède en propre dans son code.

N.B- Ne pas faire appel au mot "Private" dans la déclaration de la procédure
si tu désires qu'elle s'affiche dans la fenêtre d'appel des macros.

'---------------------------------------------
Private Sub Workbook_Activate()
Dim X As String
X = ThisWorkbook.Name
SendKeys "%" & "{C}" & "PM" & vbTab & vbTab & X & "~" & "{Esc}"
End Sub
'---------------------------------------------
Sub Workbook_Open()
Dim X As String
X = ThisWorkbook.Name
SendKeys "%" & "{C}" & "PM" & vbTab & vbTab & X & "~" & "{Esc}"
End Sub
'---------------------------------------------

Pour Excel 1997-2003, Tu dois utiliser cette séquence pour la ligne de code
SendKeys

SendKeys "%" & "{O}" & "MM" & vbTab & vbTab & X & "~" & "{Esc}"

P.S- Attention aux coupures de lignes de code intempestif par
le service de messagerie.




"Pierre F." a écrit dans le message de news:
9fdd$49197704$55da2a83$
Bonjour à toutes et tous!

Dans un classeur, j'ai une vingtaine de macros, toutes spécifiques à ce
classeur.
Or, lorsqu'il est ouvert, et que j'ouvre un autres classeur, TOUTES les
macros des 2 classeurs sont présentes quand j'ouvre le VBA ...

C'est gênant car certaines déclenchent des évènements sur simple clic ou
"change" dans d'autres classeurs :-)

J'ai été dans outils/macros et j'ai choisi "Ce classeur" puis enregistré
mon fichier.

Mais rien ne change, dès que j'ouvre à nouveau ce classeur, c'est le
choix "dans tous les classeurs" qui est visible.

Comment faire pour que les macros de ce classeur ne se "mélangent" pas à
celles des autres

Merci pour votre aide.

Cordialement,
Pierre F.
Avatar
Jacquouille
Salut Denis
Aurais-je gaffé en "privatisant" la sub ?
Il me semblait qu'en privatisant, elle n'était plus accessible qu'à partir
du fichier dans lequel elle est stockée.
Tu me dis quoi, que je puisse finir mes jours tranquille ?

--
Bien amicalmement,
"Le vin est au repas ce que le parfum est à la femme."

Jacquouille, très inquiet de sa santé mentale..

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

N.B- Ne pas faire appel au mot "Private" dans la déclaration de la
procédure
si tu désires qu'elle s'affiche dans la fenêtre d'appel des macros.


Avatar
michdenis
La seule chose que l'utilisation du mot "Private" fait, est de masquer
dans la fenêtre d'appel des macros ladite macro. Elle demeure masquer
peu importe le fichier actif. Cependant, si tu connais par coeur l'existence
et le nom de la macro, même si elle est masquée, il est possible d'en faire
l'appel en l'inscrivant soi-même son nom dans la fenêtre d'appel des macros
suvi d'un clic sur le bouton "exécuter".

Ce que le demandeur désire, c'est pouvoir sélectionner par défaut dans
la liste déroulante "Macros dans " de la fenêtre d'appel des macros, le
classeur où sont inscrits les macros pour que la fenêtre n'affiche que la
liste des macros de ce classeur seulement.




"Jacquouille" a écrit dans le message de
news:
Salut Denis
Aurais-je gaffé en "privatisant" la sub ?
Il me semblait qu'en privatisant, elle n'était plus accessible qu'à partir
du fichier dans lequel elle est stockée.
Tu me dis quoi, que je puisse finir mes jours tranquille ?

--
Bien amicalmement,
"Le vin est au repas ce que le parfum est à la femme."

Jacquouille, très inquiet de sa santé mentale..

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

N.B- Ne pas faire appel au mot "Private" dans la déclaration de la
procédure
si tu désires qu'elle s'affiche dans la fenêtre d'appel des macros.


Avatar
Jacquouille
Merci Denis pour cette bonne et rapide réponse.
Tout n'est donc, une fois de plus, qu' apparence....
Merci et bonne fin de journée.
Jacques

--
Bien amicalmement,
"Le vin est au repas ce que le parfum est à la femme."

Jacquouille.

"michdenis" a écrit dans le message de news:
eR%
La seule chose que l'utilisation du mot "Private" fait, est de masquer
dans la fenêtre d'appel des macros ladite macro. Elle demeure masquer
peu importe le fichier actif. Cependant, si tu connais par coeur
l'existence
et le nom de la macro, même si elle est masquée, il est possible d'en
faire
l'appel en l'inscrivant soi-même son nom dans la fenêtre d'appel des
macros
suvi d'un clic sur le bouton "exécuter".

Ce que le demandeur désire, c'est pouvoir sélectionner par défaut dans
la liste déroulante "Macros dans " de la fenêtre d'appel des macros, le
classeur où sont inscrits les macros pour que la fenêtre n'affiche que la
liste des macros de ce classeur seulement.




"Jacquouille" a écrit dans le message de
news:
Salut Denis
Aurais-je gaffé en "privatisant" la sub ?
Il me semblait qu'en privatisant, elle n'était plus accessible qu'à partir
du fichier dans lequel elle est stockée.
Tu me dis quoi, que je puisse finir mes jours tranquille ?

--
Bien amicalmement,
"Le vin est au repas ce que le parfum est à la femme."

Jacquouille, très inquiet de sa santé mentale..

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

N.B- Ne pas faire appel au mot "Private" dans la déclaration de la
procédure
si tu désires qu'elle s'affiche dans la fenêtre d'appel des
macros.







Avatar
Pierre F.
michdenis a écrit :
Cependant, si tu connais par coeur l'existence
et le nom de la macro, même si elle est masquée, il est possible d'en faire
l'appel en l'inscrivant soi-même son nom dans la fenêtre d'appel des macros
suvi d'un clic sur le bouton "exécuter".

Ce que le demandeur désire, c'est pouvoir sélectionner par défaut dans
la liste déroulante "Macros dans " de la fenêtre d'appel des macros, le
classeur où sont inscrits les macros pour que la fenêtre n'affiche que la
liste des macros de ce classeur seulement.



Mille mercis pour ces réponses, je vais tester.

J'ai toutefois un petit doute quant à ma compréhension du problème:
Les macros de tous les classeurs ouverts sont fonctionnelles; on ne peut
que les masquer d'un classeur pour l'autre...

Ce qui veut dire qu'avec par exemple trois classeurs ouverts et, dans
ces classeurs des noms de feuilles identiques, il serait possible (dans
le cas d'évènements déclenchés par "change" ou "clic") qu'une macro du
classeur Y se déclenche dans le classeur Z ??

Autre question: peut-on "configurer" excel (comme on le fait avec Word
en .dot) pour qu'il se mette "par défaut" dans le mode "Ce classeur" par
exemple.

Merci pour ton aide.

Cordialement,
Pierre F.
Avatar
michdenis
A ) Les macros de type événementielles d'un classeur requiert
que le classeur soit celui qui est actif pour qu'une modification
apportée à celui-ci se déclenche.

Les macros événementielles comme :
Private Sub Worksheet_Change(ByVal Target As Range)
s'applique seulement dans la feuille où l'usager a apporté une
modification à cette dernière. Et cet événement va s'exécuter
seulement dans ladite feuille où est la macro et non dans tous
les classeurs ouverts ayant un nom de feuille similaire.

B ) Excel ne possède pas l'équivalent de Normal.Dot de Word.
Ce qui le remplace c'est l'option que tu as d'enregistrer un
fichier modèle. Cependant, même en utilisant cette option,
tu ne peux modifier le comportement par défaut d'excel
à ce qui a trait à la liste déroulante "macros dans" de la
fenêtre d'appel des macros quand excel s'ouvre.

C ) L'action des 2 macros jumelées que je t'ai transmise fonctionne
très bien. Pour chaque classeur où tu inscriras ces 2 procédures
dans leur ThisWorkBook, dès que l'un de ces classeur deviendra
actif, seules les macros écrites dans ce fichier s'afficheront. C'est
la plus facile à mettre en application.

D ) Si tu veux que cela s'applique de facto pour chacun des classeurs
que tu ouvres sur ta machine, tu peux ajouter un module de classe
au classeur Perso.xls. Cette approche est très intéressante mais
elle est limitée à ton poste de travail. Si tu distribues ton
fichier, les
autres utilisateurs n'auront pas droit à cet avantage sauf s'il
insère
à leur tour une copie du module de classe.

à toi de choisir ....








"Pierre F." a écrit dans le message de news:
4e190$4919bdcf$55da2a83$
michdenis a écrit :
Cependant, si tu connais par coeur l'existence
et le nom de la macro, même si elle est masquée, il est possible d'en
faire
l'appel en l'inscrivant soi-même son nom dans la fenêtre d'appel des
macros
suvi d'un clic sur le bouton "exécuter".

Ce que le demandeur désire, c'est pouvoir sélectionner par défaut dans
la liste déroulante "Macros dans " de la fenêtre d'appel des macros, le
classeur où sont inscrits les macros pour que la fenêtre n'affiche que la
liste des macros de ce classeur seulement.



Mille mercis pour ces réponses, je vais tester.

J'ai toutefois un petit doute quant à ma compréhension du problème:
Les macros de tous les classeurs ouverts sont fonctionnelles; on ne peut
que les masquer d'un classeur pour l'autre...

Ce qui veut dire qu'avec par exemple trois classeurs ouverts et, dans
ces classeurs des noms de feuilles identiques, il serait possible (dans
le cas d'évènements déclenchés par "change" ou "clic") qu'une macro du
classeur Y se déclenche dans le classeur Z ??

Autre question: peut-on "configurer" excel (comme on le fait avec Word
en .dot) pour qu'il se mette "par défaut" dans le mode "Ce classeur" par
exemple.

Merci pour ton aide.

Cordialement,
Pierre F.
Avatar
Pierre F.
michdenis a écrit :

B ) Excel ne possède pas l'équivalent de Normal.Dot de Word.
Ce qui le remplace c'est l'option que tu as d'enregistrer un
fichier modèle. Cependant, même en utilisant cette option,
tu ne peux modifier le comportement par défaut d'excel
à ce qui a trait à la liste déroulante "macros dans" de la
fenêtre d'appel des macros quand excel s'ouvre.



OK

C ) L'action des 2 macros jumelées que je t'ai transmise fonctionne
très bien. Pour chaque classeur où tu inscriras ces 2 procédures
dans leur ThisWorkBook, dès que l'un de ces classeur deviendra
actif, seules les macros écrites dans ce fichier s'afficheront. C'est
la plus facile à mettre en application.



Oui, j'ai essayé et ça fonctionne parfaitement bien :-)

D) tu peux ajouter un module de classe
au classeur Perso.xls. Cette approche est très intéressante mais
elle est limitée à ton poste de travail. Si tu distribues ton
fichier, les autres utilisateurs n'auront pas droit à cet avantage


> sauf s'il insère à leur tour une copie du module de classe.

à toi de choisir ....




Effectivement, dans ce cas, c'est inutile; je compte distribuer
largement le fichier.

Merci pour tes explications très claire et bien sûr encore une fois pour
la soluce.

Dernière question :-)
Lorsque le classeur se charge, je vois brièvement apparaître sur mon
écran le message "Verrouillage numérique activé"
Est-ce normal ?

Cordialement,
Pierre F.
1 2