Erreur valeur absolue

Fermé
Will_04 Messages postés 5 Date d'inscription vendredi 19 décembre 2014 Statut Membre Dernière intervention 22 décembre 2014 - 22 déc. 2014 à 00:40
jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 - 23 déc. 2014 à 09:39
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 17185 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 15 avril 2024 1 701
22 déc. 2014 à 09:26
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 vendredi 19 décembre 2014 Statut Membre Dernière intervention 22 décembre 2014
22 déc. 2014 à 19:06
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 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 331
22 déc. 2014 à 09:32
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 vendredi 19 décembre 2014 Statut Membre Dernière intervention 22 décembre 2014
22 déc. 2014 à 19:04
Je sais, sauf qu'en VBA, ça ne semble pas être le cas pour mon ^2.
0
jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 4 650
Modifié par jordane45 le 22/12/2014 à 10:51
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 vendredi 19 décembre 2014 Statut Membre Dernière intervention 22 décembre 2014
22 déc. 2014 à 19:04
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 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 331
Modifié par NHenry le 22/12/2014 à 19:18
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 vendredi 19 décembre 2014 Statut Membre Dernière intervention 22 décembre 2014 > NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024
22 déc. 2014 à 19:53
Ç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 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 4 650
Modifié par jordane45 le 23/12/2014 à 17:28
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