Table des matières
Nous poursuivons la série de tutoriels sur les fonctions définies par l'utilisateur. Dans nos articles précédents, nous nous sommes familiarisés avec les fonctions personnalisées et avons appris à les créer et à les utiliser. Dans ce manuel, nous allons nous pencher sur les spécificités de l'utilisation de ces fonctions et voir les différences entre les UDF et les macros VBA.
Dans ce tutoriel, nous allons apprendre ce qui suit :
Nous espérons que cet article renforcera votre connaissance des UDF et vous aidera à les utiliser encore plus efficacement dans vos classeurs Excel.
Est-ce que UDF et Macro sont la même chose ?
Les fonctions définies par l'utilisateur et les macros VBA sont toutes deux créées à l'aide de l'éditeur VBA. Quelle est la différence entre elles et à quoi faut-il donner la préférence ?
La différence la plus importante est que la fonction effectue le calcul, tandis que la macro effectue une action. Une fonction définie par l'utilisateur, comme une fonction Excel ordinaire, doit être écrite dans une cellule. À la suite de son exécution, la cellule renvoie une valeur. En même temps, il est impossible de modifier les valeurs des autres cellules, ainsi que certaines propriétés de la cellule actuelle (en particulier,Toutefois, vous pouvez utiliser une fonction personnalisée dans les formules de mise en forme conditionnelle.
Les UDF et les macros VBA fonctionnent de manière différente. Par exemple, lorsque vous créez un UDF dans l'éditeur Visual Basic, vous commencez par une instruction Fonction et se terminent par un Fin de la fonction Lorsque vous enregistrez une macro, vous commencez par une déclaration... Sous et se terminent par un End Sub.
Tous les opérateurs Visual Basic ne peuvent pas être utilisés pour créer des UDF, c'est pourquoi une macro est une solution plus polyvalente.
Contrairement à une fonction définie par l'utilisateur, une macro ne nécessite pas que l'utilisateur lui transmette des arguments (et ne peut en accepter).
Le fait est que certaines commandes de macros peuvent utiliser des adresses de cellules ou des éléments de mise en forme (par exemple, la couleur). Si vous déplacez des cellules, ajoutez ou supprimez des lignes et des colonnes, modifiez le format des cellules, vous pouvez facilement "casser" vos macros. Cela est particulièrement possible si vous partagez votre fichier avec des collègues qui ne savent pas comment fonctionnent vos macros.
Par exemple, vous avez un fichier avec une macro qui fonctionne parfaitement. Cette formule calcule le pourcentage des cellules A1 à A4. La macro change la couleur de ces cellules en jaune. Un format de pourcentage est défini dans la cellule active.
Si vous ou quelqu'un d'autre décide d'insérer une nouvelle ligne, la macro continuera à chercher la valeur dans la cellule A4 (le paramètre 4,1 de votre UDF), échouera et renverra une erreur :
Dans ce cas, l'erreur est due à une division par zéro (aucune valeur dans une ligne nouvellement ajoutée). Si la macro effectue, par exemple, une sommation, vous obtiendrez simplement un résultat erroné, mais vous ne le saurez pas.
Contrairement aux macros, les fonctions définies par l'utilisateur ne peuvent pas provoquer une situation aussi désagréable.
Ci-dessous, vous pouvez voir les performances des mêmes calculs en utilisant un UDF. Ici, vous pouvez spécifier des cellules d'entrée n'importe où dans la feuille de calcul et vous ne rencontrerez pas de problèmes inattendus lorsque vous les modifierez.
J'ai écrit la formule suivante en C3 :
=UDF_vs_Macro(A1,A4)
J'ai ensuite inséré une ligne vierge, et la formule a changé comme vous pouvez le voir dans la capture d'écran ci-dessus.
Maintenant, nous pouvons déplacer une cellule d'entrée ou une cellule avec une fonction n'importe où. Le résultat sera toujours correct.
Un avantage supplémentaire de l'utilisation des UDF est qu'ils se mettent automatiquement à jour lorsque la valeur de la cellule d'entrée change. Lorsque vous utilisez des macros, vous devez toujours vous assurer que toutes les données sont à jour.
En gardant cet exemple à l'esprit, je préférerais utiliser les UDF chaque fois que possible et n'utiliser les macros que pour les activités autres que les calculs.
Limites et inconvénients de l'utilisation de l'UDF
J'ai déjà mentionné les avantages de l'UDF ci-dessus. En bref, il permet d'effectuer des calculs qui ne sont pas possibles avec les fonctions Excel standard. En outre, il peut enregistrer et utiliser des formules longues et complexes, en les transformant en une seule fonction. Et vous n'aurez pas à écrire des formules compliquées encore et encore.
Parlons maintenant plus en détail des lacunes de l'UDF :
- La création d'UDF nécessite l'utilisation de VBA. Il n'y a aucun moyen d'y échapper. Cela signifie que l'utilisateur ne peut pas enregistrer l'UDF de la même manière qu'une macro Excel. Vous devez créer l'UDF vous-même. Cependant, vous pouvez copier et coller des portions du code de la macro précédemment enregistrée dans votre fonction. Vous devez simplement être conscient des limites des fonctions personnalisées.
- Un autre inconvénient de l'UDF est que, comme toute autre fonction Excel, il ne peut renvoyer qu'une seule valeur ou un tableau de valeurs dans une cellule. Il effectue simplement des calculs, rien de plus.
- Si vous souhaitez partager votre classeur avec vos collègues, veillez à enregistrer vos UDF dans le même fichier, sinon vos fonctions personnalisées ne fonctionneront pas pour eux.
- Les fonctions personnalisées créées à l'aide de l'éditeur VBA sont plus lentes que les fonctions normales, notamment dans les tableaux de grande taille. Malheureusement, VBA est un langage de programmation très lent jusqu'à présent. Par conséquent, si vous avez beaucoup de données, essayez d'utiliser des fonctions standard chaque fois que possible, ou créez des UDF à l'aide de la fonction LAMBDA.
Limites des fonctions personnalisées :
- Les UDF sont conçus pour effectuer des calculs et renvoyer une valeur. Ils ne peuvent pas être utilisés à la place des macros.
- Ils ne peuvent pas modifier le contenu des autres cellules (seulement la cellule active).
- Les noms de fonction doivent respecter certaines règles. Par exemple, vous ne pouvez pas utiliser un nom qui correspond à un nom de fonction Excel natif ou à une adresse de cellule, comme AB123.
- Votre fonction personnalisée ne peut pas contenir d'espaces dans son nom, mais elle peut inclure le caractère de soulignement. Toutefois, la méthode préférée consiste à utiliser des majuscules au début de chaque nouveau mot (par exemple, GetMaxBetween).
- Un UDF ne peut pas copier et coller des cellules vers d'autres zones de la feuille de calcul.
- Ils ne peuvent pas modifier la feuille de calcul active.
- Les UDF ne peuvent pas modifier le formatage de la cellule active. Si vous souhaitez modifier le formatage d'une cellule lors de l'affichage de différentes valeurs, vous devez utiliser le formatage conditionnel.
- Ils ne peuvent pas ouvrir d'autres livres.
- Ils ne peuvent pas être utilisés pour exécuter des macros utilisant Application.OnTime.
- Une fonction définie par l'utilisateur ne peut pas être créée à l'aide de l'enregistreur de macros.
- Les fonctions n'apparaissent pas dans le Développeur> ; Macros dialogue.
- Vos fonctions apparaîtront dans la boîte de dialogue ( Insérer> ; Fonction ) et dans la liste des fonctions uniquement si elles sont déclarées en tant que Public (il s'agit de la valeur par défaut, sauf indication contraire).
- Toute fonction déclarée comme Privé n'apparaîtra pas dans la liste des fonctions.
Un fonctionnement assez lent, ainsi que certaines restrictions d'utilisation, peuvent vous faire penser : "Quelle est l'utilité de ces fonctions personnalisées ?".
Elles peuvent être utiles, et le sont si nous sommes conscients des contraintes qui leur sont imposées. Si vous apprenez à créer et à utiliser correctement les UDF, vous pouvez écrire votre propre bibliothèque de fonctions, ce qui élargira considérablement votre capacité à travailler avec des données dans Excel.
Pour ma part, les fonctions personnalisées me font gagner beaucoup de temps. Et vous ? Avez-vous déjà essayé de créer votre propre UDF ? L'avez-vous préféré aux fonctions Excel de base ? Discutons-en dans les commentaires :)