Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Mise à jour de calculs

6 réponses
Avatar
[Lord]
Bonjour,
j'ai un petit pb technique
J'ai crée une fonction "Fij(Range,Range) as variant" dans un module qui
prend donc deux plages comme argument et renvoie un float en réalité,
même si j'ai mis un variant pour ne pas me poser trop de question.
J'appelle cette fonction dans des cellules de mes feuilles excel et pas
de pb, elle renvoie bien le résultat demandé (en gros elle marche).

Le pb, c'est que de temps en temps (cela signifie que je n'ai pas encore
compris quand), Excel ne met pas à jour les résultats et m'affiche un bo
0. Lorsque je recalcule manuellement la cellule (cad je clique dessus
pour l'éditer, je ne change rien et j'appuie sur Enter), c'est bon.
C'est assez génant lorsque j'appelle les résultats de ces cellules dans
d'autres macros et que je m'apercois après coup que ceux-ci n'ont pas
été calculés...

J'ai essayé de résoudre le pb en mettant un "Range().Calculate" dans
l'évênement "on_activate" (avec les plages qui correspondent aux
cellules ou la fonction est appelée) de la feuille mais ca ne marche pas.

Si Qq aurait-il une piste ou déjà rencontré et résolu ce pb, ca me
rendrait un grand service ;) Par avance, merci.

PS: Les options "Application.Calculation = xlAutomatic" et
"Application.ScreenUpdating = True" sont mises...

6 réponses

Avatar
Ellimac
Bonjour,

Commence ta fonction avec Application.Volatile

Camille

-----Message d'origine-----
Bonjour,
j'ai un petit pb technique
J'ai crée une fonction "Fij(Range,Range) as variant" dans
un module qui

prend donc deux plages comme argument et renvoie un float
en réalité,

même si j'ai mis un variant pour ne pas me poser trop de
question.

J'appelle cette fonction dans des cellules de mes
feuilles excel et pas

de pb, elle renvoie bien le résultat demandé (en gros
elle marche).


Le pb, c'est que de temps en temps (cela signifie que je
n'ai pas encore

compris quand), Excel ne met pas à jour les résultats et
m'affiche un bo

0. Lorsque je recalcule manuellement la cellule (cad je
clique dessus

pour l'éditer, je ne change rien et j'appuie sur Enter),
c'est bon.

C'est assez génant lorsque j'appelle les résultats de ces
cellules dans

d'autres macros et que je m'apercois après coup que ceux-
ci n'ont pas

été calculés...

J'ai essayé de résoudre le pb en mettant un "Range
().Calculate" dans

l'évênement "on_activate" (avec les plages qui
correspondent aux

cellules ou la fonction est appelée) de la feuille mais
ca ne marche pas.


Si Qq aurait-il une piste ou déjà rencontré et résolu ce
pb, ca me

rendrait un grand service ;) Par avance, merci.

PS: Les options "Application.Calculation = xlAutomatic"
et

"Application.ScreenUpdating = True" sont mises...
.



Avatar
AV
A dafaut de nous dire ce que ta fonction est censée faire...ça va être dur !
Si elle doit "faire la somme des cellules jaunes".....
;-)
AV
Avatar
[Lord]
Ce que fait ma fonction n'a pas vraiment d'importance. Elle fonctionne
sans problème particulier et renvoie un résulat juste. Le pb venait de
la mise à jour des resultats qui n'était pas réalisée lorsque certaines
cellules étaient modifiées dont les valeurs étaient utilisées par ma
fonction. La réponse de Camille fonctionne très bien (encore merci à
cette personne).

La méthode Volatile (aide du vba, je cite) "marque comme volatile une
fonction personnalisée. Une fonction volatile doit être recalculée
chaque fois qu'un calcul est effectué dans une cellule quelconque de la
feuille de calcul. Une fonction non volatile n'est recalculée qu'en cas
de changement des variables d'entrée. Cette méthode est sans effet si
elle ne se trouve pas à l'intérieur d'une fonction définie par
l'utilisateur utilisée pour calculer une cellule de feuille de calcul."

A dafaut de nous dire ce que ta fonction est censée faire...ça va être dur !
Si elle doit "faire la somme des cellules jaunes".....
;-)
AV




Avatar
AV
Ce que fait ma fonction n'a pas vraiment d'importance.


Sans blague ?
C'est justement capital dans certains cas....
J'en conclu que tu n'es pas un lecteur assidu de ce lieu
Un passant qui passe...et qu'on va laisser passer !

AV

Avatar
Daniel.M
Salut,

Ce que fait ma fonction n'a pas vraiment d'importance. Elle fonctionne
sans problème particulier et renvoie un résulat juste.
Le pb venait de
la mise à jour des resultats qui n'était pas réalisée lorsque certaines
cellules étaient modifiées dont les valeurs étaient utilisées par ma
fonction.


La preuve que ce que fait ta fonction EST important. Ta description illustre un
problème récurrent dans l'écriture de fonction VBA : accéder DIRECTEMENT au
contenu de cellules à l'intérieur de celle-ci enlève le couplage entre le moteur
de recalcul et ces cellules. La solution consiste à passer ces cellules en
argument à ta fonction.

La réponse de Camille fonctionne très bien (encore merci à cette personne).


Tant mieux. Mais c'est une alternative qui se paye (en temps de recalcul) dès
lors qu'on exploite des classeurs moyennement complexes.

Salutations,

Daniel M.

Avatar
[Lord]
Je ne suis effectivement pas un lecteur assidu. Il m'arrive de répondre
à qq pb quand je le peux. C'est tout. Je n'ai pas de prétention plus
élevée. Je poste très peu de mes pb car je préfère chercher les
solutions sur les milliers de pages web dédiées.

Quant au passant qui passe, et bien oui je passe et c'est tout, sans
faire de réflexion sur les gens. La réponse de Camille me suffisait mais
j'ai quand même pris la peine de vous répondre, par politesse. De même,
je remercie M. Daniel pour sa réponse.

PS: votre adresse e-mail n'est pas valide.
Ce que fait ma fonction n'a pas vraiment d'importance.



Sans blague ?
C'est justement capital dans certains cas....
J'en conclu que tu n'es pas un lecteur assidu de ce lieu
Un passant qui passe...et qu'on va laisser passer !

AV