OVH Cloud OVH Cloud

[Q] [VBA] Obliger XL a recalculer l'inté gralité des cellules??

4 réponses
Avatar
JCF
Bonjour à tous!
Je voulais savoir s'il existe une instruction VBA, ou sinon une manipulation
particulière à faire pour qu'XL recalcule l'intégralité des formules d'un
classeur. Pour l'instant il se contente de recalculer les cellules contenant
des formules dont l'une des entrées à changé.
Et cela ne me suffit pas. J'ai en effet des formules personnalisées, dont
l'une des variables peut être modifiée en changeant une valeur dans une
cellule nommée pour le classeur, et il ne détecte pas ce changement là (la
cellule nommée en question n'apparaît pas dans la saisie de la formule, elle
est dans le code, sous forme d'une condition: si 'Switch' = Moy, tout mettre
à la moyenne, par exemple).
Merci d'avance pour vos avis et suggestions!
Jean-Christophe.

4 réponses

Avatar
Philippe.R
Bonjour Jean-Christophe,
Il faut d'abord que tu reviennes sur tes fonctions personnalisées pour y ajouter l'instruction :
application.volatile
tu peux ensuite lancer le recalcul complet par : Application.CalculateFull
--
Amicales Salutations
Retirer A_S_ pour répondre.
XL 97 / 2000 / 2002

"JCF" a écrit dans le message de
news:BD1FFD62.1B1A%
Bonjour à tous!
Je voulais savoir s'il existe une instruction VBA, ou sinon une manipulation
particulière à faire pour qu'XL recalcule l'intégralité des formules d'un
classeur. Pour l'instant il se contente de recalculer les cellules contenant
des formules dont l'une des entrées à changé.
Et cela ne me suffit pas. J'ai en effet des formules personnalisées, dont
l'une des variables peut être modifiée en changeant une valeur dans une
cellule nommée pour le classeur, et il ne détecte pas ce changement là (la
cellule nommée en question n'apparaît pas dans la saisie de la formule, elle
est dans le code, sous forme d'une condition: si 'Switch' = Moy, tout mettre
à la moyenne, par exemple).
Merci d'avance pour vos avis et suggestions!
Jean-Christophe.



Avatar
JCF
"Philippe.R" m'a répondu:

Bonjour Jean-Christophe,
Il faut d'abord que tu reviennes sur tes fonctions personnalisées pour y
ajouter l'instruction :
application.volatile
tu peux ensuite lancer le recalcul complet par : Application.CalculateFull


Merci Philippe pour cette réponse!
Juste une précision:
-Est ce qu'à partir du moment où j'ajoute application.volatile dans mes
fonctions personnalisées, XL ne recalcule pas tout à chaque fois que je
change une cellule (vu les temps de calcul j'ai l'impression que oui)?
-Autre façon de tourner la question: est-ce que Application.CalculateFull
revient au même que lorsque l'on presse F9 en calcul manuel?

=> si oui à cette (double)question, penses-tu qu'il y a un moyen d'appliquer
le recalcul de l'intégralité des formules seulement de façon conditionnelle.
En fait, étant donné la complexité de mon classeur et des mes formules, le
calcul par défaut fait par excel (donc que sur les variables modifiées), va
la plupart du temps et permet la rapidité (en plus je me mets en calcul
manuel pour qu'il ne recalcule que lorsque je souhaite voir le résultat de
ce que j'ai changé). Par contre, par moment on s'aperçoit clairement qu'il a
raté un truc, et là apparaît l'intérêt de pouvoir lui commander de
recalculer absolument tout. Tu crois que c'est faisable?
Merci et à +
Jean-Christophe

Avatar
Philippe.R
Bonjour Jean-Christophe,
Sauf à dire une c...ie, l'instruction application.volatile, présente dans une fonction perso, permet sa
mise à jour lors des recalculs (automatiques ou à la demande) ; sinon il fudrait revalider la fonction
pour la recalculer.
Il me semble en outre que Application.Calculate recalcule la feuille active alors que
Application.CalculateFull recalcule tout le classeur et correspond bien à l'effet obtenu par F9
lorsqu'on est en calcul manuel.
Donc tu peux tout à fait lancer ce calcul en utilisant un évènement précis d'une feuille donnée comme
par exemple :

Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("a1:d31")) Is Nothing Then
Application.CalculateFull
Else: Exit Sub
End If
End Sub

--
Amicales Salutations
Retirer A_S_ pour répondre.
XL 97 / 2000 / 2002
Pour suivre facilement le forum :
news://msnews.microsoft.com/microsoft.public.fr.excel
(Voulez-vous vous abonner ? -> Oui)

"JCF" a écrit dans le message de
news:BD216FDA.1D75%


"Philippe.R" m'a répondu:

Bonjour Jean-Christophe,
Il faut d'abord que tu reviennes sur tes fonctions personnalisées pour y
ajouter l'instruction :
application.volatile
tu peux ensuite lancer le recalcul complet par : Application.CalculateFull


Merci Philippe pour cette réponse!
Juste une précision:
-Est ce qu'à partir du moment où j'ajoute application.volatile dans mes
fonctions personnalisées, XL ne recalcule pas tout à chaque fois que je
change une cellule (vu les temps de calcul j'ai l'impression que oui)?
-Autre façon de tourner la question: est-ce que Application.CalculateFull
revient au même que lorsque l'on presse F9 en calcul manuel?

=> si oui à cette (double)question, penses-tu qu'il y a un moyen d'appliquer
le recalcul de l'intégralité des formules seulement de façon conditionnelle.
En fait, étant donné la complexité de mon classeur et des mes formules, le
calcul par défaut fait par excel (donc que sur les variables modifiées), va
la plupart du temps et permet la rapidité (en plus je me mets en calcul
manuel pour qu'il ne recalcule que lorsque je souhaite voir le résultat de
ce que j'ai changé). Par contre, par moment on s'aperçoit clairement qu'il a
raté un truc, et là apparaît l'intérêt de pouvoir lui commander de
recalculer absolument tout. Tu crois que c'est faisable?
Merci et à +
Jean-Christophe




Avatar
JCF
"Philippe.R" m'a répondu:

Il me semble en outre que Application.Calculate recalcule la feuille active
alors que
Application.CalculateFull recalcule tout le classeur et correspond bien à
l'effet obtenu par F9
lorsqu'on est en calcul manuel.


Merci Philippe pour ces précisions.
Je vais tripatouiller tout ça voir ce que ça donne!
A+
JC