Simple calcul qui bug en VBA

Résolu/Fermé
Jack - 28 août 2012 à 11:59
 Jack - 28 août 2012 à 14:12
Bonjour,

J'ai une macro qui effectue des calculs et me stocke les résultats dans 3 tableaux, ensuite je somme pour chacun de ces tableaux tous les éléments entre eux et j'affiche le total. Pour le tableau 1 et 2 pas de problème mais pour le 3, je ne sais pas pourquoi ça affiche 0.
Voici le fichier test: http://cjoint.com/?3HCl53TYWod

Merci d'avance


A voir également:

3 réponses

eriiic Messages postés 24569 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 28 décembre 2023 7 211
28 août 2012 à 12:12
Bonjour,

C'est par fatigue que tu ne donnes aucun détail ou c'est parce que tu préfères que personne ne regarde ?

eric
0
Bonjour eriiic,

C'est vrai que j'ai ete un peu succint, la fatigue doit y etre pour quelque chose^^
Voici le programme:

Sub BestMethod()

Dim shList As Worksheet
Dim line_insertion, e1, e2, e3 As Long
Dim tab_bd
Dim err1
Dim err2
Dim err3

Set shList = Workbooks("ex.xlsm").Worksheets("List")

shList.Activate

e1 = 0
e2 = 0
e3 = 0
line_insertion = 0
ReDim tab_bd(0)


'Enregistrement des numeros de lignes des SubCategory
For i = 3 To [b3].End(xlDown).Row
If Cells(i, 1) <> "" Then
ReDim Preserve tab_bd(line_insertion)
tab_bd(line_insertion) = Cells(i, 1).Row
line_insertion = line_insertion + 1
End If
Next i


For i = 0 To UBound(tab_bd) - 1
ReDim err1(0)
ReDim err2(0)
ReDim err3(0)
line_insertion = 0
For j = tab_bd(i) To tab_bd(i + 1) - 1
If Cells(j, 6) <> "" Then
ReDim Preserve err1(line_insertion)
ReDim Preserve err2(line_insertion)
ReDim Preserve err3(line_insertion)
err1(line_insertion) = (Cells(j, 6) - Cells(j, 3)) ^ 2 / 2
err2(line_insertion) = (Cells(j, 6) - Cells(j, 4)) ^ 2 / 2
err3(line_insertion) = (Cells(j, 6) - Cells(j, 5)) ^ 2 / 2
line_insertion = line_insertion + 1
End If
Next j

For k = 0 To UBound(err1)
e1 = e1 + err1(k)
e2 = e2 + err2(k)
e3 = e3 + err3(k)
Next k
MsgBox e1 & " " & e2 & " " & e3

Next i


End Sub

Les 3 tableaux dont je parlais précédemment sont err1, err2 et err3. Pour chaque ligne de mon tableur, j'effectue 3 calculs du type (a-b)^2/2 dont j'enregistre le résultat dans les 3 tableaux dynamiques précédent.
Ensuite, pour chaque tableau je somme tous les termes et j'affiche les 3 résultats (e1, e2 et e3).
ça marche très bien sauf pour e3 qui est égal a 0 alors qu'il devrait être égal a 0.0212.
Voila le problème.

J'espère avoir été assez clair.

PS: pour tout ce qui concerne la partie avec tab_bd, c'est simplement pour parcourir toute ma liste car dans le fichier originale je suis obligé de procéder ainsi.
0
eriiic Messages postés 24569 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 28 décembre 2023 7 211
Modifié par eriiic le 28/08/2012 à 13:55
Re,

Dim line_insertion, e1, e2, e3 As Long

Seul e3 est déclaré As Long, les autres sont Variant (c'est pour ça qu'ils fonctionnent).
Tu dois déclarer ces variables As Double (décimal double précision) en non Long (entier long)

Dim line_insertion As Long, e1 As Double, e2 As Double, e3 As Double
(non testé...)

eric
Jamais tu ne répondras à un mp non sollicité...
Bon, ça c'est fait.
0
ça marche parfaitement, merci! Je ne connaissais pas ce détail au niveau des déclaration, je pensais que tout ce qui était sur la même ligne était du même type.

Problème résolu, a la prochaine ;)
0