problème avec fonction personnalisée

  • Initiateur de la discussion Initiateur de la discussion A4L9
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

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

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+
 
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:
Re : problème avec fonction personnalisée

bonsoir à vous deux,

merci beaucoup cela fonctionne beaucoup mieux comme ça 🙂 j'aurait du penser à la Range...😱

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
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
4
Affichages
177
Réponses
7
Affichages
163
Réponses
33
Affichages
3 K
  • Question Question
Microsoft 365 VBA sur outlook
Réponses
14
Affichages
1 K
Réponses
11
Affichages
996
Réponses
7
Affichages
619
Retour