Erreur valeur absolue

Will_04 Messages postés 5 Date d'inscription   Statut Membre Dernière intervention   -  
jordane45 Messages postés 30426 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

  1. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717
     
    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
    1. 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
  2. NHenry Messages postés 15235 Date d'inscription   Statut Modérateur Dernière intervention   387
     
    D'une manière générale x² que x soit positif ou négatif, le résultat est toujours positif.
    0
    1. 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
  3. jordane45 Messages postés 30426 Date d'inscription   Statut Modérateur Dernière intervention   4 830
     
    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
    1. 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
    2. NHenry Messages postés 15235 Date d'inscription   Statut Modérateur Dernière intervention   387
       
      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
      1. Will_04 Messages postés 5 Date d'inscription   Statut Membre Dernière intervention   > NHenry Messages postés 15235 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
  4. jordane45 Messages postés 30426 Date d'inscription   Statut Modérateur Dernière intervention   4 830
     
    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