Interférence entre Worksheet_Calculate() & Worksheet_Change(ByVal target As Range)

Magic_Doctor

XLDnaute Barbatruc
Bonsoir,

Dans le module d'une feuille du classeur il y a un Worksheet_Calculate() et Worksheet_Change(ByVal target As Range).
Tant que le Worksheet_Calculate() n'y était pas, tout marchait correctement. Comment faire pour que Worksheet_Calculate() et Worksheet_Change(ByVal target As Range) n'interfèrent point ?
 

Herdet

Nous a quitté
Repose en paix
Re : Interférence entre Worksheet_Calculate() & Worksheet_Change(ByVal target As Rang

Aie, aie, aie... à mon avis, supprimer Calculate car Change entraine Calculate qui lui peut modifier une autre valeur de la feuille qui recalcule,etc... ==> plantage.
Worksheet_Calculate n'est pas maitrisable car on à jamais pu savoir réellement dans quel ordre Excel recalcule les cellules.

S'il y a une explication logique, je suis preneur.
A+
Robert
 

Magic_Doctor

XLDnaute Barbatruc
Re : Interférence entre Worksheet_Calculate() & Worksheet_Change(ByVal target As Rang

Bonsoir Herdet,

Et bien, si tu as raison, mauvaise limonade. C'est un peu ce que je redoutais en ce qui concerne les limites du VBA pour M. Toutlemonde.
J'ai, sur une feuille une routine dans un "Worksheet_Change(ByVal target As Range)" qui marche très bien.
J'ai, sur une autre feuille une routine dans un "Worksheet_Calculate()" qui marche très bien.
Dans la même feuille je mets les 2 routines et c'est le bordel !
Quelle perte de temps...
¡Mejor hacerse muchas pajas!
 
Dernière édition:

Pierrot93

XLDnaute Barbatruc
Re : Interférence entre Worksheet_Calculate() & Worksheet_Change(ByVal target As Rang

Bonjour à tous,

peut être suspendre les procédures événementielles lors de l'exécution de l'une d'elle...
Code:
Application.EnableEvents = False
'ton code
Application.EnableEvents = True
bonne journée
@+
 

Magic_Doctor

XLDnaute Barbatruc
Re : Interférence entre Worksheet_Calculate() & Worksheet_Change(ByVal target As Rang

Bonjour Pierrot, Habitude,

Habitude, je n'a pas très bien compris ta question.

Pierrot, "Worksheet_Calculate()" commence bien par "Application.EnableEvents = False" et finit par "Application.EnableEvents = True"
Ce qui, théoriquement, devrait court-circuiter "Worksheet_Change(ByVal target As Range)".
 

néné06

XLDnaute Accro
Re : Interférence entre Worksheet_Calculate() & Worksheet_Change(ByVal target As Rang

Bonjour à tous,

A mon avis, il serait tellement plus simple d'avoir un bout du code avec les deux routines en question, pour se lancer, découvrir les erreurs et y remédier !
D'après ce que j'ai constaté, VBA traite en premier la routine "Change" et après "Calculate"

Bien cordialement

René
 
Dernière édition:

job75

XLDnaute Barbatruc
Re : Interférence entre Worksheet_Calculate() & Worksheet_Change(ByVal target As Rang

Bonjour à tous,

Dans la Worsheet_Change mettre en début de macro :

Code:
Application.Calculation = xlCalculationManual
et ne pas oublier à la fin :

Code:
Application.Calculation = xlCalculationAutomatic
A+
 

Magic_Doctor

XLDnaute Barbatruc
Re : Interférence entre Worksheet_Calculate() & Worksheet_Change(ByVal target As Rang

Bonsoir à tous,

Merci pour vos interventions.

Mic 13710 : j'ai essayé et c'est toujours le bordel !

néné06 : je finirai par envoyer un bout de code, mais, auparavant, il faudra que j'allège mon application car sinon ça risque de vous prendre la tête. Au fait néné, savais-tu qu'ici, en Uruguay, ils font de la socca qu'ils appellent fainá. C'est de la socca en moins bon, épaisse, un peu mouligasse et coupée en carrés (oh horreur !), et ils sont persuadés qu'ils l'ont inventée... Enfin, le poivre, ici, n'est pratiquement utilisé que pour le fainá. Nunca pimienta en el asado, porque el asado se hace con sal y punto!

job : j'ai essayé et c'est toujours le bordel !

Bon, j'ai une petite idée derrière la tête. Je la fais mijoter et je la poste.
 

Habitude

XLDnaute Accro
Re : Interférence entre Worksheet_Calculate() & Worksheet_Change(ByVal target As Rang

Bonjour Pierrot, Habitude,

Habitude, je n'a pas très bien compris ta question.

Pierrot, "Worksheet_Calculate()" commence bien par "Application.EnableEvents = False" et finit par "Application.EnableEvents = True"
Ce qui, théoriquement, devrait court-circuiter "Worksheet_Change(ByVal target As Range)".

De facon plus explicite...

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
If ActiveSheet.Name <> Me.Name Then Exit Sub
ton code...
End Sub
 

Discussions similaires

Statistiques des forums

Discussions
312 833
Messages
2 092 608
Membres
105 466
dernier inscrit
Jsquare