Boostez vos compétences Excel avec notre communauté !
Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force.
Apprenez, échangez, progressez – et tout ça gratuitement !
👉 Inscrivez-vous maintenant !
Voici mon problème :
j'ai créé une fonction personnalisée que j'utilise dans une feuille soumise à une procédure Worksheet_Change.
Lorsque j'exécute ma procédure en pas à pas, je m'apperçois que celle-ci actualise un paramètre de la fonction ce qui conduit la macro à exécuter son code (de la fonction). Et c'est à ce moment que mon problème apparaît : à la fin du code de la fonction, la macro ne retourne pas dans la procédure Worksheet_Change et celle-ci ne s'exécute donc pas entièrement... 😡
Re : Interférence entre une fonction personnalisée et Worksheet_Change
Bonjour,
je suis assez confus, j'ai beau essayer de reproduire, en plus simplifié mon fichier, je n'arrive pas à obtenir la même situation qui génère mon problème... j'ai du, sans m'en rendre compte régler le problème...
Re : Interférence entre une fonction personnalisée et Worksheet_Change
Re,
je pensais que le problème était résolu, mais en fait... pas du tout !!! 😡
Et pour faire mieux, il s'est amplifié !
1er point, bien que j'ai changer le mode de calcul en manuel, dès que je le remets en automatique à la fin du code, la fonction prend le pas...
2ème point, dès que je change la valeur d'une cellule quelqu'elle soit dans la feuille liée au Worksheet_change ou même sur une autre feuille d'une nouveau classeur sans lien avec le 1er et sans maccro, la fonction s'active !!! 😱
Ca fait un bon moment que je suis dessus et je ne comprend rien de ce qui se passe !!! c'est comme si au moindre changement d'une cellule dans l'application entière, la fonction s'activait...
Si vous aviez une quelconque idée... merci infiniment d'avance !!!
ps 1 : je n'arrive pas à reproduire un exemple avec ce bug... mais j'y travail...
ps 2 : pour info, voici le code que ma fonction perso :
Code:
Function FctProdFor(Plage As Range, Iteration As Integer, Optional RangToStart As Integer = 1) As Variant
Dim Result As Variant
Dim VarComptable As Integer
Result = 1
For VarComptable = RangToStart To Iteration
Result = Result * (1 + Plage(VarComptable))
Next
FctProdFor = Result
End Function
Re : Interférence entre une fonction personnalisée et Worksheet_Change
bonjour a tous
mon analyse:
la fonction n'y est surement pour rien
par contre , avec une Worksheet_Change on est très vite parti dans une boucle si a l'interieur de cette macro queque chose produit un changement dans la feuille
dans ce cas , je procede de la façon suivante:
Code:
Public flag As Boolean
Private Sub Worksheet_Change(ByVal Target As Range)
If flag Then Exit Sub
flag = True
'...ci la macro peut effectuer une modification de la page
flag = False
End Sub
Re : Interférence entre une fonction personnalisée et Worksheet_Change
Re
Tentative d'explication:
normalement le flag est False
lors du declenchement de la macro Worksheet_Change, flag devient True
Si la macro produit un changement dans la feuille cette même macro est a nouveau sollicitée (les macros sont recursives)
c'est alors qu'on en sort puisque le flag est True ce qui evite de reediter la modif
en fin de macro on remet flag a false pour autoriser a nouveau l'usage de la macro
pour t'en convaincre vois le fichier ci-joint
change une valeur et observe ce qui se passe pour A1 selon que tu auras gardé ou non les lignes relatives a flag dans la worksheet_change
Re : Interférence entre une fonction personnalisée et Worksheet_Change
Bonjour Forum !
Bonjour PierreJean !
Merci pour l'astuce c'est vrai que ça supprime un grand nombre de bugs très déplaisants !!!
Mais j'ai peur que la procédure worksheet_change ne soit pas en cause : en plaçant des points d'arrêts sur l'ensemble du code, on s'aperçoit que, avant même d'exécuter le code de worksheet_change, la fonction est activée et ce n'est que seulement après son exécution que la procédure worksheet_change s'active... 😡
Je n'y comprend plus rien... 🙁
je vais essayer de vous envoyer ce fichier, sinon je pense que ça va être vraiment dur de trouver une solution...
Pour résoudre mon problème j'ai trouver deux solutions :
-> supprimer la formule de la cellule BK37 mais cette solution n'est pas acceptable...
-> scinder le produit BK37*FctProdFor(...) en :
Code:
XX=FctProdFor(...)
YY=BK37*XX
Est ce que quelqu'un comprend pourquoi il y avait problème ???
Pour vous aider, maintenant que j'ai enfin trouver la source voici un fichier d'exemple !!!
Vous pourrez remarquer qu'en remplissant une cellule quelqu'elle soit, la formule s'active avant la procédure worksheet_change !!!
Re : Interférence entre une fonction personnalisée et Worksheet_Change
Bonjour,
pour effectuer l'évènement avant le calcul de la fonction, tu peux rajouter une valeur booléenne.
Si cette valeur est à false, tu quittes la fonction, l'évènement se déroule donc, tu mets la valeur à true, puis application.calculate, la fonction se déroule, tu mets la valeur à false en fin de fonction.
Un peu tiré par les cheveux, mais ....
- Navigue sans publicité - Accède à Cléa, notre assistante IA experte Excel... et pas que... - Profite de fonctionnalités exclusives Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel. Je deviens Supporter XLD