Comment obtenir des données de feuille de calcul dans Excel pour se recalculer à partir de VBA, sans avoir à changer une valeur de cellule?
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 complémentaires. La feuille de production que j'utilise est suffisamment complexe pour que je ne veuille pas tester la méthode .CalculateFull()
, mais cela peut fonctionner.
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
Parfois, Excel va faire un hoquet et a besoin d'un coup de pouce pour réappliquer une équation. Cela se produit parfois 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
Cela peut ensuite être mis en boucle si nécessaire.
Vous pourriez aussi essayer
Application.CalculateFull
ou
Application.CalculateFullRebuild
si cela ne vous dérange pas de reconstruire tous les classeurs ouverts, plutôt que la feuille de calcul active. (CalculateFullRebuild
reconstruit également les dépendances.)
J'ai eu un problème avec désactiver une image d'arrière-plan (un filigrane de projet) dans VBA. Mon changement n'apparaissait pas (ce qui a été effectué avec la méthode Sheets(1).PageSetup.CenterHeader = ""
) - j'avais donc besoin d'un moyen de rafraîchir. Le ActiveSheet.EnableCalculation
L'approche a partiellement résolu le problème, mais ne couvrait pas les cellules inutilisées.
En fin de compte, j'ai trouvé ce dont j'avais besoin avec une doublure qui a fait disparaître l'image lorsqu'elle n'était plus définie: -
Application.ScreenUpdating = True
Après une mise à jour de la connexion de données, certains fichiers UDF ne s'exécutaient pas. À l’aide d’un sous-programme, j’essayais de recalculer une seule colonne avec:
Sheets("mysheet").Columns("D").Calculate
Mais la déclaration ci-dessus n'a eu aucun effet. Aucune des solutions ci-dessus n'a aidé, sauf la suggestion de Kambeeks de remplacer les formules qui a fonctionné et qui a été rapide si le calcul manuel a été activé pendant la mise à jour. Le code ci-dessous a résolu mon problème, même s'il n'était pas exactement responsable du commentaire OP "kluge", il fournissait une solution rapide/fiable pour forcer le recalcul des cellules spécifiées par l'utilisateur.
Application.Calculation = xlManual
DoEvents
For Each mycell In Sheets("mysheet").Range("D9:D750").Cells
mycell.Formula = mycell.Formula
Next
DoEvents
Application.Calculation = xlAutomatic