Simple calcul qui bug en VBA

Résolu
Jack -  
 Jack -
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

3 réponses

  1. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
     
    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
    1. Jack
       
      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
  2. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
     
    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
  3. Jack
     
    ç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