Est-ce que quelqu'un sait comment je peux get une fonction définie par l'user pour se réévaluer (en fonction des données modifiées dans la feuille de calcul)? J'ai essayé F9 et Shift + F9 , mais ceux ne fonctionnent pas. La seule chose qui semble fonctionner est l'édition de la cellule avec l'appel de fonction, puis appuyez sur Entrée. Des idées? Je me souviens d'avoir pu le faire …
Vous devez utiliser Application.Volatile
dans le haut de votre fonction:
Function doubleMe(d) Application.Volatile doubleMe = d * 2 End Function
Fonction doubleMe (d)Function doubleMe(d) Application.Volatile doubleMe = d * 2 End Function
Application.VolatileFunction doubleMe(d) Application.Volatile doubleMe = d * 2 End Function
doubleMe = d * 2Function doubleMe(d) Application.Volatile doubleMe = d * 2 End Function
Il sera ensuite réévalué chaque fois que le classur change (si votre calcul est réglé sur automatiquement).
Plus d'informations sur les raccourcis keyboard F9 pour calculer dans Excel
D'accord, j'ai trouvé celui-ci moi-même. Vous pouvez utiliser Ctrl + Alt + F9 pour y parvenir.
Si vous incluez TOUTES les references aux données de tableur dans la list de parameters UDF, Excel recalculera votre fonction chaque fois que datatables référencées changent:
Public Function doubleMe(d as variant) doubleMe=d*2 end Function
Fonction publique doubleMe (d en variante)Public Function doubleMe(d as variant) doubleMe=d*2 end Function
doubleMe = d * 2Public Function doubleMe(d as variant) doubleMe=d*2 end Function
Vous pouvez également utiliser Application.Volatile, mais cela a pour inconvénient de faire en sorte que votre UDF soit toujours recalculé, même s'il n'est pas nécessaire car datatables référencées n'ont pas changé.
Public Function doubleMe() Application.Volatile doubleMe=Worksheets("Fred").Range("A1")*2 end Function
Fonction publique doubleMe ()Public Function doubleMe() Application.Volatile doubleMe=Worksheets("Fred").Range("A1")*2 end Function
Application.VolatilePublic Function doubleMe() Application.Volatile doubleMe=Worksheets("Fred").Range("A1")*2 end Function
doubleMe = Feuilles de travail ("Fred"). Plage ("A1") * 2Public Function doubleMe() Application.Volatile doubleMe=Worksheets("Fred").Range("A1")*2 end Function
Il fonctionne bien celui-ci pour actualiser le calcul mieux que Range (A: B) .Calculer
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
Public Sub UpdateMyFunctions ()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
Dim myRange As RangePublic 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
Dim rng As RangePublic 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
'Compte tenu des fonctions sont dans la plage A1: B10Public 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
Définir myRange = ActiveSheet.Range ("A1: B10")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
Pour chaque rng dans myRangePublic 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
rng.Formula = rng.FormulaPublic 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
À l'aide d'Excel 2010, j'ai rencontré les mêmes problèmes que Brian. Lorsque j'ai essayé toutes les solutions proposées ici, il n'y a pas eu d'amélioration, la fonction définie par l'user est apparue pour ne pas recalculer en dépit d'avoir Application.Volatile, en utilisant des combinaisons de touches de recalcul etc. Cependant, je me suis rendu count que ma définition de fonction était en défaut dans le fait que toutes les references de cellules dans il n'était pas suffisamment qualifié pour fonctionner correctement lorsque la feuille contenant la fonction n'était pas la feuille active, par exemple la modification des cellules (a, b) à Application.Caller.Worksheet.Cells (a, b) a complètement résolu le problème! Je crois que c'est la solution parce que lorsque la feuille contenant ma fonction n'est pas active, les cellules de la feuille (a, b) sont interprétées comme faisant reference à n'importe quelle feuille qui se trouve à l'heure actuelle.
Pour passer à Automatique:
Application.Calculation = xlCalculationAutomatic
Pour passer à Manuel:
Application.Calculation = xlCalculationManual
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
Public Sub UpdateMyFunctions ()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
Dim myRange As RangePublic 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
Dim rng As RangePublic 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
'Compte tenu des fonctions sont dans la plage A1: B10Public 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
Définir myRange = ActiveSheet.Range ("A1: B10")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
Pour chaque rng dans myRangePublic 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
rng.Formula = rng.FormulaPublic 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