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 :

Déclencher ue code de Private Sub Worksheet_Change(ByVal Target As Range) [XL-365]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Homme Profil pro
    Retraité
    Inscrit en
    Juillet 2017
    Messages
    1 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juillet 2017
    Messages : 1 288
    Par défaut Déclencher ue code de Private Sub Worksheet_Change(ByVal Target As Range)
    Bonjour,

    y-a-t-il un moyen de déclencher le code Worksheet_Change depuis une autre macro

    J'ai une macro Worksheet_Change d'une feuille "f1" dans laquelle je veux déclencher le code Worksheet_Change de la feuille "f2" qui se déclenche lui même quand la cellule A1 de "f2" est modifiée

    Pour cela je simule dans le code de "f1" une modification de "f2" par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    f2.Range("A100") =  f2.Range("A1")   '  Je copie A1 dans une cellule temporaire A100
     f2.Range("A1") = ""   ' j'efface A1 pour provoquer un changement
     f2.Range("A1") = f2.Range("A100")  ' je restitue A1 à partir de la copie de A100
    Cela marche bien, mais cette séquence est dans une boucle (A1 à A50) et prend beaucoup de temps

    Je pense qu'il doit y a voir un moyen de déclencher le code Worksheet_Change de la feuille "f2" directement sans avoir à faire ces "move" successifs

  2. #2
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 168
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 168
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Le but d'une procédure événementielle est de se déclencher lorsqu'un événement se produit et pas de le provoquer par appel.
    Si vous expliquiez le but recherché, il y a certainement une autre solution.
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  3. #3
    Expert confirmé Avatar de Patrice740
    Homme Profil pro
    Retraité
    Inscrit en
    Mars 2007
    Messages
    2 475
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mars 2007
    Messages : 2 475
    Par défaut
    Bonjour,
    Citation Envoyé par retraite83 Voir le message
    y-a-t-il un moyen de déclencher le code Worksheet_Change depuis une autre macro.
    Pour déclencher l'évènement, c'est tout simple : il suffit donc d'écrire dans la feuille concernée (c'est ce qui déclenche l'évènement).

    Mais ce n'est peut-être pas ce que tu voudrais faire ...
    Peut-être voudrais-tu exécuter le code depuis une macro sans déclencher l'évènement : dans ce cas c'est l'architecture de ton code qu'il faut revoir :

    Dans le module de la feuille :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub Worksheet_Change(ByVal Target As Range)
      Call monModule.maMacro
    End Sub
    Dans un module standard (ici nommé monModule) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Public Sub maMacro()
      ' ici le code qui était dans _change :
      ' ...
    End Sub
    Dans le module de ta macro :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Sub taMacro()
      ' ...
      Call monModule.maMacro
      ' ...
    End Sub
    Pour moi, le code d'une macro Worksheet_Change ne doit jamais provoquer d'évènement dans une autre feuille.

  4. #4
    Membre éprouvé
    Homme Profil pro
    Retraité
    Inscrit en
    Juillet 2017
    Messages
    1 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juillet 2017
    Messages : 1 288
    Par défaut
    Merci je vais regarder
    pour expliquer mon besoin :

    j'ai dans la feuille f2 un code Worksheet_Change(ByVal Target As Range) qui déclenche une mise en page dans une feuille f3 en anglais par défaut (EN)

    dans la feuille f1 l'utilisateur peut choisir la langue (FR ou EN)

    Quand l'utilisateur change la langue, il sélectionne FR pour le français et je veux que dans f3 la mise en page soit en français, donc je voudrai déclencher Worksheet_Change(ByVal Target As Range) de f2

    Idem s'il revient en EN

  5. #5
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 168
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 168
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    L'exemple dans cette contribution, titrée Etiquettes de colonnes mutltilingues pour tableaux structurés vous inspirera sans doute.
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  6. #6
    Membre éprouvé
    Homme Profil pro
    Retraité
    Inscrit en
    Juillet 2017
    Messages
    1 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juillet 2017
    Messages : 1 288
    Par défaut
    #3
    Pour déclencher l'évènement, c'est tout simple : il suffit donc d'écrire dans la feuille concernée (c'est ce qui déclenche l'évènement).
    c'est ce que je fais mais c'est long
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    f2.Range("A100") =  f2.Range("A1")   '  Je copie A1 dans une cellule temporaire A100
     f2.Range("A1") = ""   ' j'efface A1 pour provoquer un changement
     f2.Range("A1") = f2.Range("A100")  ' je restitue A1 à partir de la copie de A100
    #5
    Merci Philippe, il va me falloir un petit moment pour digérer et comprendre votre solution...

  7. #7
    Expert confirmé Avatar de Patrice740
    Homme Profil pro
    Retraité
    Inscrit en
    Mars 2007
    Messages
    2 475
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mars 2007
    Messages : 2 475
    Par défaut
    Citation Envoyé par retraite83 Voir le message
    c'est ce que je fais mais c'est long
    N'y aurait-t'il pas un problème de récursivité ?
    (i;e. : la procédure de l'évènement change ne déclenche-t'elle l'événement ?)
    Penser à Application.EnableEvents = False avec un gestionnaire d'erreur indispensable dans ce cas.

  8. #8
    Membre Expert Avatar de Thumb down
    Homme Profil pro
    Retraité
    Inscrit en
    Juin 2019
    Messages
    1 574
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juin 2019
    Messages : 1 574
    Par défaut
    Bonjour,
    1. tu déclare la méthode en public
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      Public Sub Worksheet_Change(ByVal Target As Range)
    2. tu l'appel comme suis
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      F2.Worksheet_Change F2.Range("A1")

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 8
    Dernier message: 22/11/2015, 19h41
  2. [XL-2007] Ajouter une "Target" à Private Sub Worksheet_Change(ByVal Target As Range)
    Par 'OTM' dans le forum Macros et VBA Excel
    Réponses: 36
    Dernier message: 19/12/2014, 14h21
  3. [Toutes versions] Private Sub Worksheet_Change(ByVal Target As Range) et protection
    Par Giantrick dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 07/01/2013, 10h21
  4. [XL-2007] petit soucis avec un Private Sub Worksheet_Change(ByVal Target As Range)
    Par dris974 dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 28/03/2011, 12h57

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