web-dev-qa-db-fra.com

Utilisation d'Excel pour actualiser les données d'une feuille à partir de VBA

Comment obtenir des données de feuille de calcul dans Excel pour se recalculer à partir de VBA, sans avoir à changer une valeur de cellule?

47
Lance Roberts

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.

56
Lance Roberts

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
16
Graham

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.

8
kambeeks

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.)

6
Dave DuPlantis

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

3
AjV Jsy

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
0
pghcpa