Macro reservées à un classeur

Phil-13 Messages postés 22 Statut Membre -  
Phil-13 Messages postés 22 Statut Membre -
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

  1. lermite222 Messages postés 9042 Statut Contributeur 1 199
     
    Bonjour,
    Le plus simple... Changer les raccourcis ?
    A+
    0
    1. Phil-13 Messages postés 22 Statut Membre 2
       
      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
  2. lermite222 Messages postés 9042 Statut Contributeur 1 199
     
    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
    1. Phil-13 Messages postés 22 Statut Membre 2
       
      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
    2. Phil-13 Messages postés 22 Statut Membre 2
       
      Ctrl + Enter affiche le message du 1er classeur ouvert avec activation des macros ...
      0
    3. lermite222 Messages postés 9042 Statut Contributeur 1 199
       
      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
    4. Phil-13 Messages postés 22 Statut Membre 2
       
      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
  3. lermite222 Messages postés 9042 Statut Contributeur 1 199
     
    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
    1. Phil-13 Messages postés 22 Statut Membre 2
       
      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
  4. lermite222 Messages postés 9042 Statut Contributeur 1 199
     
    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
    1. Phil-13 Messages postés 22 Statut Membre 2
       
      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
    2. Phil-13 Messages postés 22 Statut Membre 2
       
      Sur C1 j'ai le message suivant : Classeur C1 - Classeur actif C1
      0
    3. Phil-13 Messages postés 22 Statut Membre 2
       
      Ouuuups je me suis trompé, j'ai le message : Classeur C2 - Classeur actif C1
      0
    4. lermite222 Messages postés 9042 Statut Contributeur 1 199
       
      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
    5. Phil-13 Messages postés 22 Statut Membre 2
       
      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
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. lermite222 Messages postés 9042 Statut Contributeur 1 199
     
    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
  7. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
     
    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
    1. Phil-13 Messages postés 22 Statut Membre 2
       
      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