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

Était-ce utile?

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