Tester si une plage de cellules Excel a été recalculée en VBA ?

Le
Chris
Je désire tester si un recalcul a été faitpar Excel dans une plage spécifique.
J'espérais utiliser l'instruction suivante:
if range("A1:B10").iscalculated = True then

Cela ne semblepas fonctionner.
Merci d'avance de votre aide
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
MichDenis
Le #5081921
Une feuille se calcule intégralement lorsque demandée ou
alors seulement les cellules touchées par les manipulations de l'usager.

Pour qu'une plage spécifique soit recalculée indépendamment, tu dois
passer la ligne de code suivante :

Range("a1:A10").Calculate

Au-delà de ça, je n'ai pas compris ton problème !




"Chris"
Je désire tester si un recalcul a été faitpar Excel dans une plage spécifique.
J'espérais utiliser l'instruction suivante:
if range("A1:B10").iscalculated = True then ...

Cela ne semblepas fonctionner.
Merci d'avance de votre aide
Chris
Le #5079741
Bien merci pour ta réponse Michel.

A vrai dire mon problème est le suivant :

je désiremettre en oeuvre uneprocédure évenementielle qui se met en route
dès que l'on modifie une "feuille" (soit en y ajoutant ou en modifiantun
élément soitpar recalcule automatique suite à des modifications qui ont lieu
sur d'autre feuilles du même classeur.

Cela marche très bien mais bien entendu cela ne s'arrête jamais puisque
suite à cette détection, je modifie de nouveau la feuille ce qui entraîne un
nouveau calcul etc .. La boucle infernale.
Il faut donc un test qui puisse l'arrêter et c'est pourquoi j'avais besoin
de tester une plage spécifique de la feuille qui, je sais, ne bougera plus
après le premier calcul ce qui permet d'arrêter la boucle. Il ne s'agit donc
de lancer un calcul mais bien de tester si excel a effectué un calcul.

Si tu as un idée : elle est la bienvenue !!!

Christian


Une feuille se calcule intégralement lorsque demandée ou
alors seulement les cellules touchées par les manipulations de l'usager.

Pour qu'une plage spécifique soit recalculée indépendamment, tu dois
passer la ligne de code suivante :

Range("a1:A10").Calculate

Au-delà de ça, je n'ai pas compris ton problème !




"Chris"
Je désire tester si un recalcul a été faitpar Excel dans une plage spécifique.
J'espérais utiliser l'instruction suivante:
if range("A1:B10").iscalculated = True then ...

Cela ne semblepas fonctionner.
Merci d'avance de votre aide





MichDenis
Le #5079721
Une suggestion :

Tu passes en mode de calcul manuel : outils / options / onglet calcul

et dans le code de ladite feuille, copie ceci :

Il y aura un recalcul seulement les données de la plage A1:A10
seulement si l'usager a fait passer une des cellules de la plage
visée en mode "Édition" ou à modifier la valeur d'une cellule
de ladite même plage.

Évidemment, à toi de déterminer la plage de cellules qui t'intéressent

'-----------------------------
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("A1:A10")) Is Nothing Then
Range("A1:A10").Calculate
End If
End Sub
'-----------------------------



"Chris"
Bien merci pour ta réponse Michel.

A vrai dire mon problème est le suivant :

je désiremettre en oeuvre uneprocédure évenementielle qui se met en route
dès que l'on modifie une "feuille" (soit en y ajoutant ou en modifiantun
élément soitpar recalcule automatique suite à des modifications qui ont lieu
sur d'autre feuilles du même classeur.

Cela marche très bien mais bien entendu cela ne s'arrête jamais puisque
suite à cette détection, je modifie de nouveau la feuille ce qui entraîne un
nouveau calcul etc .. La boucle infernale.
Il faut donc un test qui puisse l'arrêter et c'est pourquoi j'avais besoin
de tester une plage spécifique de la feuille qui, je sais, ne bougera plus
après le premier calcul ce qui permet d'arrêter la boucle. Il ne s'agit donc
de lancer un calcul mais bien de tester si excel a effectué un calcul.

Si tu as un idée : elle est la bienvenue !!!

Christian


Une feuille se calcule intégralement lorsque demandée ou
alors seulement les cellules touchées par les manipulations de l'usager.

Pour qu'une plage spécifique soit recalculée indépendamment, tu dois
passer la ligne de code suivante :

Range("a1:A10").Calculate

Au-delà de ça, je n'ai pas compris ton problème !




"Chris"
Je désire tester si un recalcul a été faitpar Excel dans une plage spécifique.
J'espérais utiliser l'instruction suivante:
if range("A1:B10").iscalculated = True then ...

Cela ne semblepas fonctionner.
Merci d'avance de votre aide





Chris
Le #5391051
Bonjour Michel,
Bien reçu ta suggestion mais celle la je la connaissais. En fait je ne peux
utiliser "worksheet_change" car cela ne teste que des modifications
manuelles. Dans mon sujet, je dois utiliser "worksheet_calculate" car les
modifs proviennent d'un recalcul d'excel. Et dans ce cas il me semble que
l'on ne peut pas utiliser (Byval Target As Range). C'est pourquoi je
cherchais une autre fonction permettant de tester les modifs sur une plage
précise.
Si tu as encore une suggestion ...
Merci d'avance

"MichDenis" wrote:

Une suggestion :

Tu passes en mode de calcul manuel : outils / options / onglet calcul

et dans le code de ladite feuille, copie ceci :

Il y aura un recalcul seulement les données de la plage A1:A10
seulement si l'usager a fait passer une des cellules de la plage
visée en mode "Édition" ou à modifier la valeur d'une cellule
de ladite même plage.

Évidemment, à toi de déterminer la plage de cellules qui t'intéressent

'-----------------------------
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("A1:A10")) Is Nothing Then
Range("A1:A10").Calculate
End If
End Sub
'-----------------------------



"Chris"
Bien merci pour ta réponse Michel.

A vrai dire mon problème est le suivant :

je désiremettre en oeuvre uneprocédure évenementielle qui se met en route
dès que l'on modifie une "feuille" (soit en y ajoutant ou en modifiantun
élément soitpar recalcule automatique suite à des modifications qui ont lieu
sur d'autre feuilles du même classeur.

Cela marche très bien mais bien entendu cela ne s'arrête jamais puisque
suite à cette détection, je modifie de nouveau la feuille ce qui entraîne un
nouveau calcul etc .. La boucle infernale.
Il faut donc un test qui puisse l'arrêter et c'est pourquoi j'avais besoin
de tester une plage spécifique de la feuille qui, je sais, ne bougera plus
après le premier calcul ce qui permet d'arrêter la boucle. Il ne s'agit donc
de lancer un calcul mais bien de tester si excel a effectué un calcul.

Si tu as un idée : elle est la bienvenue !!!

Christian


Une feuille se calcule intégralement lorsque demandée ou
alors seulement les cellules touchées par les manipulations de l'usager.

Pour qu'une plage spécifique soit recalculée indépendamment, tu dois
passer la ligne de code suivante :

Range("a1:A10").Calculate

Au-delà de ça, je n'ai pas compris ton problème !




"Chris"
Je désire tester si un recalcul a été faitpar Excel dans une plage spécifique.
J'espérais utiliser l'instruction suivante:
if range("A1:B10").iscalculated = True then ...

Cela ne semblepas fonctionner.
Merci d'avance de votre aide










Publicité
Poster une réponse
Anonyme