Utilisation d'Excel pour actualiser les données d'une feuille à partir de VBA
Question
Comment obtenez-vous les données de feuille de calcul dans Excel pour se recalculer à partir de VBA, sans avoir à modifier une valeur de cellule?
La solution
Les lignes suivantes feront l'affaire:
ActiveSheet.EnableCalculation = False
ActiveSheet.EnableCalculation = True
Modifier: 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.
Autres conseils
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 des ratés et a besoin d’une impulsion 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 du choix.
Cells(RowA,ColB).Formula = Cells(RowA,ColB).Formula
Ceci peut ensuite être mis en boucle si nécessaire.
Vous pouvez également 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 la désactivation d'une image d'arrière-plan (un filigrane DRAFT) dans VBA. Ma modification n'apparaissait pas (ce qui a été effectué avec la méthode Sheets (1) .PageSetup.CenterHeader = ""
" - j'avais donc besoin d'un moyen d'actualisation. L’approche ActiveSheet.EnableCalculation
a partiellement résolu le problème, mais ne couvrait pas les cellules inutilisées.
Finalement, j'ai trouvé ce dont j'avais besoin avec un liner qui faisait 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 n'étaient pas exécutés. À 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’est pas exactement responsable vis-à-vis de OP " kluge " commentaire, il a fourni 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