Division par zero vb [Résolu]

Signaler
-
 khadykhady -
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 : ×
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....
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
237
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.
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
237
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.
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
237
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.
Après un debug pas à pas détaillé, l'erreur est signalée à la ligne
vitesse = (3.6 * Result) / 1000 ....
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
237
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.
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
En fait c'est une erreur de copier coller et c'est plutot
vitesse = (3.6 * Result) / 1000
et il n'y a aucune division dans le code
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
237
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.
result = 24310
result = 24310
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
237
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.
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
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.....