Erreur valeur fonction VBA personnalisée avec plage de cellules en paramètre
Ririe
-
yg_be Messages postés 23541 Date d'inscription Statut Contributeur Dernière intervention -
yg_be Messages postés 23541 Date d'inscription Statut Contributeur Dernière intervention -
Bonjour,
Je souhaite créer une fonction personnalisée en VBA qui prend en paramètre une cellule et une plage de cellule afin de retourner une valeur dans une cellule.
La fonction marche quand je la teste dans une procédure mais ne fonctionne pas dans le tableur : par exemple quand j'écris =cover(A6;B6:C6) elle affiche soit 0 soit #VALEUR
Je pense que le problème vient du type de la plage de cellule mais je ne trouve pas de solution...
Toute aide est bienvenue, merci beaucoup !!
Voici le code;
Public Function cover(landing As Variant, ParamArray forecast() As Variant) As Double
Application.Volatile
Dim lan As Variant
Dim i As Single
Dim varg As Range
varg = forecast(0)
If landing < 0 Then
cover = 0
Else
If landing > Application.WorksheetFunction.Sum(forecast) Then
cover = landing / Application.WorksheetFunction.Average(forecast)
Else
lan = landing
i = 0
While lan - varg(i) > 0
lan = lan - varg(i)
i = i + 1
Wend
cover = i + lan / varg(i)
Debug.Print (cover)
End If
End If
End Function
Ririe
Je souhaite créer une fonction personnalisée en VBA qui prend en paramètre une cellule et une plage de cellule afin de retourner une valeur dans une cellule.
La fonction marche quand je la teste dans une procédure mais ne fonctionne pas dans le tableur : par exemple quand j'écris =cover(A6;B6:C6) elle affiche soit 0 soit #VALEUR
Je pense que le problème vient du type de la plage de cellule mais je ne trouve pas de solution...
Toute aide est bienvenue, merci beaucoup !!
Voici le code;
Public Function cover(landing As Variant, ParamArray forecast() As Variant) As Double
Application.Volatile
Dim lan As Variant
Dim i As Single
Dim varg As Range
varg = forecast(0)
If landing < 0 Then
cover = 0
Else
If landing > Application.WorksheetFunction.Sum(forecast) Then
cover = landing / Application.WorksheetFunction.Average(forecast)
Else
lan = landing
i = 0
While lan - varg(i) > 0
lan = lan - varg(i)
i = i + 1
Wend
cover = i + lan / varg(i)
Debug.Print (cover)
End If
End If
End Function
Ririe
A voir également:
- Erreur valeur fonction VBA personnalisée avec plage de cellules en paramètre
- Fonction si et - Guide
- Sonnerie personnalisée android - Guide
- Remettre parametre usine pc - Guide
- Parametre windows - Guide
- Formule excel pour additionner plusieurs cellules - Guide
1 réponse
Bonjour
Pour tes prochains post, merci d’utiliser la coloration syntaxique, voir ici https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code un petit tuto.
Pour ton problème, je code assez peu en VBA, mais comme tu n’as pas encore reçu de réponse, je tente un truc.
Il me semble que le type demandé doit être Range. Quoiqu’il en soit utiliser Variant est une mauvaise habitude en gros tu dis à l’interpréteur « débrouille toi » de vba à vba ça marche pas trop mal ( mais pas toujours et quand ça ne marche pas c’est compliqué de comprendre pourquoi m) mais de excel à vba comme tu le vois c’est pas ça qui est ça.
Prends l’habitude de déclarer tes variables avec le type dont tu as réellement besoin.
Pour tes prochains post, merci d’utiliser la coloration syntaxique, voir ici https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code un petit tuto.
Pour ton problème, je code assez peu en VBA, mais comme tu n’as pas encore reçu de réponse, je tente un truc.
Il me semble que le type demandé doit être Range. Quoiqu’il en soit utiliser Variant est une mauvaise habitude en gros tu dis à l’interpréteur « débrouille toi » de vba à vba ça marche pas trop mal ( mais pas toujours et quand ça ne marche pas c’est compliqué de comprendre pourquoi m) mais de excel à vba comme tu le vois c’est pas ça qui est ça.
Prends l’habitude de déclarer tes variables avec le type dont tu as réellement besoin.
comme suggéré par Whismeril (bonjour), ceci est préférable:
tu écris "La fonction marche quand je la teste dans une procédure", sans montrer comment tu la testes.
en cas de soucis, n'hésite pas à utiliser les possibilités de débogage de VBA: https://www.commentcamarche.net/contents/1381-debogage
ceci devrait toujours causer une erreur:
un exemple dont tu pourrais t'inspirer, si jamais tu as réellement un nombre variable de paramètres justifiant l'utilisation de ParamArray: