PROBLEME D'ARRONDIES

Résolu
Signaler
Messages postés
11
Date d'inscription
samedi 19 avril 2008
Statut
Membre
Dernière intervention
25 avril 2008
-
Messages postés
11
Date d'inscription
samedi 19 avril 2008
Statut
Membre
Dernière intervention
25 avril 2008
-
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

Messages postés
7741
Date d'inscription
mercredi 1 septembre 2004
Statut
Membre
Dernière intervention
24 septembre 2014
41
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
Messages postés
7741
Date d'inscription
mercredi 1 septembre 2004
Statut
Membre
Dernière intervention
24 septembre 2014
41
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
Messages postés
1835
Date d'inscription
vendredi 13 mai 2005
Statut
Membre
Dernière intervention
20 novembre 2013
11
Salut,

je confirme que cela marche aussi de mon coté.
Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
47
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
Messages postés
7668
Date d'inscription
samedi 5 novembre 2005
Statut
Membre
Dernière intervention
22 août 2014
27
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
Messages postés
11
Date d'inscription
samedi 19 avril 2008
Statut
Membre
Dernière intervention
25 avril 2008

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...
Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
47
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
Messages postés
7741
Date d'inscription
mercredi 1 septembre 2004
Statut
Membre
Dernière intervention
24 septembre 2014
41
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
Messages postés
11
Date d'inscription
samedi 19 avril 2008
Statut
Membre
Dernière intervention
25 avril 2008

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
Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
47
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
Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
47
***



LambdaMax# = 
Format
((Lambdaz# / Lambday#),
"0.0"
)
Messages postés
11
Date d'inscription
samedi 19 avril 2008
Statut
Membre
Dernière intervention
25 avril 2008

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)


 
Messages postés
11
Date d'inscription
samedi 19 avril 2008
Statut
Membre
Dernière intervention
25 avril 2008

t 'es mon dieu ...