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

VBA Project Discussion :

Exécuter macro VBA sur changement de valeur de cellule


Sujet :

VBA Project

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Septembre 2021
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Septembre 2021
    Messages : 2
    Points : 1
    Points
    1
    Par défaut Exécuter macro VBA sur changement de valeur de cellule
    Bonjour,

    Je viens assez souvent sur ce forum que je trouve très instructif et m'a permis de trouver les réponses à mes questions... sauf cette fois-ci, c'est pourquoi c'est à mon tour de vous poser une colle.

    Je vous écris donc car je rencontre un problème.
    J'ai besoin d'exécuter une macro VBA quand la valeur d'une cellule change. Pour cela j'ai testé le code suivant :

    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)
    If Target.Address = "$A$1" Then
        ...
        ' Code VBA
        ...
    End If
    End Sub
    Ou le code suivant :

    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 Not Intersect(Target, Range("A1")) Is Nothing Then
        ...
        ' Code VBA
        ...
    End sub
    Dans les 2 cas, si je change la valeur de la cellule A1 manuellement, le code VBA est bien exécuté
    Si c'est une macro VBA qui change la valeur de cette cellule, cela fonctionne aussi.
    Mais si c'est une formule Excel qui change cette valeur du genre A1= B1+C1 (mais avec B1 et C1 d'une autre feuille pour m'assurer que ce n'est pas le changement de B1 ou C1 de la même feuille qui lance la procédure), j'ai bien la confirmation que rien ne se passe, la procédure Private Sub Worksheet_Change(ByVal Target As Range) n'est pas lancée. Je pense qu'il regarde la formule de la cellule (qui elle ne pas change) et non pas la valeur du résultat de la formule.

    Avez-vous une idée pour y remédier ?

    Merci d'avance pour votre aide.

  2. #2
    Nouveau Candidat au Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Septembre 2021
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Septembre 2021
    Messages : 2
    Points : 1
    Points
    1
    Par défaut
    Bonjour,

    Personne n'a d'idée concernant mon problème ?

    Merci d'avance pour vos réponses.

  3. #3
    Rédacteur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2013
    Messages
    977
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Août 2013
    Messages : 977
    Points : 4 102
    Points
    4 102
    Par défaut
    Bonjour.

    Une solution de contournement : mettre un événement "Sur calcul" (qui est déclenché dès qu'Excel fait des calculs) et vérifier si la cellule concernée est modifiée. On sait qu'elle est modifiée car on a préalablement mémorisé sa valeur dans une variable (par exemple "AncValeur"). Si elle l'est alors on mémorise sa nouvelle valeur.
    Evénement mis soit sur la feuille si toutes les données sources qui constituent la formule (et seront modifiées) sont sur la feuille, soit sur le classeur si elles sont dans des feuilles différentes.

    Exemple : La cellule A1 de la feuille 1 est une formule qui fait référence à des cellules de la feuille 2.
    Dans l'objet ThisWorkbook un événement affiche une boîte de message quand une cellule de la formule est modifiée et vient donc modifier la valeur de A1 de la feuille 1:

    Code VBA : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Private Sub Workbook_SheetCalculate(ByVal Sh As Object)
     
    If AncValeur <> Sheets("Feuil1").Range("A1").Value Then
        AncValeur = Sheets("Feuil1").Range("A1").Value
        MsgBox AncValeur
    End If
     
    End Sub

    En espérant avoir répondu au besoin.
    Cordialement.

Discussions similaires

  1. Réponses: 8
    Dernier message: 24/06/2015, 17h16
  2. [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
  3. [XL-2007] Macro événementielle sur changement de valeur dans cellule
    Par lagratteCchouette dans le forum Macros et VBA Excel
    Réponses: 12
    Dernier message: 12/06/2009, 15h53
  4. [VBA-E]Lancer une macro sur changement de valeur cellule ?
    Par jeremiegrenoble dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 07/03/2006, 14h22
  5. [VBA-E]Executer fonction VBA sur Excel sans activer la macro
    Par marie10 dans le forum Macros et VBA Excel
    Réponses: 11
    Dernier message: 19/01/2006, 14h34

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