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 :

Execution macro après modification cellule


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Ingénieur
    Inscrit en
    Janvier 2010
    Messages
    272
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2010
    Messages : 272
    Par défaut Execution macro après modification cellule
    Bonjour à toutes et à tous,

    Sur la base de ce qui est raconté ici : http://www.developpez.net/forums/d83...e-p-condition/ , je souhaite pouvoir exécuter une macro si une cellule d'une plage donnée a été modifiée.

    Concrètement, j'ai une plage de cellules (disons A1:D1,B5:D5) contenant des longueurs. Si l'un d'eux est modifié (disons A1, qui passe de 1000m à 1200m par ex.), j'aimerais pouvoir comparer la nouvelle valeur avec l'ancienne (récupérer l'info 200 donc) et ajouter cette longueur à une autre cellule, disons B5.

    L'idée est donc de comparer deux valeurs d'une même cellule suite à une modification, et d'appliquer une macro en conséquence.
    Cela me dépasse un peu... D'où mon appel à l'aide

    Merci d'avance

  2. #2
    Membre Expert Avatar de rtg57
    Homme Profil pro
    Autodidacte
    Inscrit en
    Mars 2006
    Messages
    1 343
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Autodidacte
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 343
    Par défaut
    Bonjour,

    Si je comprends bien le sujet, il est composé de 2 parties:
    1) Détecter le changement de valeurs dans certaines cellules
    2) Si le changement à lieu dans les cellules ciblées, détecter la variation de valeur.

    J'aurais donc 2 propositions à faire:
    1) Utiliser l'évènement Worksheet_Change(ByVal Target As Range). Target permet de connaitre quelle cellule a été modifiée. On compare ensuite ses coordonnées pour savoir si elle fait partie de la zone à surveiller.

    2) Tenir à jour un tableau contenant les valeurs des cellules cibles. Lorsqu'un évènement à lieu dans une cellule surveillée, on compare sa valeur à celle du tableau mémoire. On peut ainsi détecter une variation. Ensuite on met cette nouvelle valeur dans le tableau mémoire.

  3. #3
    Membre éclairé
    Homme Profil pro
    Ingénieur
    Inscrit en
    Janvier 2010
    Messages
    272
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2010
    Messages : 272
    Par défaut
    Bonjour et merci de ta réponse !

    C'est la solution qui m'était finalement apparue.. Je suis étonné qu'il n'y ait pas de gestion de la mémoire directement dans Excel, et qu'il faille contourner cela par la méthode que tu proposes !

    Enfin, du moment que ça fonctionne

    Merci !

    Petite variation :
    La feuille pour laquelle je souhaite détecter les modifications est générée via macro. Des modifications sont donc détectées lors de la génération de la feuille.

    Je souhaiterais ne pas en tenir compte. J'ai pensé à jouer sur un booléen qui serait à true quand la macro de génération s'exécute, et qui conditionnerait l'exécution de Worksheet_change. Cela semble-t-il réalisable ?

    Le problème étant que la macro de génération n'est pas dans un module mais dans la feuille directement (feuille différente de la feuille générée), et que je galère à transmettre le booléen à la feuille générée.. En espérant ne pas être trop confus !


  4. #4
    Membre Expert Avatar de ZebreLoup
    Homme Profil pro
    Ingénieur Financier
    Inscrit en
    Mars 2010
    Messages
    994
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur Financier
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 994
    Par défaut
    Regarde du coté de la propriété EnableEvents. Il suffit de la mettre à False au moment de la création de la feuille et de ne pas oublié de la remettre à True à la fin.

  5. #5
    Membre Expert Avatar de rtg57
    Homme Profil pro
    Autodidacte
    Inscrit en
    Mars 2006
    Messages
    1 343
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Autodidacte
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 343
    Par défaut
    Bonjour,

    personnellement, j'ai résolu ce problème de la manière suivante:
    Au début du module de programmation concernant cette feuille, je déclare une variable publique, par exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Public verrou_feuille_saisie as Boolean
    Ce drapeau est mis à True pour verrouiller le traitement de Worksheet_Change(), et False pour l'autoriser.

    A l'entrée de Worksheet_Change(), je mets cette ligne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    If verrou_feuille_saisie = True Then
      Exit Sub
    Enf If
    Dans le cas de plusieurs système de verrouillage, on peut même envisager ceci:
    Dans le module ThisWorkbook, on déclare plusieurs drapeau publics, par exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Public verrou_feuille_saisie as Boolean ' Verrouillage du traitement Worksheet_Change() de la feuille de saisie
    Public verrou_feuille_calcul as Boolean ' Idem pour la feuille de calcul
    /.../
    Ensuite, de n'importe quelle partie du programme, on peut accéder à ces drapeaux de verrouillage. Par exemple, si la feuille de calcul doit écrire des valeurs dans la feuille de saisie, sans déclencher l'évènement Worksheet_Change(), cela donne ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ThisWoorkbook.verrou_feuille_saisie = True
    /.../
    ThisWorkbook.verrou_feuille_saisie = False
    Il m'arrive même d'auto-verrouiller le traitement dans la routine Worksheet_Change(), lorsque celle-ci doit modifier elle-même le contenu de la feuille, pour corriger une entrée erronée par exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Private Sub Worksheet_Change(ByVal Target As Range)
      If verrou_feuille_saisie = True Then
        Exit Sub
      End If
     
      /.../
      ThisWoorkbook.verrou_feuille_saisie = True
      /.../
      ThisWorkbook.verrou_feuille_saisie = False
    C'est rustique et trivial, mais c'est simple.

  6. #6
    Membre éclairé
    Homme Profil pro
    Ingénieur
    Inscrit en
    Janvier 2010
    Messages
    272
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2010
    Messages : 272
    Par défaut
    Rebonjour et merci à vous 2 pour vos réponses

    Je comprends bien l'intérêt et le but de vos astuces, j'ai cependant quelques difficultés à les mettre en place..

    Pour faire simple : Deux modules séparés pour 2 feuilles différentes (1 et 2 disons).
    Une macro de la feuille 2 génère la trame de la feuille 1, et je ne souhaite tenir compte de ces modifications.
    J'ai déclaré un booléen comme indiqué par rtg57, dans la feuille 1, et je le passe à true ou false suivant le besoin dans la feuille 2.
    Est-ce bien l'esprit de vos réponses ?

    Si c'est bien le cas, alors je suis coincé, ou du moins les affectations au booléen ne fonctionnent pas. D'où je pense que je n'ai pas bien compris

    Merci !

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

Discussions similaires

  1. [XL-2007] Macro activé après modification de cellule
    Par neoinfo dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 24/05/2013, 21h36
  2. [OpenOffice][Tableur] [macro] Evenements : modif d'une cellule dans calc
    Par Eruil dans le forum OpenOffice & LibreOffice
    Réponses: 1
    Dernier message: 23/04/2007, 16h26
  3. [VBA-E]Pouvoir Annuler et Rétablir aprés execution macro
    Par zoumzoum59 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 05/02/2007, 22h51
  4. executer une macro apres validation d'une cellule
    Par lio62 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 16/01/2007, 19h20
  5. [Excel] Executer macro après ouverture
    Par DMboup dans le forum Access
    Réponses: 3
    Dernier message: 25/12/2006, 19h35

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