Apprenez à déboguer les fonctions personnalisées dans Excel

  • Partage Ça
Michael Brown

Comme vous savez déjà comment créer des UDF (et, je l'espère, vous avez également essayé de les appliquer dans votre Excel), creusons un peu plus et voyons ce qui peut être fait au cas où votre fonction définie par l'utilisateur ne fonctionne pas.

Pour résoudre certains problèmes lors de la création d'une fonction personnalisée, vous aurez probablement besoin d'exécuter un débogage, ce qui vous permettra de vous assurer que la fonction fonctionne correctement.

Nous allons explorer les techniques de débogage suivantes :

    Lorsque vous créez une fonction personnalisée, il est toujours possible que vous fassiez une erreur. Les fonctions personnalisées sont généralement assez complexes. Et elles ne fonctionnent pas toujours correctement tout de suite. La formule peut renvoyer un résultat incorrect ou l'erreur #VALUE ! Contrairement aux fonctions Excel standard, vous ne verrez pas d'autres messages.

    Existe-t-il un moyen de parcourir une fonction personnalisée étape par étape pour vérifier le fonctionnement de chacune de ses instructions ? Bien sûr ! Le débogage est utilisé à cette fin.

    Je vais vous proposer plusieurs façons de déboguer votre fonction personnalisée afin que vous puissiez choisir celle qui vous convient le mieux.

    À titre d'exemple, nous utilisons la fonction personnalisée GetMaxBetween de l'un de nos précédents articles qui calcule le nombre maximum dans la plage de valeurs spécifiée :

    Function GetMaxBetween(rngCells As Range, MinNum, MaxNum) Dim NumRange As Range Dim vMax Dim arrNums() Dim i As Integer ReDim arrNums(rngCells.Count) For Each NumRange In rngCells vMax = NumRange Select Case vMax Case MinNum + 0.01 To MaxNum - 0.01 arrNums(i) = vMax i = i + 1 Case Else GetMaxBetween = 0 End Select Next NumRange GetMaxBetween = WorksheetFunction.Max(arrNums) End Function

    Les arguments de la fonction sont la plage de cellules où les nombres sont écrits, ainsi que la limite supérieure et inférieure des valeurs.

    Placez la fonction MsgBox aux endroits importants

    Afin de surveiller l'exécution des calculs, vous pouvez afficher les valeurs des variables les plus importantes à l'écran aux bons endroits, en utilisant des boîtes de dialogue contextuelles.

    MsgBox est une boîte de dialogue que vous pouvez utiliser pour afficher une sorte de message à l'utilisateur.

    La syntaxe de MsgBox est similaire à celle des autres fonctions VBA :

    MsgBox(invite [, boutons] [, titre] [, fichier d'aide, contexte])

    prompt est un argument obligatoire. Il contient le message que vous voyez dans la boîte de dialogue. Il peut également être utilisé pour afficher les valeurs des variables individuelles.

    Tous les autres arguments sont facultatifs.

    [ boutons ] - détermine les boutons et les icônes qui s'affichent dans l'écran d'accueil. MsgBox Par exemple, si nous utilisons l'option vbOkOnly alors seul le OK Même si vous avez omis cet argument, ce bouton est utilisé par défaut.

    [ titre ] - ici vous pouvez spécifier le titre de la boîte de message.

    Passons des mots à la pratique et commençons à déboguer. Pour afficher le message, ajoutez la ligne suivante au code de la fonction GetMaxBetween fonction définie par l'utilisateur avant le Cas Else opérateur :

    MsgBox vMax,, "Count -" & ; i

    Voici ce que nous obtiendrons comme résultat :

    Function GetMaxBetween(rngCells As Range, MinNum, MaxNum) Dim NumRange As Range Dim vMax Dim arrNums() Dim i As Integer ReDim arrNums(rngCells.Count) For Each NumRange In rngCells vMax = NumRange Select Case vMax Case MinNum + 0.01 To MaxNum - 0.01 arrNums(i) = vMax i = i + 1 MsgBox vMax,, "Count -" & ; i Case Else GetMaxBetween = 0 End Select Next NumRange GetMaxBetween =WorksheetFunction.Max(arrNums) End Function

    Utilisation de la vMax dans la boîte de dialogue, nous verrons quels nombres répondent aux critères de sélection, afin de pouvoir sélectionner le plus grand d'entre eux. Avec l'expression "Count -" & ; I dans la barre de titre, nous indiquons combien de nombres nous avons déjà sélectionnés pour déterminer la valeur maximale. Le compteur sera augmenté à chaque nouvelle valeur.

    Une fois que nous avons défini notre UDF, nous appliquons la formule ci-dessous à la plage de dates :

    = GetMaxBetween (A1:A6,10,50)

    Après avoir appuyé sur le bouton Enter, vous verrez un message comme dans la capture d'écran ci-dessous :

    Il s'agit du premier nombre de la plage A1 : A6 qui répond aux critères : supérieur à 10 mais inférieur à 50.

    Après avoir cliqué sur OK, un deuxième message apparaît avec le nombre 14. Les autres nombres ne correspondent pas aux critères de sélection. Par conséquent, la fonction quitte et renvoie la plus grande des deux valeurs, 17.

    Le site MsgBox peut être utilisée aux endroits les plus importants de votre fonction personnalisée pour contrôler la façon dont les valeurs des variables individuelles changent. Les boîtes de message peuvent être très utiles lorsque vous avez une grande fonction et beaucoup de calculs. Dans ce cas, il vous sera facile de déterminer dans quelle partie du code l'erreur se produit.

    Déterminer les points d'arrêt et procéder étape par étape

    Vous pouvez ajouter des points d'arrêt dans le code de votre fonction où l'exécution du code s'arrêtera. Vous pouvez ainsi suivre le processus de calcul étape par étape. Ce faisant, vous pouvez voir comment les valeurs des variables changent.

    Pour ajouter un point d'arrêt, placez le curseur sur la ligne contenant l'instruction où vous voulez faire une pause, puis cliquez à droite et sélectionnez Debug -> ; Toggle Breakpoint (point d'arrêt) Vous pouvez également cliquer à l'endroit souhaité sur la zone grise verticale à gauche du code de fonction.

    Un cercle rouge apparaît, comme vous pouvez le voir dans la capture d'écran ci-dessous. La ligne de code où le calcul sera arrêté est surlignée en rouge.

    Maintenant, la fenêtre de l'éditeur VBA sera ouverte lorsque la fonction est en cours d'exécution. Le curseur sera positionné à l'endroit où vous vous êtes arrêté.

    Si vous passez le curseur de votre souris sur l'une des variables du code de la fonction, vous pouvez voir sa valeur actuelle :

    Appuyez sur F5 pour poursuivre le calcul.

    Remarque : après le point d'arrêt, vous pouvez commencer à suivre la progression des calculs étape par étape. Si vous appuyez sur le bouton F8, seule la ligne suivante du code VBA sera exécutée. La ligne jaune avec une flèche se déplacera également vers la dernière position du code exécuté.

    L'exécution de la fonction étant à nouveau en pause, vous pouvez visualiser les valeurs actuelles de toutes les variables de la fonction à l'aide du curseur de la souris.

    La prochaine pression sur F8 nous fera avancer d'un pas. Vous pouvez donc appuyer sur F8 jusqu'à la fin du calcul. Ou appuyer sur F5 pour continuer le calcul jusqu'au prochain point d'arrêt.

    Si une erreur se produit, le curseur s'arrête à l'endroit du code où l'erreur s'est produite. Un message d'erreur s'affiche également, ce qui permet de déterminer facilement la cause du problème.

    Les points d'arrêt que vous spécifiez seront appliqués jusqu'à ce que vous fermiez le fichier. Lorsque vous le rouvrirez, vous devrez les définir à nouveau. Ce n'est pas la méthode la plus pratique, vous ne pensez pas ?

    Toutefois, ce problème peut être résolu en insérant une Stop dans le code de la fonction aux endroits nécessaires, et vous pouvez arrêter l'exécution du programme de la même manière que lorsque vous utilisez des points d'arrêt.

    Lorsque VBA rencontre un Stop Vérifiez les valeurs des variables, puis appuyez sur F5 pour continuer.

    Ou appuyez sur F8 pour remplir la fonction étape par étape comme décrit ci-dessus.

    Le site Stop fait partie du programme et n'est donc pas supprimée, comme c'est le cas avec un point d'arrêt. Lorsque vous avez fini de déboguer, supprimez-la vous-même. Ou transformez-la en commentaire en la faisant précéder d'un guillemet simple (').

    Débogage à l'aide de l'opérateur Debug.Print

    Vous pouvez placer le Debug.Print dans le code de la fonction au bon endroit, ce qui est utile pour vérifier les valeurs des variables qui changent cycliquement.

    Vous pouvez voir un exemple des performances de Debug.Print sur la capture d'écran ci-dessous.

    Déclaration Debug.Print i, vMax imprime les valeurs et leurs numéros ordinaux.

    Dans la fenêtre Immédiate, vous voyez deux nombres (17 et 14) de la plage sélectionnée, qui correspond aux limites fixées et parmi lesquelles le maximum sera sélectionné. Les chiffres 1 et 2 signifient que la fonction a effectué 2 cycles dans lesquels les nombres ont été sélectionnés. Nous voyons les valeurs des variables les plus importantes, comme nous l'avons fait précédemment avec MsgBox Mais cela n'a pas arrêté la fonction.

    Appeler une fonction à partir d'une procédure

    Vous pouvez appeler une fonction définie par l'utilisateur non pas à partir d'une cellule de la feuille de calcul, mais à partir d'une procédure. Dans ce cas, toutes les erreurs seront affichées dans la fenêtre de l'éditeur Visual Basic.

    Voici comment vous pouvez appeler la fonction définie par l'utilisateur GetMaxBerween à partir d'une procédure :

    Sub Test() Dim x x = GetMaxBetween(Range ( "A1:A6" ), 10, 50) MsgBox(x) End Sub

    Positionnez le curseur n'importe où dans le code et appuyez sur F5 . S'il n'y a pas d'erreur dans la fonction, vous verrez une fenêtre pop-up avec le résultat du calcul.

    En cas d'erreur, vous verrez un message correspondant dans l'éditeur VBA. Le calcul sera arrêté et la ligne de code dans laquelle l'erreur s'est produite sera surlignée en jaune. Vous pouvez facilement identifier où et pourquoi l'erreur s'est produite.

    C'est tout. Vous avez maintenant créé votre propre module complémentaire, vous l'avez ajouté à Excel et vous pouvez utiliser l'UDF dans ce module. Si vous voulez utiliser d'autres UDF, il suffit d'écrire le code dans le module complémentaire dans l'éditeur VBA et de l'enregistrer.

    C'est tout pour aujourd'hui. Nous avons couvert différentes façons de déboguer les fonctions personnalisées et appris comment les utiliser dans votre classeur. Nous espérons vraiment que ces directives vous seront utiles. Si vous avez des questions, écrivez dans les commentaires de cet article.

    Michael Brown est un passionné de technologie passionné par la simplification de processus complexes à l'aide d'outils logiciels. Avec plus d'une décennie d'expérience dans l'industrie de la technologie, il a perfectionné ses compétences dans Microsoft Excel et Outlook, ainsi que dans Google Sheets et Docs. Le blog de Michael est dédié au partage de ses connaissances et de son expertise avec les autres, en fournissant des conseils et des tutoriels faciles à suivre pour améliorer la productivité et l'efficacité. Que vous soyez un professionnel chevronné ou un débutant, le blog de Michael offre des informations précieuses et des conseils pratiques pour tirer le meilleur parti de ces outils logiciels essentiels.