Actualiser les résultats de la fonction Excel VBA
-
08-06-2019 - |
Question
Est-ce que quelqu'un sait comment faire en sorte qu'une fonction définie par l'utilisateur se réévalue (en fonction des données modifiées dans la feuille de calcul) ?J'ai essayé F9 et Changement+F9, mais ceux-là ne fonctionnent pas.La seule chose qui semble fonctionner est de modifier la cellule avec l'appel de fonction, puis d'appuyer sur Entrée.Des idées?Il me semble me souvenir d'avoir pu faire ça...
La solution
Tu devrais utiliser Application.Volatile
en haut de votre fonction :
Function doubleMe(d)
Application.Volatile
doubleMe = d * 2
End Function
Il sera ensuite réévalué chaque fois que le classeur changera (si votre calcul est défini sur automatique).
Autres conseils
Quelques informations supplémentaires sur les raccourcis clavier F9 pour le calcul dans Excel
- F9 Recalcule toutes les feuilles de calcul dans tous les classeurs ouverts
- Changement+ F9 Recalcule la feuille de calcul active
- Ctrl+Alt+ F9 Recalcule toutes les feuilles de calcul dans tous les classeurs ouverts (recalcul complet)
- Changement + Ctrl+Alt+ F9 Reconstruit l'arborescence des dépendances et effectue un recalcul complet
D'accord, j'ai trouvé celui-ci moi-même.Vous pouvez utiliser Ctrl+Alt+F9 pour y parvenir.
Si vous incluez TOUTES les références aux données de la feuille de calcul dans la liste des paramètres UDF, Excel recalculera votre fonction chaque fois que les données référencées changeront :
Public Function doubleMe(d As Variant)
doubleMe = d * 2
End Function
Vous pouvez aussi utiliser Application.Volatile
, mais cela présente l'inconvénient de faire en sorte que votre UDF soit toujours recalculée - même lorsque ce n'est pas nécessaire car les données référencées n'ont pas changé.
Public Function doubleMe()
Application.Volatile
doubleMe = Worksheets("Fred").Range("A1") * 2
End Function
Pour passer en automatique :
Application.Calculation = xlCalculationAutomatic
Pour passer en manuel :
Application.Calculation = xlCalculationManual
Le Application.Volatile
ne fonctionne pas pour recalculer une formule avec ma propre fonction à l'intérieur.J'utilise la fonction suivante :Application.CalculateFull
Cela rafraîchit mieux le calcul que Range(A:B).Calculate
:
Public Sub UpdateMyFunctions()
Dim myRange As Range
Dim rng As Range
' Assume the functions are in this range A1:B10.
Set myRange = ActiveSheet.Range("A1:B10")
For Each rng In myRange
rng.Formula = rng.Formula
Next
End Sub
Public Sub UpdateMyFunctions()
Dim myRange As Range
Dim rng As Range
'Considering The Functions are in Range A1:B10
Set myRange = ActiveSheet.Range("A1:B10")
For Each rng In myRange
rng.Formula = rng.Formula
Next
End Sub