Activer une macro lors du changement "passif" de valeur d'une cellule

Bonjour!

Je sollicite le forum comme d'habitude .

La question est dans le titre et je n'arrive pas à trouver de réponse: peut-on activer une macro lors d'un changement de valeur d'une cellule mais qui est dû à une formule. De plus les valeurs qui changent en amont sont modifiées par une macro...

Il y a un poste qui semble aborder cette question (https://forum.excel-pratique.com/viewtopic.php?t=122767) mais je ne comprends pas bien la réponse et il semble que dans la réponse @Ausecour part du principe qu'il y a des cellules dont dépend lla cellle en question qui elles sont modifiées manuellement...

Merci pour votre éclaircissement !!

Salut maroon,

Je connaissais pas mais en cherchant dans le poste que tu as mis dans ton mail voilà la procédure évènementielle que tu cherches

Private Sub Worksheet_Change(ByVal Target As Range)

    Dim Antecedents As Range

    Set Antecedents = Range("A1").Precedents

    If Not Intersect(Antecedents, Target) Is Nothing Then
        MsgBox "Ca a changé"
    End If

End Sub

Explication:

Donc c'est une procédure évènementielle que tu dois insérer dans le code de la feuille où ça doit se produire

Target correspond à la cellule que tu as modifié (as range) qui est définie automatiquement à chaque modification de cellule

Antecedents donne le range de tes cellules qui ont une influence sur la la cellule où il y a ta formule (dans cet exemple c'est la cellule A1, as range) ==> Va voir dans ton onglet Formule>Repérer les antécédents si ce n'est pas clair pour toi (Precedents en anglais)

Et donc si le croisement ne donne pas rien (if not is nothing) => donc c'est bien une intersection

Alors ==> Là tu mets la macro que tu veux exécuter à la place du msgbox

Dis moi si ce n'est pas clair

Bonjour PinkRabbit!

Ok ça fonctionne très bien!

Merci pour ta réponse je comprends mieux maintenant le fonctionnement de la procédure. Par contre je ne suis pas sûr de comprendre pas ce que veux dire

Et donc si le croisement ne donne pas rien (if not is nothing) => donc c'est bien une intersection

? Est-ce que ça signifie bien que la procédure mémorise le résultat dans "target" et vérifie s'il correspond toujours après chaque modification des cellules "Antecedents" (en se basant sur la formule) ?

Maroon,

Pas tout à fait. On ne vient pas vérifier une modification de valeur, on vient juste voir que la cellule qui a été modifiée est bien une cellule utilisée dans la formule.

Vulgairement:

La variable Antecedents stocke l'adresse des cellules utilisées par la formule en "A1"

Target stocke l'adresse de la cellule qui vient d'être modifiée sur Excel

Intersect croise 2 plages de cellules et regarde s'ils ont une intersection

    If Not Intersect(Antecedents, Target) Is Nothing Then
        MsgBox "Ca a changé"
    End If

La structure en double négatif (not is nothing) semble un peu étrange mais permet de contourner la gestion de l'erreur qui se produit s'il n'y a pas d'intersection.

Et donc si Intersect ne renvoie pas rien (donc renvoie qqch) alors c'est que les plages Antecedents et Target se croisent quelque part.

Cela signifie donc que Target (la cellule modifiée) est bien une cellule utilisée par Antecedents (les cellules utilisées par la formule)

Dis moi si ce n'est pas toujours pas clair

Rebonjour PinkRabbit!

C'est bon je crois que ce n'est plus toujours pas clair

Merci pour les explications!!

Maroon,

C'est bon je crois que ce n'est plus toujours pas clair

La structure en double négatif est bien rentrée

Ravi d'avoir pu t'aider

Rechercher des sujets similaires à "activer macro lors changement passif valeur"