UDF Excel : modification de cellules sans renvoyer de tableau
Dans Excel, les fonctions définies par l'utilisateur (UDF) renvoient généralement des valeurs ou des tableaux. Cependant, il existe des scénarios dans lesquels une UDF doit modifier d'autres cellules sans renvoyer de tableau. Ceci peut être réalisé grâce à une technique complexe qui implique des minuteries Windows et des événements Application.OnTime.
Le problème :
Considérons un UDF nommé New_Years qui prend deux ans en entrée. et renvoie un tableau de dates du Nouvel An entre ces années. Cependant, pour remplir le tableau dans Excel, l'utilisateur doit sélectionner manuellement les cellules, saisir la formule et appuyer sur Ctrl Maj Entrée. Cette limitation empêche l'UDF de remplir automatiquement les dates.
La solution :
Malgré la restriction d'Excel sur les UDF modifiant directement les cellules, une solution de contournement utilisant les minuteries et l'application Windows. Les événements OnTime le rendent possible. En démarrant un minuteur Windows à partir de l'UDF, un minuteur Application.OnTime ultérieur peut être programmé pour exécuter des actions qui seraient autrement interdites dans un UDF.
Exemple de code :
Le code suivant montre comment implémenter cette technique en utilisant une collection pour stocker les références des cellules où l'UDF est appelée. Deux routines de minuterie, AfterUDFRoutine1 et AfterUDFRoutine2, sont utilisées pour gérer les événements de minuterie.
Public Sub AfterUDFRoutine1() ' Stop the Windows timer If mWindowsTimerID <> 0 Then KillTimer 0&, mWindowsTimerID ' Cancel any previous OnTime timers If mApplicationTimerTime <> 0 Then Application.OnTime mApplicationTimerTime, "AfterUDFRoutine2", , False End If ' Schedule timer mApplicationTimerTime = Now Application.OnTime mApplicationTimerTime, "AfterUDFRoutine2" End Sub Public Sub AfterUDFRoutine2() Dim Cell As Range ' ... Do tasks not allowed in a UDF ... End Sub
Utilisation :
Pour appliquer cette technique, une UDF (par exemple, AddTwoNumbers ) peut être créé dans un module standard. Dans l'UDF, les routines de minuterie sont démarrées et la référence de cellule de la cellule appelante est stockée dans la collection. Les routines de minuterie modifient ensuite les cellules requises en dehors de la portée de l'UDF.
En tirant parti des minuteries Windows et des événements Application.OnTime, il devient possible de créer des UDF qui modifient les cellules sans renvoyer de tableau. Cette technique permet une plus grande automatisation et élimine le besoin de remplissage manuel des tableaux par l'utilisateur.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!