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

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

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : juillet 2017
    Messages : 944
    Points : 355
    Points
    355
    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
    Il ne savait pas que c'était impossible, donc il l' a fait...

  2. #2
    Rédacteur

    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    janvier 2010
    Messages
    10 512
    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 : 10 512
    Points : 24 957
    Points
    24 957
    Billets dans le blog
    29
    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
    Ma dernière contribution : VBA - Les macros complémentaires

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

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : mars 2007
    Messages : 2 256
    Points : 4 948
    Points
    4 948
    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.
    Cordialement,
    Patrice
    Personne ne peut détenir tout le savoir, c'est pour ça qu'on le partage.

    Pour dire merci, cliquer sur et quand la discussion est finie, penser à cliquer sur

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

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : juillet 2017
    Messages : 944
    Points : 355
    Points
    355
    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
    Il ne savait pas que c'était impossible, donc il l' a fait...

  5. #5
    Rédacteur

    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    janvier 2010
    Messages
    10 512
    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 : 10 512
    Points : 24 957
    Points
    24 957
    Billets dans le blog
    29
    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
    Ma dernière contribution : VBA - Les macros complémentaires

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

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : juillet 2017
    Messages : 944
    Points : 355
    Points
    355
    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...
    Il ne savait pas que c'était impossible, donc il l' a fait...

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

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : mars 2007
    Messages : 2 256
    Points : 4 948
    Points
    4 948
    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.
    Cordialement,
    Patrice
    Personne ne peut détenir tout le savoir, c'est pour ça qu'on le partage.

    Pour dire merci, cliquer sur et quand la discussion est finie, penser à cliquer sur

  8. #8
    Membre éclairé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    juin 2019
    Messages
    527
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : juin 2019
    Messages : 527
    Points : 799
    Points
    799
    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, 20h41
  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, 15h21
  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, 11h21
  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, 13h57

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