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 :

Lancer une macro suite à la modification d'une cellule


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Ingénieur
    Inscrit en
    Février 2018
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Ingénieur

    Informations forums :
    Inscription : Février 2018
    Messages : 12
    Par défaut Lancer une macro suite à la modification d'une cellule
    Bonjour,

    Je souhaiterais copier de manière automatique toute une plage de données dès que celle ci est mise à jour

    Dans mon fichier excel j'ai

    - un onglet appelé Export qui recoit des données de manières régulières et automatiques provenant d'un logiciel externe qui vient écrire dans cet onglet
    - un onglet appelé Recap où je souhaite remettre en forme ces données

    Dans cet onglet Recap j'ai une formule en B1 qui compte le nombre de colonnes non vides dans mon onglet Export
    Je souhaiterais que dès que sa valeur change les données présentes dans l'onglet Export soient copiées dans mon onglet Recap

    J'ai crée une macro dans le workbook en public, appellée Copie_Valeurs qui copie les données d'un onglet à l'autre et elle marche.
    Maintenant j'aimerais la lancer de manière automatique dès que la cellule B1 est incrémentée mais ce que j'ai écrit ne fonctionne pas :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Private Sub Worksheet_Change(ByVal Target As Range)
      Application.EnableEvents = False
      If Target.Address <> "$B$1" Then Exit Sub
      Call Copie_valeurs
    End Sub
    Merci d'avance de votre aide

  2. #2
    Expert éminent
    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
    Par défaut
    Bonjour,

    si, elle a marché la première fois mais elle ne pouvait la seconde fois vu l'erreur de conception du code
    car les évènements n'y sont pas réactivés avant la fin de la procédure ‼ A corriger, enregistrer, fermer Excel et réouvrir …

    ___________________________________________________________________________________________________________
    Je suis Paris, Egypte, Nigeria, New-York, Mogadicio, Barcelone, London, Manchester, Stockholm, Istanbul, Berlin, Nice, Bruxelles, Charlie, …

  3. #3
    Membre averti
    Homme Profil pro
    Ingénieur
    Inscrit en
    Février 2018
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Ingénieur

    Informations forums :
    Inscription : Février 2018
    Messages : 12
    Par défaut
    Bonjour,

    J'ai suivi vos conseils j'ai modifié le code de la manière suivante pour réactiver l'évènement

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Private Sub Worksheet_Change(ByVal Target As Range)
        Application.EnableEvents = False
        If Target.Address <> "$B$1" Then Exit Sub
        Call Copie_valeurs
        Application.EnableEvents = True
    End Sub
    Malheureusement ce n'est toujours pas bon. C'est sans doute une erreur et un problème futile pour vous mais je n'ai pas les bases et malgré mes recherches je ne trouve pas de formation s'adressant aux tout débutants

  4. #4
    Expert confirmé
    Homme Profil pro
    Responsable des études
    Inscrit en
    Juillet 2014
    Messages
    2 680
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable des études
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2014
    Messages : 2 680
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub Worksheet_Change(ByVal Target As Range)
        Application.EnableEvents = False
        If Target.Address <> "$B$1" Then Exit Sub
    Bonjour,

    J'ai tronqué ton code pour bien te montrer l'erreur, si tu fait un changement ailleurs qu'en B1 alors tu quittes la sub sans réactiver les évènements. Du coup plus rien ne se déclenche.
    Donc soit tu réactive les évènements avant le exit sub, soit tu déplace la désactivation.

  5. #5
    Membre Expert
    Inscrit en
    Septembre 2007
    Messages
    1 142
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 142
    Par défaut
    Bonjour,


    Citation Envoyé par emjidé Voir le message
    J'ai suivi vos conseils j'ai modifié le code de la manière suivante pour réactiver l'évènement
    Malheureusement ce n'est toujours pas bon
    il ne faut pas enlever les événements systématiquement sinon cela ne fonctionne qu'une fois effectivement.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Private Sub Worksheet_Change(ByVal Target As Range)
        If Target.Address <> "$B$1" Then Exit Sub
         Application.EnableEvents = False
         Call Copie_valeurs
        Application.EnableEvents = True
    End Sub

  6. #6
    Membre averti
    Homme Profil pro
    Ingénieur
    Inscrit en
    Février 2018
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Ingénieur

    Informations forums :
    Inscription : Février 2018
    Messages : 12
    Par défaut
    Merci Halaster08 j'ai suivi vos conseils j'ai modifié le code en conséquence

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Private Sub Worksheet_Change(ByVal Target As Range)
        Application.EnableEvents = False
        If Target.Address = "$B$1" Then
        Call Copie_valeurs
        Application.EnableEvents = True
        End If
    End Sub
    J'ai vu ensuite également la réponse de Anasecu qui a l'air de fonctionner de la même façon.

    Cependant peu importe le code si B1 se met automatiquement à jour de par ma formule => les valeurs ne sont pas copiées, elles sont copiées uniquement si je viens modifier manuellement la valeur de B1. Quelqu'un pourrait me guider sur la manière à adopter pour que si ma formule donne un résultat différent en B1 => la copie se lance ?

    D'après les recherches que j'avais effectué on pouvait le faire avec Worksheet_change ?

  7. #7
    Expert confirmé
    Homme Profil pro
    Responsable des études
    Inscrit en
    Juillet 2014
    Messages
    2 680
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable des études
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2014
    Messages : 2 680
    Par défaut
    Tu as fait la même erreur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
       Application.EnableEvents = False
        If Target.Address = "$B$1" Then
        Call Copie_valeurs
        Application.EnableEvents = True
        End If
    La réactivation est dans le if alors que la désactivation ne l'ai pas, donc la désactivation a toujours lieu mais si la condition n'est pas vérifiée alors la réactivation n'aura pas lieu.

    Dans le code d'anasecu, soit on désactive puis réactive soit on ne fait rien, donc ça marche.

    Cependant peu importe le code si B1 se met automatiquement à jour de par ma formule => les valeurs ne sont pas copiées, elles sont copiées uniquement si je viens modifier manuellement la valeur de B1. Quelqu'un pourrait me guider sur la manière à adopter pour que si ma formule donne un résultat différent en B1 => la copie se lance ?
    Je n'ai jamais fait, je crois avoir lu que c'est pas simple, ce qui est sur c'est que la question a déjà été posé, en cherchant bien tu devrais pouvoir trouver la réponse.

  8. #8
    Membre Expert
    Inscrit en
    Septembre 2007
    Messages
    1 142
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 142
    Par défaut
    Bonjour,

    Citation Envoyé par emjidé Voir le message
    Cependant peu importe le code
    J'ai bien l'impression que tu ne fais guère attention au code et tu vas vers de grosses désillusions mais c'est ton problème : si tu n'es pas précis VBA ne va faire la précision de lui-même.

Discussions similaires

  1. [XL-2010] Exécuter une macro suite à des modifications de contenus de cellules
    Par poqcdlm dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 26/11/2014, 17h12
  2. [XL-2010] Reprise d'une macro 1 après exécution d'une macro 2 appelée par la macro 1
    Par julio44 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 02/07/2014, 12h32
  3. [XL-2007] Lancer une macro suite à un changement de valeur de cellule
    Par jnauche dans le forum Excel
    Réponses: 1
    Dernier message: 21/03/2014, 17h38
  4. declencher une macro suite a une modification d une feuille Excel
    Par chamus dans le forum Macros et VBA Excel
    Réponses: 15
    Dernier message: 11/01/2007, 09h50
  5. Modification d'une combo suite à la saisi dans un champ texte
    Par GabriHell dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 16/05/2006, 17h48

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