Erreur valeur absolue

Will_04 Messages postés 5 Date d'inscription   Statut Membre Dernière intervention   -  
jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention   -
Bonjour,

J'ai un problème avec un code. Je désire faire une écart-type, mais j'ai un problème. À la portion (u - y), il arrive que le y soit plus grand que le u. Donc, ce que je veux faire, c'est que le (u - y) devienne un (y - u), car je ne veux pas de chiffre négatif...

Sub Écart()
Sheets("Données").Select

y = 138.47 'la moyenne
x = 0
u = Cells(i, 2)


For i = 1 To 60
x = Sqr((x + (u - y) ^ 2) / 60)
If u - y < 0 Then Replace u - y = y - u ' ici mon problème..... Ça me dit que j'ai un argument non facultatif

Next i

Sheets("Statistiques").Select
Cells(15, 2) = x
End Sub




4 réponses

f894009 Messages postés 17277 Date d'inscription   Statut Membre Dernière intervention   1 713
 
Bonjour,

If u - y < 0 Then Replace u - y = y - u Sur que ca ne marche pas!!!!!!!!!!!!!!!!!!!!

Expliquez un peu plus ce que vous voulez faire avec ceci:que le (u - y) devienne un (y - u) et surtout a quel endroit

A+
0
Will_04 Messages postés 5 Date d'inscription   Statut Membre Dernière intervention  
 
Le u est dans le fond un résultat X et le y est la moyenne. Il arrive des fois que le u est plus gros que le y. Ce que je veux, c'est qu'au lieu que ça devienne une soustraction, j'aimerais que le résultat s'additionne. Je ne veux pas de donnée négative dans mon calcul...
0
NHenry Messages postés 15219 Date d'inscription   Statut Modérateur Dernière intervention   365
 
D'une manière générale x² que x soit positif ou négatif, le résultat est toujours positif.
0
Will_04 Messages postés 5 Date d'inscription   Statut Membre Dernière intervention  
 
Je sais, sauf qu'en VBA, ça ne semble pas être le cas pour mon ^2.
0
jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention   4 752
 
Bonjour,
Il suffit d'utiliser la fonction ABS ( valeur Absolue..)

Sub Écart()
Sheets("Données").Select

    y = 138.47 'la moyenne
    x = 0
    u = Cells(i, 2)
    For i = 1 To 60
        x = Sqr((x + Abs(u - y)) ^ 2) / 60)
    Next i
Sheets("Statistiques").Cells(15, 2) = x
End Sub


Avant de poser une question, merci de lire la charte du site.
Cordialement, Jordane
0
Will_04 Messages postés 5 Date d'inscription   Statut Membre Dernière intervention  
 
J'ai une erreur de syntaxe quand je marque ceci... J'imagine que la valeur absolue n'est pas correcte.
0
NHenry Messages postés 15219 Date d'inscription   Statut Modérateur Dernière intervention   365
 
Jordane, tu marques :
Sqr((x + Abs(u - y)) ^ 2) / 60)
alors que la formule initiale est :
Sqr((x + (u - y) ^ 2) / 60)

Ce qui n'est pas la même chose, à l'ogine, c'est juste (u-y) qui est au carré, et pas (x+abs(u-y))
Ma remarque précédente est donc valable :
si i=u-y
i² ==abs(i)^2
0
Will_04 Messages postés 5 Date d'inscription   Statut Membre Dernière intervention   > NHenry Messages postés 15219 Date d'inscription   Statut Modérateur Dernière intervention  
 
Ça ne fonctionne pas. On ne peut pas faire d'exposant... En tk, ça ne fonctionne pas.

Bref, ce que je veux faire est une écart-type des 60 données que j'ai dans le sheets «Données» de B1 à B60. Sauf que je ne peux pas prendre la formule de l'écart-type, je dois la faire «à la main».
0
jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention   4 752
 
Bonjour,

Ca fonctionne très bien...
Sauf.. que tu as Mis la récupération de ton U .. en dehors de ta boucle... et donc.. ton I ne s'incrémente jamais..

Tu aurais lancé ta macro en mode pas à pas.. tu l'aurais vu..

Voici le code corrigé


Sub Écart()
Dim Fsource As Worksheet
Dim FResultat As Worksheet
Dim Y As Double
Dim X As Double
Dim U As Double

Set Fsource = Worksheets("Données")
Set FResultat = Worksheets("Statistiques")

    Y = 138.47 'la moyenne
    X = 0
    
    For i = 1 To 60
     U = Fsource.Cells(i, 2)
     X = Sqr((X + (U - Y) ^ 2) / 60)
     'Copie du resultat
      FResultat.Cells(15, 2) = X
    Next i
    

End Sub



Avant de poser une question, merci de lire la charte du site.
Cordialement, Jordane
0