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 :

Activer macro lors changement résultat cellule avec fonction si


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Femme Profil pro
    Employé
    Inscrit en
    Juin 2020
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Employé

    Informations forums :
    Inscription : Juin 2020
    Messages : 3
    Par défaut Activer macro lors changement résultat cellule avec fonction si
    Bonjour,

    Après de nombreuses recherches, je n'arrive pas à résoudre mon problème :
    - je saisie des chiffres dans les colonnes A et B
    - la colonne C affiche une cotation selon un calcul avec A et B

    --> je souhaite afficher un message lorsque le résultat en C est modifier (la modification de A et/ou B peut ne pas avoir d'influence sur le résultat)

    J'ai essayé le code suivant, mais celui-ci ne prend pas en compte les modifications issues de formules :
    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)
     
        Dim KeyCells As Range
        Set KeyCells = Range("C1:C10")
    If Not Application.Intersect(KeyCells, Range(Target.Address)) Is Nothing Then
    MsgBox "modif"
     
    End If
    End Sub
    Pouvez-vous m'aider ?

    Je vous joints un exemple simplifier : Classeur1.xlsm

    Merci par avance !

  2. #2
    Membre Expert
    Avatar de pijaku
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    1 817
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Août 2010
    Messages : 1 817
    Billets dans le blog
    10
    Par défaut
    Bonjour,

    Comme c'est A ou B qui est modifié, changez :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set KeyCells = Range("C1:C10")
    Par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set KeyCells = Range("A1:B10")
    Edit :
    Target étant un objet Range, l'écriture suivante est curieuse :
    à remplacer par :

  3. #3
    Candidat au Club
    Femme Profil pro
    Employé
    Inscrit en
    Juin 2020
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Employé

    Informations forums :
    Inscription : Juin 2020
    Messages : 3
    Par défaut
    Merci pour votre réponse.
    J'ai fait les modifications que vous proposez mais maintenant le message s'affiche même si le résultat en C n'est pas modifié.

  4. #4
    Membre Expert
    Avatar de pijaku
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    1 817
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Août 2010
    Messages : 1 817
    Billets dans le blog
    10
    Par défaut
    Dans ce cas, j'utiliserai deux événements et 1 variable de portée module :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    Option Explicit
     
    Dim Valeur
     
    Private Sub Worksheet_Change(ByVal Target As Range)
    Dim KeyCells As Range
        Set KeyCells = Range("A1:B10")
        If Not Application.Intersect(KeyCells, Range(Target.Address)) Is Nothing Then
            If Range("C" & Target.Row).Value <> Valeur Then
                MsgBox "modif"
            Else
                Valeur = Range("C" & Target.Row).Value
            End If
        End If
    End Sub
     
    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
        If Not Application.Intersect(Range("A1:B10"), Range(Target.Address)) Is Nothing Then
            Valeur = Range("C" & Target.Row).Value
        End If
    End Sub

  5. #5
    Candidat au Club
    Femme Profil pro
    Employé
    Inscrit en
    Juin 2020
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Employé

    Informations forums :
    Inscription : Juin 2020
    Messages : 3
    Par défaut
    Merci beaucoup à tous les deux.
    Je viens d'appliquer le code de Franck à mon fichier et cela semble fonctionner !

  6. #6
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

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

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    Excel n'a pas de mémoire.

    Faire ce que tu décris est théoriquement possible mais ce serait très lourd.

    Il faudrait qu'à chaque modification des cellules de A ou B, le résultat de toutes les cellules en C soit enregistré dans des un vecteur de variables Public et qu'à chaque modification de A ou B, les résultats actuels dans C soient comparés aux valeurs de ce vecteur Public qui serait remise à jour.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Option Base 1
    Public CC(10) As String
    Private Sub Worksheet_Activate()
       Dim Rg As Range
       For Each Rg In Cells("C1:C10")
          CC(Rg.Row) = Rg.Text
       Next Rg
    End Sub
    Private Sub Worksheet_Change(ByVal Target As Range)
       If Application.Intersect(KeyCells, Range("A1:B10")) Is Nothing Then Exit Sub
       If  CC(Target.Row) <> Cells(Target.Row, "C").Text Then MsgBox "modif"
       CC(Target.Row) = Cells(Target.Row, "C").Text
    End Sub

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

Discussions similaires

  1. Pb pour copier cellules avec fonctions
    Par chisutufu dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 21/09/2009, 11h40
  2. Réponses: 5
    Dernier message: 02/12/2008, 16h42
  3. exécution macro sur changement valeur cellule, juste un truc qui cloche.
    Par laatysha dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 21/05/2008, 09h00
  4. [VBA]lancer une macro à chaque changement de cellule dans une feuille
    Par freddddd dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 04/05/2007, 13h58
  5. activation macro lors d'une ouverture fichier Excel
    Par mirumoto dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 12/05/2005, 15h08

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