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 :

Attribuer une macro à un seul classeur


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Planification de la production
    Inscrit en
    Février 2018
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Canada

    Informations professionnelles :
    Activité : Planification de la production
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2018
    Messages : 2
    Points : 1
    Points
    1
    Par défaut Attribuer une macro à un seul classeur
    Bonjour

    Premier post pour ma part ici, habituellement, je me contente de rechercher la solution à mon problème. C'est pour vous dire! Sinon je suis peut-être un 6 sur 10 en vba et un 7 en Excel selon mon classement personnel... Ça reste discutable mais ce n'est pas le sujet...

    Voici mon problème : je veux attribuer au bouton delete du clavier d'autre possibilité. Normalement ce bouton efface le contenu de la cellule. Je veux qu'en plus, il efface de commentaire et change la mise en forme de la cellule. J'ai très bien réussi à faire une macro qui fait cela mais je ne peux que l'associer à une image crée dans la feuille.

    Si je l'affecte à la commande delete, la macro s'exécute sur tous les classeurs ouverts, ce que je ne veux pas!

    Dans Module1, ma macro de formatage de la cellule:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Sub del_comm()
     
    	With ActiveCell
     
    	.ClearComments
     
     	'Ici serait placé le code de formatage, je ne le mettrai pas pour alléger le code
     
    	End With
     
    End Sub
    Ensuite va la formule qui modifie l'action du bouton Delete. Je l'ai essayée dans "Thisworkbook" sans succès.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
     
    Application.OnKey "{delete}", "del_comm"
     
    End Sub
    Si je met ce même code dans l'objet "feuille1", ça fonctionne mais pour tous les classeurs ouverts, ce que je ne veux pas. De plus, la nouvelle fonction attribuée au bouton delete reste active même lorsque le classeur qui la contient est fermé... C'est très désagréable...

    PRÉCISION
    En fait, je sais très bien comment me servir de la fonction "onkey", et pour l'instant, la macro de formatage de la cellule fonctionne et je l'ai attribuée a une image sur ma feuille de travail. L'aide que j'ai besoin se trouve au niveau de l'exclusivité de la modification de la touche delete. Il faut qu'elle soit modifiée juste pour un seul et unique classeur.

    Si je résume, je veux attribuer une action autre que celle d'origine à une touche du clavier. Par exemple la touche "t" exécute le "t" mais en plus rajoute les lettres "sss" Ce qui donnerait: "tsss" à chaque fois que j'appuie sur le "t".

    Par contre, je veux que ça ce fasse automatiquement et seulement sur un classeur spécifique, sur toutes les feuilles de ce classeur.

    L'exemple ci-dessus est volontairement farfelue, je ne veux pas savoir comment créer une fonction delete, je veux savoir comment attribuer cette fonction seulement au classeur qui la contient.

    Ce classeur comporte déjà les macro suivantes.

    -un mot de passe géré par macro qui attribue des possibilités spéciales à celui qui le possède ( effacer le contenu, copier-coller, déroulement de la feuille)
    -Bouton qui gère les commentaires qui peuvent être mis dans les cellules avec l'heure et incrémentation des commentaires
    -sauvegarde incrémentielle lors de modification par l'usager...

    Merci!

  2. #2
    Expert éminent sénior
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Points : 18 677
    Points
    18 677
    Par défaut
    Bonjour,

    à mon avis, oublier OnKey, c'est plus simple et moins dangereux …

    Utiliser plutôt l'évènement Worksheet_Change de la feuille concernée
    (sinon au niveau ThisWorkbook pour toutes les feuilles du classeur contenant le code)
    puis y coder si la valeur de la cellule est vide alors ♪ effacer, formater, ♫ …

    ___________________________________________________________________________________________________________
    Je suis Paris, Egypte, Nigeria, New-York, Mogadicio, Barcelone, London, Manchester, Stockholm, Istanbul, Berlin, Nice, Bruxelles, Charlie, …
    C'est parce que la vitesse de la lumière est plus rapide que celle du son que tant de gens paressent brillants avant d'avoir l'air con ! (Thomas Boishardy)

  3. #3
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2013
    Messages
    3 617
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Alimentation

    Informations forums :
    Inscription : Mai 2013
    Messages : 3 617
    Points : 5 912
    Points
    5 912
    Par défaut
    Bonjour,

    En écrivant ceci, tu attribues une Function à la clé
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Application.OnKey "{delete}", "del_comm"
    Par contre, tu dois la désactiver dans BeforeClose et/ou Deactivate pour ne pas qu'elle affecte les autres classeurs, en supprimant la Function de l'appel
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Application.OnKey "{delete}"
    MPi²

  4. #4
    Membre extrêmement actif Avatar de mjpmjp
    Homme Profil pro
    Retraité
    Inscrit en
    Avril 2012
    Messages
    1 133
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hautes Alpes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Santé

    Informations forums :
    Inscription : Avril 2012
    Messages : 1 133
    Points : 1 441
    Points
    1 441
    Par défaut
    bonjour,
    tu peut gérer la "porté" de la touche delete dans Sub del_comm() !!

    quand la sub est appelé tu teste si tu sort (exit) ou tu continues

    @+JP
    Caractéristiques (WEB) phpMyAdmin 4-74 , PHP 5-631 , Apache 2-427 , MySQL 5-719
    Présentation NAS DS-3615xs + 20Go , DSM 6.1.6-15266 Up1 , 12 * WD 4To WD4000F9YZ (10 raid 6+ )+(2 raid 1+) , LinkSys comutateur-switch lgs528p-eu , Onduleur UPS 720W Power Boxx Lcd (4*UPS + 4*MOD)
    Mes contributions (EXCEL) Form GRAPHIQUE: Gestion des boutons , Liste Onglet dynamique...GESTION de FILM

  5. #5
    Nouveau Candidat au Club
    Homme Profil pro
    Planification de la production
    Inscrit en
    Février 2018
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Canada

    Informations professionnelles :
    Activité : Planification de la production
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2018
    Messages : 2
    Points : 1
    Points
    1
    Par défaut
    Citation Envoyé par parmi Voir le message
    Bonjour,

    En écrivant ceci, tu attribues une Function à la clé
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Application.OnKey "{delete}", "del_comm"
    Par contre, tu dois la désactiver dans BeforeClose et/ou Deactivate pour ne pas qu'elle affecte les autres classeurs, en supprimant la Function de l'appel
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Application.OnKey "{delete}"
    Bonjour Parmi

    C'est ce que j'essaie de faire mais je n'arrive pas à remettre la touche delete à sa valeur initiale...

    Je joint une version vierge de mon fichier pour consultation, le mot de passe est Merci

    J'ai désactive les sauvegardes incrémentielles du fichier
    Fichiers attachés Fichiers attachés

  6. #6
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2013
    Messages
    3 617
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Alimentation

    Informations forums :
    Inscription : Mai 2013
    Messages : 3 617
    Points : 5 912
    Points
    5 912
    Par défaut
    Désolé, mais je n'ouvre pas de fichier avec macros, comme la plupart des gens, ici...

    Où déclares-tu tes OnKey?
    Peux-tu mettre les 2-3 procédures où tu actives et désactives ces OnKey?

    Mais comme déjà dit par Marc-L que je salue, ce genre de processus peut t'amener dans le trouble.
    Un gars, ici, jouait avec les touches comme ça pour empêcher les copier/coller ou l'enregistrement et ça finit toujours par boguer à un moment ou l'autre...
    Avec SelectionChange et Change, je pense que tu peux arriver à tes fins.
    MPi²

  7. #7
    Expert éminent sénior
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Points : 18 677
    Points
    18 677
    Par défaut


    Salut Parmi !

    Vu le besoin simple, mieux vaut éviter OnKey et rester dans le feutré d'un évènement ou encore d'un simple bouton …
    C'est parce que la vitesse de la lumière est plus rapide que celle du son que tant de gens paressent brillants avant d'avoir l'air con ! (Thomas Boishardy)

Discussions similaires

  1. exécuter une macro 1 seule fois par semaine ?
    Par deby23 dans le forum VBA Access
    Réponses: 9
    Dernier message: 20/12/2012, 11h22
  2. [XL-2007] Assigner une icone dans le ruban personnalisé de'excel et lui attribuer une macro VBA
    Par Romanuche dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 12/07/2009, 10h44
  3. Comment avoir une macro commune à mes classeurs?
    Par jay-hut dans le forum Macros et VBA Excel
    Réponses: 25
    Dernier message: 16/11/2007, 21h09
  4. Exécuter une macro d'un classeur B a partir d'un classeur A
    Par jackfred dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 25/10/2007, 23h31
  5. Réponses: 19
    Dernier message: 12/10/2007, 13h49

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