J'essaie de faire une UDF qui valide contre les options de style défini par l'user, en particulier dans cette circonstance, pour ListObjects
, mais j'espérais une réponse universelle.
Prenez un exemple de tableau: Tableau 1
Mon UDF est le suivant, à des fins de démonstration, nous sums dans la cellule A2:
=TableHeaderExists("Table1")
La fonction renvoie un résultat:
Public Function TableHeaderExists(table_name As Ssortingng) As Boolean TableHeaderExists = ThisWorkbook.ActiveSheet.ListObjects(table_name).ShowHeaders End Function
A2 renvoie maintenant un résultat. Mais il ne recalcule pas lorsque la condition change par l'user en désélectionnant la checkbox dans l'onglet 'Design'.
J'ai donc ajouté Application.Volatile
à la fonction.
A2 ne recalcule toujours pas. J'ai donc supprimé Application.Volatile
et ajouté ActiveSheet.Calculate
Dans ce cas, cela fonctionne pour un changement, et un seul changement.
Ce que j'ai remarqué, c'est que si je modifie toutes datatables du tableau, TOUTES datatables, les cellules avec la fonction de validation sont recalculées, mais pas lorsque les options de style sont modifiées.
J'ai alors essayé d'get un résultat en validant contre une gamme pour l'en-tête et cela fonctionne aussi comme une validation contre 'ShowHeaders', seulement des mises à jour après que datatables du corps ont été modifiées de quelque façon, et non l'apparence:
Public Function TableHeaderExists(table_name As Ssortingng) As Boolean Dim tbl As ListObject Dim hdrRng As Range Application.Volatile Set tbl = ActiveSheet.ListObjects(table_name) Set hdrRng = tbl.HeaderRowRange If Not hdrRng Is Nothing Then TableHeaderExists = True Else TableHeaderExists = False End If
Je crains que cela ne fonctionne pas:
Les UDF ne sont calculés que lorsque:
La modification de la checkbox dans l'onglet de design ne triggers pas de calcul afin que l'UDF ne soit pas calculé.