Division par zero vb [Résolu]

- - Dernière réponse :  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
Afficher la suite 

Votre réponse

16 réponses

Meilleure réponse
3
Merci
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 : ×

Merci Zermelo 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 101 internautes ce mois-ci

Commenter la réponse de Zermelo
3
Merci
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....

Merci khadykhady 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 101 internautes ce mois-ci

Commenter la réponse de khadykhady
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Contributeur
Dernière intervention
11 avril 2018
3
Merci
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.

Merci ucfoutu 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 101 internautes ce mois-ci

Commenter la réponse de ucfoutu
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Contributeur
Dernière intervention
11 avril 2018
3
Merci
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.

Merci ucfoutu 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 101 internautes ce mois-ci

Commenter la réponse de ucfoutu
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Contributeur
Dernière intervention
11 avril 2018
3
Merci
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.

Merci ucfoutu 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 101 internautes ce mois-ci

Commenter la réponse de ucfoutu
3
Merci
Après un debug pas à pas détaillé, l'erreur est signalée à la ligne
vitesse = (3.6 * Result) / 1000 ....

Merci khadykhady 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 101 internautes ce mois-ci

Commenter la réponse de khadykhady
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Contributeur
Dernière intervention
11 avril 2018
3
Merci
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.

Merci ucfoutu 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 101 internautes ce mois-ci

Commenter la réponse de ucfoutu
3
Merci
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

Merci khadykhady 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 101 internautes ce mois-ci

Commenter la réponse de khadykhady
0
Merci
En fait c'est une erreur de copier coller et c'est plutot
vitesse = (3.6 * Result) / 1000
Commenter la réponse de khadykhady
0
Merci
et il n'y a aucune division dans le code
Commenter la réponse de khadykhady
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Contributeur
Dernière intervention
11 avril 2018
0
Merci
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.
Commenter la réponse de ucfoutu
Commenter la réponse de khadykhady
Commenter la réponse de khadykhady
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Contributeur
Dernière intervention
11 avril 2018
0
Merci
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.
Commenter la réponse de ucfoutu
0
Merci
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
Commenter la réponse de khadykhady
0
Merci
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.....
Commenter la réponse de khadykhady

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.