PROBLEME D'ARRONDIES

Résolu
cs_LAURENTE Messages postés 11 Date d'inscription samedi 19 avril 2008 Statut Membre Dernière intervention 25 avril 2008 - 19 avril 2008 à 14:31
cs_LAURENTE Messages postés 11 Date d'inscription samedi 19 avril 2008 Statut Membre Dernière intervention 25 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")



  LambdaMax = Lambdaz / Lambday
  LambdaMax = format(LambdaMax,"0.0")
  
If LambdaMax=1.0 Then
KSI=0.5525
End If



If LambdaMax=0.8 Then
KSI=0.4444
End If



MsgBox(KSI)



END SUB


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...

Merci d'avance !

13 réponses

cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 40
20 avril 2008 à 15:47
Zut, j'ai oublier de poster d'autres correctif que j'avais vu aussi, DSL

Option ExplicitDim Lambdaz as double
Dim Lambday as double
Dim LambdaMax as double
Dim KSI as double

Sub KSICALCUL

Lambdaz= CDec(Inputbox("Entrez Lambdaz"))
Lambday=CDec(Inputbox("Entrez Lambday"))

  LambdaMax = Lambdaz / Lambday
  LambdaMax = CDec(format(LambdaMax,"0.0"))
  
If LambdaMax=1.0 Then
KSI=0.5525
End If

If LambdaMax=0.8 Then
KSI=0.4444
End If

MsgBox(KSI)

END SUB

Avec ça chez moi ça marchait nickel sous OOO

---- Sevyc64  (alias Casy) ---- <hr size ="2" width="100%" /># LE PARTAGE EST NOTRE FORCE #    http://aide-office-vba.monforum.com/index.php
3
cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 40
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 ?

---- Sevyc64  (alias Casy) ----<hr size="2" width="100%" /># LE PARTAGE EST NOTRE FORCE #    http://aide-office-vba.monforum.com/index.php
0
bigfish_le vrai Messages postés 1835 Date d'inscription vendredi 13 mai 2005 Statut Membre Dernière intervention 20 novembre 2013 13
19 avril 2008 à 15:24
Salut,

je confirme que cela marche aussi de mon coté.
0
PCPT Messages postés 13280 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 49
19 avril 2008 à 16:14
salut,

dans ce cas çà sent le SP6 manquant...
http://logiciel.codes-sources.com/logiciels/Service-Pack-pour-Visual-Basic-6-0---SP-144.aspx

++
<hr size="2" width="100%" />Prenez un instant pour répondre à [infomsg_SONDAGE-POP3-POUR-CS_769706.aspx ce sondage] svp
0

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

Posez votre question
jmfmarques Messages postés 7668 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 28
19 avril 2008 à 16:23
Je confirme également...


 


Et je ne parviens à un 0 qu'en faisant ainsi :



Option Explicit



Dim Lambdaz As Double
Dim Lambday As Double
Dim LambdaMax As Double
Dim KSI As Double



Sub KSICALCUL()
  On Error Resume Next
  Lambdaz = InputBox("Entrez la valeur Lambdaz")
  Lambday = InputBox("Entrez la valeur Lambday")
  LambdaMax = Lambdaz / Lambday
  LambdaMax = Format(LambdaMax, "0.0")
 
  If LambdaMax = 1# Then
    KSI = 0.5525
  End If



  If LambdaMax = 1.7 Then
    KSI = 0.4444
  End If



 
If LambdaMax = 0 Then
   KSI = 0
 End If



 MsgBox KSI



End Sub





Private Sub Command1_Click()
  KSICALCUL
End Sub



et en me servant du point comme séparateur décimal dans l'une des deux saisies

Voir mes rajouts en rouge ===>> et le "dernier qui parle" a alors raison
0
cs_LAURENTE Messages postés 11 Date d'inscription samedi 19 avril 2008 Statut Membre Dernière intervention 25 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...
0
PCPT Messages postés 13280 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 49
19 avril 2008 à 20:44
VBA 6.0 ?
umm... pas dans ce monde ^^
VB 6.0, VBA 6.3 ...

comment a-t'on pu se tromper?
simple, tu fais une macro (donc VBA) sous OOO (Open Office (.Org)) et as posté ton topic sous VB6

<hr size="2" width="100%" />Prenez un instant pour répondre à [infomsg_SONDAGE-POP3-POUR-CS_769706.aspx ce sondage] svp
0
cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 40
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.

---- Sevyc64  (alias Casy) ----<hr size="2" width="100%" /># LE PARTAGE EST NOTRE FORCE #    http://aide-office-vba.monforum.com/index.php
0
cs_LAURENTE Messages postés 11 Date d'inscription samedi 19 avril 2008 Statut Membre Dernière intervention 25 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



Sub KSICALCUL



Lambdaz =Inputbox("Entrez Lambdaz")
Lambday=Inputbox("Entrez Lambday")



  LambdaMax = Lambdaz / Lambday
  LambdaMax = format(LambdaMax,"0.0")
  
If LambdaMax=1.0 Then
KSI=0.5525
End If



If LambdaMax=0.8 Then
KSI=0.4444
End If



MsgBox(KSI)



END SUB
0
PCPT Messages postés 13280 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 49
20 avril 2008 à 14:38
et comme çà çà donne quoi :

Dim Lambdaz As Double
Dim Lambday As Double
Dim LambdaMax As Double
Dim KSI As Double

Sub KSICALCUL()
    Lambdaz# = InputBox("Entrez Lambdaz")
    Lambday# = InputBox("Entrez Lambday")

    LambdaMax# = Format((Lambdaz / Lambday),
"0.0")
  
    If LambdaMax# = 1# Then
        KSI# = 0.5525
    ElseIf LambdaMax# = 0.8 Then
        KSI# = 0.4444
    Else
        MsgBox "LambdaMax : " & LambdaMax
        Exit Sub
    End If
    
    MsgBox KSI
End Sub

<hr size="2" width="100%" />Prenez un instant pour répondre à [infomsg_SONDAGE-POP3-POUR-CS_769706.aspx ce sondage] svp
0
PCPT Messages postés 13280 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 49
20 avril 2008 à 14:39
***



LambdaMax# = 
Format
((Lambdaz# / Lambday#),
"0.0"
)
0
cs_LAURENTE Messages postés 11 Date d'inscription samedi 19 avril 2008 Statut Membre Dernière intervention 25 avril 2008
20 avril 2008 à 15:02
Idem, pour LambdaMax = 1.0, bonne valeur, mais pour LambdaMax = 0.8, KSI =0.


Peut-être qu'il y a une autre méthode pour arrondir au dixième, au lieu d'utiliser  LambdaMax = format(LambdaMax,"0.0"), qui ne marche pas terrible...

Pfffffff.... (Soupir)


 
0
cs_LAURENTE Messages postés 11 Date d'inscription samedi 19 avril 2008 Statut Membre Dernière intervention 25 avril 2008
20 avril 2008 à 16:17
t 'es mon dieu ...
0