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?

Était-ce utile?

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
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top