Macro reservées à un classeur

Fermé
Phil-13 Messages postés 21 Date d'inscription jeudi 15 décembre 2011 Statut Membre Dernière intervention 25 janvier 2018 - 15 déc. 2011 à 10:50
Phil-13 Messages postés 21 Date d'inscription jeudi 15 décembre 2011 Statut Membre Dernière intervention 25 janvier 2018 - 15 déc. 2011 à 18:06
Bonjour,

J'ai créé dans un classeur C1 une macro (dans module 1) qui s'appelle Zoom. Dans un autre classeur C2 j'ai créé une macro (dans module 1) qui s'appelle aussi Zoom (mais qui ne fait pas exactement la même chose que la 1ère. Ces 2 macros sont déclenchables par le même raccourci clavier (Ctrl-Enter).

Le problème c'est que quand j'ouvre les 2 classeurs, (1 en activant les macros et l'autre sans), le classeur ouvert sans activation des macros exécute la macro Zoom du 1er classeur.

Je pensais que les macros de classeur n'étaient actives que pour un classeur donné. Y a t il une solution pour qu'il en soit ainsi ou faut il que je renomme toutes mes macros (en fait j'en ai beaucoup et elles ont le même nom d'un classeur à l'autre) en les préfixant par le nom du classeur ou une autre nom (C1Zoom et C2Zoom par exemple) ?

J'espère avoir été clair.

Merci de vos réponses (ou questions complémentaires)

Cordialement

Philippe


6 réponses

lermite222 Messages postés 8702 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 1 193
15 déc. 2011 à 11:11
Bonjour,
Le plus simple... Changer les raccourcis ?
A+
0
Phil-13 Messages postés 21 Date d'inscription jeudi 15 décembre 2011 Statut Membre Dernière intervention 25 janvier 2018 2
15 déc. 2011 à 11:27
Bonjour,
Oui, c'est sûr, mais alors autant garder les raccourcis et changer le nom des macros, sinon avec 10 classeurs différents partageant une même macro (zoom sur quelques cellules toujours différentes dans mon exemple), il faudrait alors se souvenir des raccourcis affectés à chacun des classeurs ... Ce n'est pas envisageable
Merci
0
lermite222 Messages postés 8702 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 1 193
Modifié par lermite222 le 15/12/2011 à 11:56
10 classeurs ouvert avec 10 macros avec le même raccourci = exécution des 10 Macros.
J'ai bien une autre idée mais..
Montre un peu deux de tes macros différentes.
Si tu te cognes à un pot et que ça sonne creux, c'est pas forcément le pot qui est vide. ;-)(Confucius)
NOTE : Je ne répond pas aux MP pour les questions techniques.
0
Phil-13 Messages postés 21 Date d'inscription jeudi 15 décembre 2011 Statut Membre Dernière intervention 25 janvier 2018 2
15 déc. 2011 à 12:01
Classeur C1 :

Option Explicit

Private Sub Workbook_Open()
Application.OnKey "^~", "Zoom" ' CTRL ENTER
End Sub

Module 1 :

Option Explicit

Sub Zoom()
MsgBox "Classeur C1"
End Sub

Classeur C2 :

Option Explicit

Private Sub Workbook_Open()
Application.OnKey "^~", "Zoom" ' CTRL ENTER
End Sub

Module 1 :

Option Explicit

Sub Zoom()
MsgBox "Classeur C2"
End Sub
0
Phil-13 Messages postés 21 Date d'inscription jeudi 15 décembre 2011 Statut Membre Dernière intervention 25 janvier 2018 2
15 déc. 2011 à 12:02
Ctrl + Enter affiche le message du 1er classeur ouvert avec activation des macros ...
0
lermite222 Messages postés 8702 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 1 193
15 déc. 2011 à 12:23
Il n'y a quand même pas seulement le nom du classeur dans tes macros ?
Montre exactement ce qu'il y a dedans.
0
Phil-13 Messages postés 21 Date d'inscription jeudi 15 décembre 2011 Statut Membre Dernière intervention 25 janvier 2018 2
15 déc. 2011 à 13:30
Bien sur que non c'est juste un exemple pour faire court. Ma macro zoom est programmée pour faire une énumération de toutes les feuilles du classeur et zoomer afin d'afficher à l'échèle de l'écran une sélection de cellules (jamais les mêmes selon les écrans). Mais ce n'est pas là le fond du problème, c'est le concept de la macro "réservée" à un classeur que j'essaye de mettre en place
0
lermite222 Messages postés 8702 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 1 193
15 déc. 2011 à 12:31
En relisant ton dernier commentaire.. la macro ne doit être activée que pour le premier classeur ouvert et pas pour les autres.
Peut-être avec
Private Sub Workbook_Open()
    If Application.Workbooks.Count = 1 Then
        Application.OnKey "^~", "Zoom" ' CTRL ENTER
    End If
End Sub
0
Phil-13 Messages postés 21 Date d'inscription jeudi 15 décembre 2011 Statut Membre Dernière intervention 25 janvier 2018 2
15 déc. 2011 à 13:27
Non, non, ce n'est pas qu'elle doit n'être activée que pour le 1er classeur ouvert, je souhaite juste que chaque action Ctrl+Enter sur un classeur déclenche la macro correspondante au classeur. Sur C1 CTRL+Enter doit afficher "Classeur C1" et sur le classeur C2 le message doit être "Classeur C2". Actuellement, en ouvrant C1 puis C2 (et en activant les macros dans les 2 classeurs), Ctrl+Enter affiche toujours le message du 1er classeur ouvert.

De plus je voudrais qu'en activant pas les macros sur un des 2 classeurs, Ctrl+enter soit sans effet (actuellement Ctrl+Enter déclenche la macro du classeur ouvert avec prise en charge des macros).

En définitive, je pensais qu'en définissant une macro au sein d'un classeur, cette macro n'était visible QUE de ce classeur et non d'un autre.
0
lermite222 Messages postés 8702 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 1 193
Modifié par lermite222 le 15/12/2011 à 13:47
pour simuler ce que tu veux tu pourrais mettre en début de macro
    If ActiveWorkbook.Name <> ThisWorkbook.Name Then Exit Sub

et laisser toutes les macros active
Si tu te cognes à un pot et que ça sonne creux, c'est pas forcément le pot qui est vide. ;-)(Confucius)
NOTE : Je ne répond pas aux MP pour les questions techniques.
0
Phil-13 Messages postés 21 Date d'inscription jeudi 15 décembre 2011 Statut Membre Dernière intervention 25 janvier 2018 2
15 déc. 2011 à 14:05
Je viens d'essayer, ça ne marche pas, le classeur actif quand je suis sur C1 (et que j'ai ouvert C1 en premier puis C2) est bien C1, mais il exécute la macro Zoom de C2. De plus je ne veux pas qu'il essaye de lancer la macro de C2, conceptuellement elle devrait être invisible depuis C1 et c'est la macro de C1 qui devrait être exécutée.

Pour faire ce test j'ai remplacé la macro zoom dans les 2 classeurs comme suit :

dans C1 MsgBox "Classeur C1 - Classeur actif " & ActiveWorkbook.Name

Dans C2 MsgBox "Classeur C2 - Classeur actif " & ActiveWorkbook.Name
0
Phil-13 Messages postés 21 Date d'inscription jeudi 15 décembre 2011 Statut Membre Dernière intervention 25 janvier 2018 2
15 déc. 2011 à 14:06
Sur C1 j'ai le message suivant : Classeur C1 - Classeur actif C1
0
Phil-13 Messages postés 21 Date d'inscription jeudi 15 décembre 2011 Statut Membre Dernière intervention 25 janvier 2018 2
15 déc. 2011 à 14:20
Ouuuups je me suis trompé, j'ai le message : Classeur C2 - Classeur actif C1
0
lermite222 Messages postés 8702 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 1 193
15 déc. 2011 à 14:42
Mais non... met exactement la ligne comme je l'ai écrite.
te relisant...
C1 ouvert en premier >> Ensuite C2
C2 Actif > La macro de C1 doit fonctionner et pas celle de C2 ??
Si oui, ça va être compliquer
J'en revient à mes postes précédant.. montre les 2 macros en entier.
0
Phil-13 Messages postés 21 Date d'inscription jeudi 15 décembre 2011 Statut Membre Dernière intervention 25 janvier 2018 2
15 déc. 2011 à 14:54
Je n'ai que ça dans mon test. Il faut créer un classeur C1 puis un classeur C2, y mettre les événements suivants :

Dans les 2 classeurs :

Private Sub Workbook_Open()
Application.OnKey "^~", "Zoom" ' CTRL ENTER
End Sub

puis dans le module suivant de C1

Sub Zoom()
MsgBox "Classeur C1 - Classeur actif " & ActiveWorkbook.Name
End Sub

et dans le module suivant de C2

Sub Zoom()
MsgBox "Classeur C2 - Classeur actif " & ActiveWorkbook.Name
End Sub
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
lermite222 Messages postés 8702 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 1 193
Modifié par lermite222 le 15/12/2011 à 15:18
Une autre façon de faire ?
Le raccourci Ctrl+Enter sélectionne la colonne active !! donc pas possible avec Enter.
J'ai mis Ctrl+d
Private Sub Workbook_Open()  
Dim S As String 
    S = "'" & Workbooks(1).Name & "'!Zoom" 
    Application.MacroOptions Macro:=S, _ 
        Description:="", ShortcutKey:="d"  
End Sub

Si tu te cognes à un pot et que ça sonne creux, c'est pas forcément le pot qui est vide. ;-)(Confucius)
NOTE : Je ne répond pas aux MP pour les questions techniques.
0
michel_m Messages postés 16579 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 1 octobre 2022 3 279
Modifié par michel_m le 15/12/2011 à 16:23
Bonjour

Excusez l'incruste une piste

le nom du 1° classeur ouvert reste en mémoire jusqu'à l'extinction d'excel à adapter

dans les codes d'ouverture 

     If Application.Workbooks.Count = 1 Then '1° classeur ouvert (d'après lermite) 
    ' ("curiosité" trouvée sur le site web de Laurent Longre ("hidden namespace") ) 
    ExecuteExcel4Macro "set.name(""macroxl4"",""" & ThisWorkbook.Name & """)" 
     End if 


puis appel des "zooms"

Sub Zoom()

MsgBox "Classeur actif " & Application.ExecuteExcel4Macro("get.name(""macroxl4"")")
End Sub

l.longre:
http://xcell05.free.fr/
Michel
0
Phil-13 Messages postés 21 Date d'inscription jeudi 15 décembre 2011 Statut Membre Dernière intervention 25 janvier 2018 2
15 déc. 2011 à 18:06
Bonjour Michel et merci d'avoir cherché une solution. En fait celle que tu proposes est trop complexe pour ma problématique : Je souhaite juste une solution pour que des procédures (macros) faisant des traitements quasiment identiques (on pourrait imaginer msgbox "toto' dans une et msgbox "tata" dans l'autre) puissent être nommées de de la même façon tout en restant exclusivement réservées au classeur auquel elles appartiennent. Cela ne semble pas possible non plus sous Excel 2010, la version que j'utilise chez moi. Cela revient à nommer toutes les macro avec un préfixe ou un sufixe (genre C1_Zoom et C2_Zoom). C'est dommage que Excel ne le fasse pas de lui même sur une macro définie pour un seul classeur. J'ai essayé aussi Call ThisWorkbook.Zoom, ca ne marche pas ... Je continue de chercher ...
0