Salut tout le monde (premier post youhou )
je me suis lancé au vba, et bien m'en a pris car c'est très pratique. Toutefois je bute sur un truc...assez curieux...
Vla le problème : j'ai construit une macro (ou plutôt je suis allé la chercher sur ce forum pour la modifier) afin de calculer une variance et j'ai des résultats un peu foufous, comme des variances négatives...en exécutant pas à pas j'ai vu qu'elle sortait n'importe quoi dans le calcul de ety1, alors qu'ety2 est juste (je l'ai vérifié sur des exemples simples) qu'en plus elles ont les mêmes variables d'entrée (ou paramètres, je connais pas le nom exact ) et que les formules me semblent tout à fait correctes !!!
Voici le code (mais encore une fois, ce qui cloche c'est au niveau du calcul d'ety1 et je l'ai vérifié mille fois...) :
Par exemple sur une ligne j'ai TabTemp(compt2, 15) = 2 et TabTemp(compt2, 16) = 0,5 j'obtiens ety2 = 1 mais ety1 = 0 (au lieu de 0,5) et je sais pas pourquoi... surtout que le reste du code semble bon (du moins les résultats 'intermédiaires' sont cohérents)
si quelqu'un a une idée (j'ai déjà essayé de changer l'ordre des lignes de codes, de recopier les colonnes de paramètres dans de nouvelles colonnes mais toujours le même résultat
A votre bon coeur!
je me suis lancé au vba, et bien m'en a pris car c'est très pratique. Toutefois je bute sur un truc...assez curieux...
Vla le problème : j'ai construit une macro (ou plutôt je suis allé la chercher sur ce forum pour la modifier) afin de calculer une variance et j'ai des résultats un peu foufous, comme des variances négatives...en exécutant pas à pas j'ai vu qu'elle sortait n'importe quoi dans le calcul de ety1, alors qu'ety2 est juste (je l'ai vérifié sur des exemples simples) qu'en plus elles ont les mêmes variables d'entrée (ou paramètres, je connais pas le nom exact
Voici le code (mais encore une fois, ce qui cloche c'est au niveau du calcul d'ety1 et je l'ai vérifié mille fois...) :
Code:
Sub Standardaweichung()
Dim TabTemp As Variant
Dim TabVariance As Variant
Dim TabIndice As Variant
Dim Maxi As Long, compt As Long, compt2 As Long, compt3 As Long, Num As Long, ety1 As Long, ety2 As Long, Proba As Long
'Charge les données dans un tableau variant temporaire
'On considère ici 18 colonnes (17 valeurs + 1 pour marquer les lignes déjà parcourues)
With Sheets("Sheet1")
Maxi = .Range("A65536").End(xlUp).Row
TabTemp = .Range(.Cells(1, 1), .Cells(Maxi, 18)).Value
End With
ReDim TabVariance(1 To Maxi, 1 To 4)
ReDim TabIndice(1 To 12, 1 To 1)
'Pour chaque ligne du tableau en partant de la seconde (permiere=titre)
For compt = 2 To Maxi
'Si la ligne n'est pas "topée" on lance la procédure de calcul en initialisant les variables
If Not TabTemp(compt, 18) Then
Num = 1
TabIndice(Num, 1) = compt
ety1 = TabTemp(compt, 15) * TabTemp(compt, 16) ^ 2
ety2 = TabTemp(compt, 15) * TabTemp(compt, 16)
Proba = TabTemp(compt, 15)
'Pour les lignes qui suivent et jusqu'à la fin on repère les input egaux (colonnes 2 à 5)
For compt2 = compt + 1 To Maxi
'Si trouve une correspondance d'identité on actualise les variables
If TabTemp(compt2, 2) = TabTemp(compt, 2) Then
If TabTemp(compt2, 3) = TabTemp(compt, 3) Then
If TabTemp(compt2, 4) = TabTemp(compt, 4) Then
If TabTemp(compt2, 5) = TabTemp(compt, 5) Then
Num = Num + 1
TabIndice(Num, 1) = compt2
ety1 = ety1 + TabTemp(compt2, 15) * TabTemp(compt2, 16) ^ 2
ety2 = ety2 + TabTemp(compt2, 15) * TabTemp(compt2, 16)
Proba = Proba + TabTemp(compt2, 15)
'on "tope" la ligne
TabTemp(compt2, 18) = True
End If
End If
End If
End If
Next compt2
'on place cette valeur sur toutes les lignes correspondantes grâce au tableau d'indices
For compt3 = 1 To Num
TabVariance(TabIndice(compt3, 1), 1) = (ety1 / Proba - (ety2 / Proba) ^ 2)
TabVariance(TabIndice(compt3, 1), 2) = ety1
TabVariance(TabIndice(compt3, 1), 3) = ety2
TabVariance(TabIndice(compt3, 1), 4) = Proba
Next compt3
End If
Next compt
'affichage du resultats
Range(Cells(1, 19), Cells(Maxi, 22)).Value = TabVariance
End Sub
Par exemple sur une ligne j'ai TabTemp(compt2, 15) = 2 et TabTemp(compt2, 16) = 0,5 j'obtiens ety2 = 1 mais ety1 = 0 (au lieu de 0,5) et je sais pas pourquoi... surtout que le reste du code semble bon (du moins les résultats 'intermédiaires' sont cohérents)
si quelqu'un a une idée (j'ai déjà essayé de changer l'ordre des lignes de codes, de recopier les colonnes de paramètres dans de nouvelles colonnes mais toujours le même résultat
A votre bon coeur!