Division par zero vb

Résolu
khadykhady - 3 mai 2013 à 09:04
 khadykhady - 3 mai 2013 à 13:39
Bonjour, je travaille avec visual basic et lorsque j'execute mon programme j'ai l'erreur "division par zero" alors que je ne fais même pas de division.
Cela serait il du à l'utilisation de la dll
Mon code est le suivant:

Private Declare Function c_vitesse Lib "madll" (ByRef offset As Double, ByRef targetOffset As Double, ByRef maxSpeed As Double, ByRef v_CFG_PARAM As CFG_PARAM, ByRef v_MODEL_PARAM As MODEL_PARAM) As Long

Function vitesse(offset As Double, targetOffset As Double, maxSpeed As Double, source As Long, ByVal index_train As Integer) As Long
Dim v_MODEL_PARAM As MODEL_PARAM
Dim v_CFG_PARAM As CFG_PARAM
Dim Result As Long

GetParamData v_MODEL_PARAM, v_CFG_PARAM, index_train


Result = c_vitesse (offset, targetOffset, maxSpeed, v_CFG_PARAM, v_MODEL_PARAM)

c_vitesse = (3.6 * Result) / 1000
End Function

Merci d'avance

16 réponses

Bonjour Khady.

Une première remarque : vous faites une division dans l'instruction
c_vitesse = (3.6 * Result) / 1000

Mais une telle division ne peut engendrer le message d'erreur que vous mentionnez.
Avant de continuer, je mets votre code en coloration syntaxique, ce que vous auriez dû faire.
Private Declare Function c_vitesse Lib "madll" (ByRef offset As Double, ByRef targetOffset As Double, ByRef maxSpeed As Double, ByRef v_CFG_PARAM As CFG_PARAM, ByRef v_MODEL_PARAM As MODEL_PARAM) As Long

Function vitesse(offset As Double, targetOffset As Double, maxSpeed As Double, source As Long, ByVal index_train As Integer) As Long
Dim v_MODEL_PARAM As MODEL_PARAM
Dim v_CFG_PARAM As CFG_PARAM
Dim Result As Long

GetParamData v_MODEL_PARAM, v_CFG_PARAM, index_train


Result = c_vitesse (offset, targetOffset, maxSpeed, v_CFG_PARAM, v_MODEL_PARAM)

c_vitesse = (3.6 * Result) / 1000
End Function

La fonction donnée par votre DLL effectue un calcul de vitesse. Il est donc extrêmement probable qu'elle procède à la division d'un intervalle de position par un intervalle de temps. Pour en dire plus, je vous demande de fournir, traduite en français, la documentation de cette DLL.

Cordialement.



Étant illettré, je signe d'une croix : ×
3
Bonjour,

merci d'avoir prêté attention au message. En effet, il s'agit bien d'un calcul de vitesse mais celui ci est basé sur un calcul de différence de vitesse. Il n'est donc pas question de division.
J'ai testé ce programme à l'aide d'une macro vb sur Excel il n'y a pas eu de problème.
A présent, je souhaite l'intégrer à une application et là je ne comprends pas vraiment pas....
3
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
3 mai 2013 à 10:14
Bonjour,
comment peut-on écrire à la fois :
Private Declare Function c_vitesse Lib "madll" (ByRef offset As Double, ByRef targetOffset As Double, ByRef maxSpeed As Double, ByRef v_CFG_PARAM As CFG_PARAM, ByRef v_MODEL_PARAM As MODEL_PARAM) As Long

et
c_vitesse = (3.6 * Result) / 1000


Trop, c'est trop ! Tu démontres ici ton incompréhension totale de ce qu'est l'utilisation d'une fonction d'une librairie.

________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviendrai que si nécessité de la compléter.
3
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
3 mai 2013 à 10:17
Et ma remarque est totalement indépendante du message d'erreur reçu


________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviendrai que si nécessité de la compléter.
3

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
3 mai 2013 à 10:26
Et il ne serait de surcroît pas surprenant (très probable, même) que la division par 0 dénoncée arrive plus loin dans ton code... car ... devine quoi ? ta fonction vitesse, TELLE QU'ECRITE, mot pour mot, signe pour signe, ne peut que retourner la valeur ... 0 . Et si, donc, tu divises par vitesse plus loin, ma foi ...


________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviendrai que si nécessité de la compléter.
3
Après un debug pas à pas détaillé, l'erreur est signalée à la ligne
vitesse = (3.6 * Result) / 1000 ....
3
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
3 mai 2013 à 11:36
Et remets ici ton code par un vrai copier/coller, s'il te plait, de sorte à ne pas nous faire travailler sur du "possiblement différent"


________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviendrai que si nécessité de la compléter.
3
Function vitesse(offset As Double, targetOffset As Double, maxSpeed As Double, source As Long, ByVal index_train As Integer) As Long
Dim v_MODEL_PARAM As MODEL_PARAM
Dim v_CFG_PARAM As CFG_PARAM
Dim result As Long
Dim i As Integer

GetParamData v_MODEL_PARAM, v_CFG_PARAM, index_train
For i = 0 To 1000
Next i

result = c_vitesse(offset, targetOffset, maxSpeed, v_CFG_PARAM, v_MODEL_PARAM)
vitesse = (3.6 * result) / 1000#
End Function
3
En fait c'est une erreur de copier coller et c'est plutot
vitesse = (3.6 * Result) / 1000
0
et il n'y a aucune division dans le code
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
3 mai 2013 à 11:34
En fait c'est une erreur de copier coller

Ce n'était donc certainement pas un COPIER-COLLER !!! Et l'est TOUJOURS un copier-coller, qu'il faut faire.
Cette ligne là ne saurait être responsable de l'erreur dénoncée !
Que vaut à ce moment-là Result ? (en mode debug) ?
________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviendrai que si nécessité de la compléter.
0
result = 24310
0
result = 24310
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
3 mai 2013 à 13:31
Je ne vais pas perdre mon temps indéfiniment , ami
Et remets ici ton code par un vrai copier/coller

ce qui ne risque pas d'être le cas dans ce que tu montres maintenant !
Alors : fais-en à ta tête, si tu veux, mais sans moi.
________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviendrai que si nécessité de la compléter.
0
Function vitesse(offset As Double, targetOffset As Double, maxSpeed As Double, source As Long, ByVal index_train As Integer) As Long
Dim v_MODEL_PARAM As MODEL_PARAM
Dim v_CFG_PARAM As CFG_PARAM
Dim result As Long
Dim i As Integer

GetParamData v_MODEL_PARAM, v_CFG_PARAM, index_train
For i = 0 To 1000
Next i

result = c_vitesse(offset, targetOffset, maxSpeed, v_CFG_PARAM, v_MODEL_PARAM)
vitesse = (3.6 * result) / 1000#
End Function
0
Le souci vient de la division par 1000 en effet en mettant
vitesse = (3.6 * result)
au lieu de
vitesse = (3.6 * result) / 1000#
Il n'y a plus d'erreur.....
0
Rejoignez-nous