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 :

Rapporter les cellules dont la valeur change via leur formule - Évèment Calculate


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Finance d'entreprise
    Inscrit en
    Juin 2016
    Messages
    184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Finance d'entreprise
    Secteur : Bâtiment

    Informations forums :
    Inscription : Juin 2016
    Messages : 184
    Par défaut Rapporter les cellules dont la valeur change via leur formule - Évèment Calculate
    Bonjour,

    Je souhaite être averti par un message lorsque la valeur d'une cellule (ou plusieurs) est modifiée, en précisant que cette cellule se trouve sur une autre feuille à l'autre bout du classeur.

    Une mise en forme conditionnelle (MFC) ne me servirait à rien, car étant sur une autre feuille, le but est justement de ne pas avoir à vérifier à chaque étape de mon travail si une valeur de la cellule a changé.

    L'événement Change ne réagit pas, car: "Cet événement ne se produit pas lorsque les cellules sont modifiées pendant un recalcul" (Documentation Microsoft). C'est-à-dire qu'il faut que ça soit l'utilisateur (ou un lien externe) qui modifie directement la cellule pour que l'événement se déclenche. Or dans mon cas, les cellules sont modifiées via leur formule qui renvoie à des cellules dans d'autres feuilles.

    Je me suis donc tourné vers l'événement Calculate, qui réagit si une cellule change de valeur après recalcule de sa formule.

    Cependant, ce dernier se contente de signaler quelle feuille est affectée, mais pas quelle cellule...

    C'est ce qu'il me manque.

    Comment faire?

    Voici mon code en l'état:
    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
    Private Sub Workbook_SheetCalculate(ByVal Sh As Object)
     
            Dim TblNFl() As Variant
            Dim StrNFl As String
            Dim StrMsg As String
            Dim Byt As Byte
     
            TblNfl = Array("F1", "F2", "F3")
            StrNFl = Sh.Name
            StrMsg = "La feuille " & Chr(39) & StrNFl & Chr(39) & " a été impactée."
     
    For Byt = 0 To UBound(TblNFl)
        If StrNFl = TblNFl(Byt) Then
            MsgBox StrMsg
            Exit For
        End If
    Next Byt
     
    End Sub
    En espérant avoir été suffisamment clair, n'hésitez pas à me demander dans le cas contraire.

    Cordialement,

  2. #2
    Membre confirmé
    Homme Profil pro
    Finance d'entreprise
    Inscrit en
    Juin 2016
    Messages
    184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Finance d'entreprise
    Secteur : Bâtiment

    Informations forums :
    Inscription : Juin 2016
    Messages : 184
    Par défaut
    C'est d'autant plus important pour moi, qu'à ce stade, les messages s'affichent, même sans modification de cellule...

    Il suffit que les feuilles se recalculent suite à un changement à l'autre bout du classeur...

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

    Informations professionnelles :
    Activité : Retraité
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mars 2007
    Messages : 2 478
    Par défaut
    Bonjour,
    Citation Envoyé par Dédé6621 Voir le message
    L'événement Change ne réagit pas, car: "Cet événement ne se produit pas lorsque les cellules sont modifiées pendant un recalcul" (Documentation Microsoft).
    C'est pourtant cet évènement qu'il est préférable d'utiliser, hormis les calculs qui font appel à des fonctions temporelles (comme Maintenent) le résultat d'une formule ne change que lorsqu'on modifie la valeur d'une des cellules "précédentes" de de cette formule. Il suffit donc de surveiller les précédents (tous).

  4. #4
    Membre confirmé
    Homme Profil pro
    Finance d'entreprise
    Inscrit en
    Juin 2016
    Messages
    184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Finance d'entreprise
    Secteur : Bâtiment

    Informations forums :
    Inscription : Juin 2016
    Messages : 184
    Par défaut
    Bonjour,

    Merci pour votre réponse.

    Citation Envoyé par Patrice740 Voir le message
    Il suffit donc de surveiller les précédents (tous).
    Malheureusement, "[l]a [...] propriété Dependents fonctionne uniquement sur la feuille active et ne peut pas suivre les références distantes." (Documentation Microsoft).

    Il en va de même de la propriété Precedents.

    Autrement dit, il n'est pas possible de surveiller les précédents s'ils sont sur une autre feuille...

    Ce code renvoie une erreur d'exécution 1004: "Pas de cellules correspondantes.":
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
     
        Dim OCel As Range
     
        Set OCel = Me.Sheets("F1").Range("C1000")
     
        If Not Intersect(Target, OCel.Precedents) Is Nothing Then
            MsgBox "La cellule " & OCel.Address & "a été impactée."
            Target.Select
        End If
     
    End Sub
    Sachant que C1000 renvoie une cellule d'une autre feuille.

    Cordialement

  5. #5
    Membre confirmé
    Homme Profil pro
    Finance d'entreprise
    Inscrit en
    Juin 2016
    Messages
    184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Finance d'entreprise
    Secteur : Bâtiment

    Informations forums :
    Inscription : Juin 2016
    Messages : 184
    Par défaut
    Une autre idée?

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

    Informations professionnelles :
    Activité : Retraité
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mars 2007
    Messages : 2 478
    Par défaut
    Bonjour,

    Si j'ai bien compris, tu voudrais être averti si le résultat du calcul d'une cellule d'une autre feuille change.
    Par exemple la cellule à surveiller sur la Feuil3 contient cette formule ='Feuil1'!C11+'Feuil2'!C10+NBVAL('Feuil2'!B2:B7)
    Comme je t'ai dit, il suffit de surveiller les précédents de cette formule.
    Pour cela il faut utiliser l'évènement change de la feuille qui contient le précédent

    Dans Feuil 1 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Private Sub Worksheet_Change(ByVal Target As Range)
      If Not Intersect(Target, Range("C11")) Is Nothing Then
        MsgBox "Résultat changé"
      End If
    End Sub
    Et dans Feuil2
    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("C10")) Is Nothing And _
              Intersect(Target, Range("B2:B8")) Is Nothing) Then
        MsgBox "Résultat changé"
      End If
    End Sub

  7. #7
    Membre confirmé
    Homme Profil pro
    Finance d'entreprise
    Inscrit en
    Juin 2016
    Messages
    184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Finance d'entreprise
    Secteur : Bâtiment

    Informations forums :
    Inscription : Juin 2016
    Messages : 184
    Par défaut
    Citation Envoyé par Patrice740 Voir le message
    Si j'ai bien compris, tu voudrais être averti si le résultat du calcul d'une cellule d'une autre feuille change.
    Par exemple la cellule à surveiller sur la Feuil3 contient cette formule ='Feuil1'!C11+'Feuil2'!C10+NBVAL('Feuil2'!B2:B7)
    Juste.

    Sauf que le cheminement des antécédents est bien trop complexe pour pouvoir être intégré à une macro.
    Et c'est justement parque je ne le maîtrise pas, que j'aimerais pouvoir surveiller ces cellules en cours de travail.

    Les antécédents ont eux-mêmes des antécédents, qui ont eux-mêmes des antécédents, qui ont eux-mêmes... si bien que ne sais jamais si je ne suis pas en train de toucher à un des ces anté-anté-hantés-cédents

Discussions similaires

  1. [XL-2013] Ne pas copier les cellules dont la valeur est 0
    Par kakeustel dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 31/12/2019, 15h40
  2. Réponses: 0
    Dernier message: 04/11/2014, 17h22
  3. Réponses: 0
    Dernier message: 10/10/2013, 12h29
  4. Réponses: 4
    Dernier message: 24/01/2013, 14h57
  5. [XL-2010] Copier les cellules d'une colonne dont la valeur à changé dans une autre colonne
    Par caeruleum dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 23/09/2012, 22h01

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