problème avec fonction personnalisée

A4L9

XLDnaute Occasionnel
bonsoir tout le monde,

je sollicite votre aide pour un problème avec une fonction personnalisée. Ma fonction demande quatre arguments:
- le cumul de km du mois précédent
- le cumul de km du mois en cours
- le nombre de chevaux du véhicule
- le nombre de km parcouru le mois en cours

le nombre de Cv est inclut dans une rechercheV de la fonction personnalisée pour obtenir les coûts correspondant au nombre de km. Mais la valeur renvoyé est #VALEUR. Alors que si dans le code je remplace Cv par 5 par exemple, la formule fonctionne. J'ai l'impression que l'argument Cv ne renvoi pas la valeur contenu dans la cellule pour la rechercheV. j'ai essayé en précisant "byval" ou "as integer" mais sans succès.

Code:
'Cp = cumul mois précédent
'Cec = cumul mois en cours
'Cv = Nombre de chevaux
'Nbkm = nombre de km parcouru dans le mois

Public Function CALCULKM(Cp, Cec, Cv, NbKm) As Single

Application.Volatile

Dim i As Single    'prix <5000
Dim j As Single    'prix >5000 <20 000
Dim k As Single    'prix >20 000
Dim l As Single    'régul palier 1
Dim m As Single    'régul palier 2

i = Evaluate("VLookup(Cv, base_km, 2, false)")
j = Evaluate("Vlookup(Cv, base_km, 4, false)")
k = Evaluate("Vlookup(Cv, base_km, 5, false)")
l = Evaluate("Vlookup(Cv, base_km, 8, false)")
m = Evaluate("Vlookup(Cv, base_km, 11, false)")

If Cp < 5000 And Cec <= 5000 Then CALCULKM = NbKm * i Else
If Cp <= 5000 And Cec > 5000 And Cec < 20000 Then CALCULKM = ((((Cec - 5000) * j) + ((5000 - Cp) * i)) + l) Else
If Cp > 5000 And Cp < 20000 And Cec > 5000 And Cec <= 20000 Then CALCULKM = NbKm * j Else
If Cp < 20000 And Cec > 20000 Then CALCULKM = ((((Cec - 20000) * k) + ((20000 - Cp) * j)) + m) Else
If Cp >= 20000 And Cec > 20000 Then CALCULKM = NbKm * k Else

End Function

quelqu'un connaîtrais t-il l'origine de ce problème? Code mal écrit?

cordialement
 

Pièces jointes

  • A4L9_fonctionperso.xlsm
    21.5 KB · Affichages: 30
C

Compte Supprimé 979

Guest
Re : problème avec fonction personnalisée

Bonsoir A4L9

Problème avec ta range Base_km
Code:
i = Application.VLookup(Cv, Range("base_km"), 2, False)

A modifier également pour J,k,l,m ;)

Pourquoi faire un "evaluate" ?

A+
 

Dranreb

XLDnaute Barbatruc
Re : problème avec fonction personnalisée

Bonsoir.
si dans le code je remplace Cv par 5 par exemple, la formule fonctionne
Le problème c'est justement que dans le code vous ne remplacez pas Cv par la valeur du paramètre Cv !
Ceci aurait donc déjà plus de chance de fonctionner :
VB:
i = Evaluate("VLookup(" & Cv & ", base_km, 2, false)")
Mais vous devriez typer vos paramètres ByVal Cp As Double, ByVal Cec etc. Là il vous passe inutilement des Range dont vous extrayez des dizaines de fois les Value.

P.S. Cela dit il y a d'autres façons de l'écrire dont celle proposée par Bruno que je salue.
 
Dernière édition:

A4L9

XLDnaute Occasionnel
Re : problème avec fonction personnalisée

bonsoir à vous deux,

merci beaucoup cela fonctionne beaucoup mieux comme ça :) j'aurait du penser à la Range...:eek:

brunoM45: Pourquoi faire un "evaluate"? et bien car je suis très loin d'être au point en vba et mes erreurs ne manque pas ^^
Je pensait qu'"evaluate" était nécessaire pour renvoyer la valeur.

Dranreb: merci pour les précision, j'ai apporté les modifications au code

Merci beaucoup pour votre réactivité et vos réponses qui me permettent de progresser.

bonne soirée à vous deux à bientôt
 

Discussions similaires

Réponses
1
Affichages
1 K

Membres actuellement en ligne

Statistiques des forums

Discussions
312 215
Messages
2 086 329
Membres
103 184
dernier inscrit
Di Martino