Null et fonction VBA

Comment gérer un argument Null dans une fonction VBA ?

La fonction

Vous avez écrit la fonction VBA suivante :

Bon d’accord, pas très spectaculaire, c’est juste pour voir le principe ! La fonction reçoit une valeur de type Double comme argument, et renvoie un résultat qui est cette valeur multipliée par 10. Ca marche.

Maintenant, vous souhaitez utiliser cette fonction dans une requête. Vous créez donc une requête, par exemple basée sur une table Produits (avec un champ Prix). Vous créez le champ calculé suivant :

Rappel sur le principe du champ calculé :

  • Ce qui est avant le signe « : » est le titre de la colonne finale.
  • Ce qui suit est un calcul, pouvant faire appel à vos fonctions VBA (par exemple notre fonction Test).
  • Entre les parenthèses de la fonction, il faut une valeur compatible avec dblChamp, donc un champ numérique (ici Prix).

Le problème

Tout ça marche pas mal… jusqu’au jour où l’un des prix n’est pas renseigné. Parce qu’une valeur vide (Null) n’est pas de type Double !

La solution

Si votre fonction doit aussi accepter les valeurs Null, il faut utiliser le seul type de variable qui le permet, le Variant. Ce qui donne :

On pourrait améliorer encore la gestion du Null dans la fonction, ainsi que le type de valeur renvoyé par la fonction, mais le principe est là… et surtout plus d’erreur à l’exécution.

Pour l’amélioration, on peut considérer que, si la valeur en entrée est vide, on renvoie un résultat de 0. Ce qui donne :

Vous aimerez aussi...

7 réponses

  1. Hervé Inisan dit :

    Izno > Content que ça puisse aider ! 🙂

  2. Izno dit :

    Merci… 3 heures que je me fais #~!& à chercher pourquoi ma fonction renvoyait une erreur !

  3. Hervé Inisan dit :

    Yeo > Comme plus loin, je pense que c’est une question pour le forum. Ce qu’il faudra préciser là-bas, c’est la structure retenue pour les tables pour gérer le stock.

  4. YEO dit :

    JE voudrais obtenir ceuxci.
    lorque l’application gère le skoct par exemple, un produit X dont le stock disponible est de 2, si ces 2 article sont vendu et que je saisi le code de l’article X pour une nouvelle vente obtenir le message d’erreur suivantt puisse s’afficher a l’ecran: « quantité insufisante »

    ou encore comment faire pour determiner un stock MAX et un stock MAX de telle sorte que dès que le stock disponible atteint le niveau MINIMA access puis envoyer un signale comme « pensez a renouvelez le skoct du produit X » pour nous prevenir.

    je vous remercie

  5. Hervé Inisan dit :

    Operateur > La fonction Nz() n’a aucune application dans ce cas. Ce qu’il faudrait faire c’est :

    1. Prévoir dans la table Produits un champ [Stock minimum], en plus du champ [Quantité en stock].
    2. Créer une requête qui sortirait les produits pour lesquels [Quantité en stock] <= [Stock minimum] (avec un pourcentage de variation éventuel.

    A aménager bien sûr en fonction de la structure des tables.

  6. Operateur dit :

    est-il d’ituliser fonction NZ pour la gestion d’un stokc. par exemple j’ai un produit X qui est disponible en Stock. comment la fonction nz peut nous informer quand le produit est en rupture.

    Dans le cas contraire comment geré une telle situation?

    Merci pour l’intérêt.

  7. Xof dit :

    Encore plus court :

    Function Test(ByVal varChamp As Variant) As Double
    Test = 10 * Nz(varChamp)
    End Function

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *