Null et fonction VBA
Comment gérer un argument
Null
dans une fonction VBA ?
La fonction
Vous avez écrit la fonction VBA suivante :
1 2 3 |
Function Test(ByVal dblChamp As Double) Test = dblChamp * 10 End Function |
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 :
1 |
Prix multiplié par 10: Test([Prix]) |
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 :
1 2 3 4 |
Function Test(ByVal varChamp As Variant) If IsNull(varChamp) Then Exit Function Test = varChamp * 10 End Function |
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 :
1 2 3 4 5 6 7 |
Function Test(ByVal varChamp As Variant) As Double If IsNull(varChamp) Then Test = 0 Else Test = varChamp * 10 End If End Function |
Izno > Content que ça puisse aider ! 🙂
Merci… 3 heures que je me fais #~!& à chercher pourquoi ma fonction renvoyait une erreur !
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.
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
Operateur > La fonction Nz() n’a aucune application dans ce cas. Ce qu’il faudrait faire c’est :
[Stock minimum]
, en plus du champ[Quantité en stock]
.[Quantité en stock] <= [Stock minimum]
(avec un pourcentage de variation éventuel.A aménager bien sûr en fonction de la structure des tables.
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.
Encore plus court :
Function Test(ByVal varChamp As Variant) As Double
Test = 10 * Nz(varChamp)
End Function