IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

portée macro excel


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Janvier 2017
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Janvier 2017
    Messages : 12
    Par défaut portée macro excel
    Bonjour,
    Je viens partager ici une solution simple et sûrement améliorable pour qu'une macro écrite pour un classeur et associée à un raccourci (type Ctrl +a) ne puisse pas être lancée si le classeur n'est pas actif.
    Problème :
    1- sur un classeur (disons classeur1.xlsb), je fais une Sub insert() qui insère une ligne au-dessus de la ligne 10 et la colore en vert. Je lui associe Ctrl + i.
    2- en plus de classeur1.xlsb, j'ouvre classeur2.xlsb, qui n'a rien à voir avec le 1er. Je tappe alors Ctrl + i pour mettre un texte en italique et... c'est la Sub insert() qui se lance et je me retrouve avec une ligne verte !

    J'ai cherché assez longtemps une solution pour réduire la portée d'une Sub à un seul classeur, mais je n'ai pas trouvé. La syntaxe "Option Private Module" au début du module ne permet pas d'affecter un raccourci clavier. Cela peut avoir du sens car un raccourci est par nature pour tous les classeurs. Mais pour mon besoin, non !

    Solution :

    Dans la Sub insert(), mettre l'instruction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Call ClasseurActifCheck
    Puis créer :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Sub ClasseurActifCheck()
    If ActiveWorkbook.Name <> ThisWorkbook.Name Then
        Call MsgBox("Vous avez tapé un raccourci clavier qui correspond à une Sub du fichier '" & ThisWorkbook.Name & "'." _
        & Chr(10) & "Ce classeur n'étant pas celui qui était actif lors du lancement de la Sub, celle-ci n'est pas exécutée", _
        vbInformation, "Sub ClasseurActifCheck()")
        End
    End If
    End Sub
    Si le fichier actif n'est pas celui où est enregistré la macro, on n'exécute pas la macro.

    En espérant vous faire gagner un peu de temps de recherche si vous avez le même besoin que moi.

  2. #2
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Erinaceus1975 Voir le message
    Bonjour,

    Pour faire cela et si les deux classeurs ne sont pas strictement identiques, j'utilise une fonction de type booléen qui va chercher les renseignements uniques propres au fichier cible dans le classeur actif. Exemple : une série d'onglets, une ou des zones nommées, un tableau structuré...

Discussions similaires

  1. Portée des macros excel
    Par usul3 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 19/08/2011, 16h12
  2. Macro excel perso.xls et évènement commandButton1_click()
    Par Annie dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 30/09/2005, 19h05
  3. [macro Excel]
    Par Mugette dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 15/09/2005, 09h54
  4. débutant en VBA je n'arrive pas à finir ma macro excel
    Par jeanpierreco dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 19/01/2005, 12h20
  5. Porter une macro Excel vers OpenOffice
    Par totofweb dans le forum Applications et environnements graphiques
    Réponses: 3
    Dernier message: 13/07/2004, 13h20

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo