VB Problème chiffre après la virgule

Résolu/Fermé
spoucboss - 20 mars 2008 à 18:13
 spoucboss - 20 mars 2008 à 19:27
Bonjour à tous,

voila mon problème:
j'ai créé un programme avec Access sur différent calcul de moyenne, de variance....
mon programme affiche des fenêtres dans lesquelles on demande de rentrer un effectif, une moyenne puis une variance.
Le problème est que lorsque l'on rentre une valeur a virgule comme 2,36 par exemple
dans ma fenètre d'exécution il n'affiche que 2,00 ou si la valeur rentrée était 2,85 la fenètre d'exécution affichera 3,00
et en plus de cela, les calculs se font avec l'arrondie et pas la valeur initiale...
si quelqu'un peut m'aider je lui serai très reconnaissant
merci d'avance

voici mon VB:

Private Sub exercice3()
Dim T(1 To 51, 1 To 6) As Single
Dim P(1 To 6) As Integer
Dim L As Integer
Dim C As Integer
Dim N As Integer
Dim M As Integer
Dim S As Integer
Dim Nb As Integer
Dim MS As Single
Dim SM As Single
Dim SMM As Single
Dim A As Single
Dim Z As String
Dim Flag_OK As Boolean

L = 0
Z = "Série n° 0"
P(1) = 17
P(2) = 35
P(3) = 53
P(4) = 71
P(5) = 90
P(6) = 110


Do
Z = Left(Z, 8)
Z = Z & (L + 1)
L = L + 1
Flag_OK = False
Do While Not Flag_OK
N = InputBox("Entrez un effectif (0 pour arrêt)", Z, "effectif", 0, 0)
If N < 0 Then MsgBox "Pas d'effectif négatif"
If N >= 0 Then Flag_OK = True
Loop

If N > 0 Then
T(L, 1) = N
M = InputBox("Entrez la moyenne de cet effectif", Z, "moyenne", 0, 0)
T(L, 2) = M
Do
S = InputBox("Entrez la variance de cet effectif ", Z, "variance", 0, 0)
T(L, 4) = S
Loop Until S > 0
End If
If N = 0 Then
If L <= 5 Then
MsgBox "nombre de séries insuffisant"
Else
Exit Do
End If
End If

Loop Until L = 50
Nb = L - 1

' initialisation de la ligne des cumuls

For C = 1 To 6
T(51, C) = 0
Next C

' calcul de A

For L = 1 To Nb
T(L, 3) = T(L, 1) * T(L, 2)
T(51, 1) = T(51, 1) + T(L, 1)
T(51, 2) = T(51, 2) + T(L, 2)
T(51, 3) = T(51, 3) + T(L, 3)
T(51, 4) = T(51, 4) + T(L, 4)

Next L

A = T(51, 3) / T(51, 1)

'calcul de différente colonnes du tableau

For L = 1 To Nb
T(L, 5) = T(L, 4) * T(L, 1)
T(L, 6) = T(L, 1) * (T(L, 2) - A) * (T(L, 2) - A)
T(51, 5) = T(51, 5) + T(L, 5)
T(51, 6) = T(51, 6) + T(L, 6)
Next L

'calcul des paramètres

MS = T(51, 5) / T(51, 1)
SM = T(51, 6) / T(51, 1)
SMM = SM + MS

' edition du tableau

Debug.Print "N° |"; "Effectif |"; "Moyenne |"; "Effectif*moyenne |"; "Variance |"; "Effectif*Variance |"; "ni*(mi-A)² |"
Debug.Print " |"; "ni |"; "mi |"; "ni*mi |"; "s²i |"; "ni*s²i |"; " |"


For L = 1 To Nb
Debug.Print L;
For C = 1 To 6
Debug.Print Tab(P(C)); Format$(T(L, C), "### ##0.00");
Next C
Debug.Print
Next L

Debug.Print "Total ",
For C = 1 To 6
Debug.Print Tab(P(C)); Format$(T(51, C), "### ##0.00");
Next C
Debug.Print
Debug.Print "----------------------------------------------------------------------------------------------------------------------",
Debug.Print
Debug.Print "moyenne du mélange = ", Format(A, "### ##0.00")
Debug.Print "moyenne de la série des variances = ", Format(MS, "### ##0.00")
Debug.Print "variance de la série des moyenne = ", Format(SM, "### ##0.00")
Debug.Print "variance du mélange = ", Format(SMM, "### ##0.00")


End Sub
A voir également:

2 réponses

Ivan-hoe Messages postés 433 Date d'inscription dimanche 17 février 2008 Statut Membre Dernière intervention 17 octobre 2008 309
20 mars 2008 à 19:11
Salut Spoucboss,
j'ai l'impression que c'est un problème de déclaration de type de variable : ta moyenne M et ta variance S sont déclarées comme Integer = NOMBRE ENTIER
Essaie voir avec Long, par exemple....
I.
1
avec long ça ne marchait pas mais en mettant Currency cela fonctionne
merci beaucoup
0
panga-panga
20 mars 2008 à 19:18
il y a 1 erreurs(a mon gout)..je ne suis k1 amateur

1/ inputbox te renvoie 1e STRING!!je pensse k tu devrais metre n en string et apres utiliser la fonction VAL pour la traduir en 1 SINGLE..
T(l,1)=val(n)
1