Comment obtenir des données de feuille de calcul dans Excel pour se recalculer à partir de VBA, sans la simple modification d'une valeur de cellule?Comment obtenez-vous Excel pour actualiser les données sur la feuille à partir de VBA?
Répondre
Les lignes suivantes feront l'affaire:
ActiveSheet.EnableCalculation = False
ActiveSheet.EnableCalculation = True
Edit: La méthode .Calculate() ne fonctionnera pas pour toutes les fonctions, je l'ai testé sur une feuille avec des fonctions de tableau add-in. La feuille de production que j'utilise est assez complexe. Je ne veux pas essayer la méthode .CalculateFull(), donc ça peut marcher.
Cela devrait faire l'affaire ...
'recalculate all open workbooks
Application.Calculate
'recalculate a specific worksheet
Worksheets(1).Calculate
' recalculate a specific range
Worksheets(1).Columns(1).Calculate
voir le commentaire sur ma réponse –
Vous pouvez également essayer
Application.CalculateFull
ou
Application.CalculateFullRebuild
si vous ne me dérange pas la reconstruction de tous les classeurs ouverts, plutôt que juste la feuille de calcul active. (CalculateFullRebuild
reconstruit également les dépendances.)
Parfois Excel va hocher et a besoin d'un redémarrage pour réappliquer une équation. Cela arrive dans certains cas lorsque vous utilisez des formules personnalisées.
Assurez-vous que vous avez le script suivant
ActiveSheet.EnableCalculation = True
Réappliquez l'équation de choix.
Cells(RowA,ColB).Formula = Cells(RowA,ColB).Formula
Ceci peut ensuite être bouclé selon les besoins.
J'ai eu un problème avec la désactivation d'une image d'arrière-plan (un filigrane DRAFT) dans VBA. Ma modification ne s'affichait pas (ce qui a été effectué avec la méthode Sheets(1).PageSetup.CenterHeader = ""
) - j'avais donc besoin d'un moyen de rafraîchir. L'approche ActiveSheet.EnableCalculation
a partiellement fait l'affaire, mais n'a pas couvert les cellules inutilisées.
En fin de compte, j'ai trouvé ce que je avais besoin avec une doublure qui a fait la Vanish d'image quand elle ne fut plus défini: -
Application.ScreenUpdating = True
En fait, il y a .Calculate() et .CalculateFull() méthodes pour cela, à différents niveaux. – GSerg
J'ai testé Calculate sur une feuille, et toutes les fonctions d'une cellule ne sont pas recalculées. Vous pouvez aussi le faire en changeant le bit 'dirty', mais j'ai trouvé que c'était la solution la plus simple. –
L'utilisation de la propriété 'EnableCalculation' est une bonne idée car elle permet de recalculer une seule feuille au niveau de la feuille de travail. En revanche, 'Application.CalculateFull' force un calcul complet de toutes les données, non seulement dans une seule feuille de travail ou classeur, mais dans ** tous les classeurs ouverts **! Cela pourrait être une surenchère majeure, d'autant plus que l'utilisateur pourrait avoir plusieurs classeurs non reliés, potentiellement compliqués, ouverts. – ricovox