cs_LAURENTE
Messages postés11Date d'inscriptionsamedi 19 avril 2008StatutMembreDernière intervention25 avril 2008
-
19 avril 2008 à 14:31
cs_LAURENTE
Messages postés11Date d'inscriptionsamedi 19 avril 2008StatutMembreDernière intervention25 avril 2008
-
20 avril 2008 à 16:17
Bonjour à tous,
Voici le petit programme me posant problème :
Option Explicit
Dim Lambdaz as double
Dim Lambday as double
Dim LambdaMax
Dim KSI as double
Sub KSICALCUL
Lambdaz= Inputbox("Entrez la valeur Lambdaz")
Lambday=Inputbox("Entrez la valeur Lambday")
Mon problème est que quand Lambdamax = 0.8, la msgbox m'affiche bien 0.4444 mais quand LambdaMax=1.0, la msgbox m'affiche 0 (au lieu de 0.5525).
Je ne comprend vraiment pas, surtout que si je fais msgbox(LambdaMax), il m'affiche bien 1.0 !!!
D'ou vient le problème ? Une semaine que je retourne le problème dans tout les sens, rien à faire ...
Il me semble que la ligne LambdaMax = format(LambdaMax,"0.0") fonctionne bien puisqu'elle m'arrondi les valeurs au dixième.
Si quelqu'un peut me donner un coup de main, ce serait vraiment sympa...
cs_casy
Messages postés7741Date d'inscriptionmercredi 1 septembre 2004StatutMembreDernière intervention24 septembre 201440 19 avril 2008 à 14:47
Es-tu que ton problème viens de ce bout de code? chez moi ça marche apparement.
Tes variables sont déclarées comme variables globales, tu n'aurais pas un autre bout de code ailleurs qui viendrait sournoisement te modifier la valeur de KSI ?
cs_LAURENTE
Messages postés11Date d'inscriptionsamedi 19 avril 2008StatutMembreDernière intervention25 avril 2008 19 avril 2008 à 20:06
PCPT, SP 6 manquant ? je travaille avec la dernière version de Open office, c'est à dire la 2.3. Je programme ensuite à partir de Calc... Ca correspond à VBA 6.0? J'avoue que je suis un peu perdu...
JMFMARQUES pour avoir recopié ton programme, pour n'importe quelle valeur de Lambdamax, il m'affiche 0.5525 du coup...
Quelle m...... Je vais péter un boulon! Merci de m'aider, vraiment...
cs_casy
Messages postés7741Date d'inscriptionmercredi 1 septembre 2004StatutMembreDernière intervention24 septembre 201440 19 avril 2008 à 21:30
Donc après quelques petits test sous OOO, ce dernier semble très suceptible avec les variables.
En reprenant le code de notre ami, LambdaMax qui n'est pas typé (donc de type variant) est tout d'abords un variant de type Double lors de la division.
Ensuite il devient un variant de type String lors du format, perd du coup toute notion de décimale dans le cas ou il vaut 1.0
Ce qui fait que lors du test suivant, ce qui s'opère aparement c'est une string contenant "1" qui est comparé à un Double valant 1.0. Donc le test n'est jamais bon.
La différence avec VB6, c'est qu'une variable de type variant prend un type lors de sa première affectation (ici donc un double) mais n'en change plus durant tout sa durée de vie. D'où le fonctionement du code en VB6
Donc ici pour résoudre le problème il suffit de typer la variable à la déclaration.
Dim LambdaMax As Double Chose qu'il faut d'ailleurs prendre l'habitude de faire systématiquement.
cs_LAURENTE
Messages postés11Date d'inscriptionsamedi 19 avril 2008StatutMembreDernière intervention25 avril 2008 20 avril 2008 à 14:11
Je veux bien mais avec Dim LambdaMax as double comme dans le programme qui suit, il m'affiche la bonne valeur pour LambdaMax = 1.0, mais pour LambdaMax=0.8, j'ai droit à un joli zéro!!!! A n'y rien comprendre...
Option Explicit
Dim Lambdaz as double
Dim Lambday as double
Dim LambdaMax as double
Dim KSI as double