W.Calculate:lancer une macro si valeurs d'une plage changent

Bonjour à tous ,

Je cherche un code qui me permettra de lancer une macro que si la valeur précédente est différente de la valeur actuelle.

L'événement Worksheet.change permet d'activer la macro une fois que l'une des cellules est activées c-à-d même si la valeur est restée la même (C'est pas ce que je veux).

Il y a un autre évènement qui permet d'activer la macro si la valeur à changer: c'est l'évènement Worksheet.Calculate . On utilise une macro intermédiaire qui est activée par cet évènement lorsque la feuille est recalculée.

Private Sub Worksheet_Calculate() 
 ReihenfarbeSiValeurDifferente
End Sub

On ajoute également un code dans ThisWorkbook qui permet de stocker la valeur précédente à l'ouverture de la feuille

Private Sub Workbook_Open()
  Feuil1.ValPrecReihenfarbe = Feuil1.Range("I6")
  End Sub

Dans la macro intermédiaire on mais une condition qui permet de dire si la valeur précédente est égale à la valeur actuelle de la cellule alors on arrête la macro intermédiaire et si c'est pas le cas, on va a la Macro qu'on veut exécuter

Private Sub ReihenfarbeSiValeurDifferente()
    If VarType(Range("I6")) = VarType(ValPrecReihenfarbe) Then _
        If ValPrecReihenfarbe = Range("I6") Then Exit Sub
        ValPrecReihenfarbe = Range("I6")
   Axes

End Sub

Axes est le nom de la macro que je veux activer si l'une des valeurs de la plage I6:I56 change.

MON PROBLEME: j'arrive à faire cela qu'en considérant une cellule et non ma Plage. Vous avez remarqué que j'ai mis I6 à chaque fois. Ainsi la macro Axes est lancée que si la valeur de la cellule I6 change, si I10 change par exemple, il ne se passe rien. Mais j'aimerais le faire pour toute la plage facilement. J'ai essayé de mettre I6:I56 comme il suffirait de le mettre avec l'événement Worksheet.change mais ça ne marche pas bien évidemment.

Comment dois-procéder dans ce cas? Même une autre manière de faire m'irait.

d'avance pour vos réponses

cordialement

Bonsoir,

la réponse à votre problème et qui le simplifierai grandement est les faite des faire un Undo.

Je m'explique :

avec le WorkSheet.Change vous détectez si le changement à eu lieu sur votre zone de surveillance.

si c'est le cas vous connaissez la cellule exacte où il y a eu le changement : Target

une variable Nouvelle_valeur sera égal à Target

Puis un Undo

puis une variable Ancienne_valeur sera égale à Target

Si Ancienne_valeur <> Nouvelle_valeur alors il y a eu changement de valeur sur une des cellules surveillées donc on remet la dernière valeur de la cellule par Target= Nouvelle_valeur puis on lance la macro définie.

Si Ancienne_valeur = Nouvelle_valeur alors il n'y a pas eu de changement (juste une validation de cellule sans changement de valeur) alors on ne lance pas la macro et il est inutile de remettre la nouvelle valeur.

@ bientôt

LouReeD


Voilà,

un petit fichier...

152undo.xlsm (14.75 Ko)

@ bientôt

LouReeD

LouReeD a écrit :

Bonsoir,

la réponse à votre problème et qui le simplifierai grandement est les faite des faire un Undo.

Je m'explique :

avec le WorkSheet.Change vous détectez si le changement à eu lieu sur votre zone de surveillance.

si c'est le cas vous connaissez la cellule exacte où il y a eu le changement : Target

une variable Nouvelle_valeur sera égal à Target

Puis un Undo

puis une variable Ancienne_valeur sera égale à Target

Si Ancienne_valeur <> Nouvelle_valeur alors il y a eu changement de valeur sur une des cellules surveillées donc on remet la dernière valeur de la cellule par Target= Nouvelle_valeur puis on lance la macro définie.

Si Ancienne_valeur = Nouvelle_valeur alors il n'y a pas eu de changement (juste une validation de cellule sans changement de valeur) alors on ne lance pas la macro et il est inutile de remettre la nouvelle valeur.

@ bientôt

LouReeD


Voilà,

un petit fichier...

@ bientôt

LouReeD

Bonjour LouReeD,

Merci pour votre réponse. Je sais désormais qu'il existe l'instruction "Undo".

J'ai appliqué votre solution et ca marche mais seulement si la cellule est activée. Si la valeur de la cellule est modifée à travers une formule, la macro n'est pas activée. C'est pourquoi je voulais utiliser l'évènement Worksheet.Calculate, de telle sorte que ca marche lorsque les cellules à verifier contiennent des formules.

Y a t-il une autre alternative?

Merci encore pour votre Aide et bon début de semaine.

Cordialement

Bonjour,

Si tu as une formule, quand la valeur change c'est que quelque chose a changé quelque part... Il vaudrait mieux cibler la source du changement, ce serait plus sûr.

Cordialement.

MFerrand a écrit :

Bonjour,

Si tu as une formule, quand la valeur change c'est que quelque chose a changé quelque part... Il vaudrait mieux cibler la source du changement, ce serait plus sûr.

Cordialement.

bonjour,

Ah oui, vous avez raison!

Est ce que ca marcherait aussi Avec des réponses de CaseOptions (Coché ou pas coché --> Vrai ou Faux) ?

Si oui, comment?

Merci à vous

Avec des cases d'options tu reviens en fait à un déclenchement manuel.

Je ne sais ce que tu veux lancer mais il faut que tu choisisse une méthode...

Bonsoir,

C'est tout bon!

Il faut dire que j'avais un peu les idées embrouillées.

Un grand à vous deux.

Bonne soirée!

Bonsoir,

et merci pour votre (vos) merci !

Merci pour votre réponse. Je sais désormais qu'il existe l'instruction "Undo"

En fait c'est ici que je l'ai appris également !!!

@ bientôt

LouReeD

En fait c'est ici que je l'ai appris également !!!

LouReeD

Bonsoir,

Vive les forums! Vive Excel-pratique!

Bonne soirée et à Bientôt!

Elo7

Rechercher des sujets similaires à "calculate lancer macro valeurs plage changent"