Excel besoin d'aide pour un tableau dynamique

noid wan -  
gbinforme Messages postés 15481 Date d'inscription   Statut Contributeur Dernière intervention   -
Bonjour,

Je nes sais pas vraiment si je poste au bon endoit, si ce n'est pas le cas je déplacerai..

Alors voilà, j'ai vraiment besoin d'aide sur cette macro, je crois que j'atteind mon seuil de compétence (apres examen de plusieurs topics, j'ai l'impression d'avoir fait tout bien,.. erf ce n'est sans doute pas le cas.)

Ma macro a pour but, a partir d'un tableau d'achat/vente de sicav, de calculer la plus-value à chaque vente, selon la méthode FIFO ou PEPS. (premier entrée premier sorti). Pour les non-familiers cela consiste a vendre les premières actions achetées avant les dernières, de manières a maximiser le profit - ah le capitalisme...

Mes en-têtes de colonnes sont : en colonne 3 se trouve la valeur de l'action et en colonne 11 le nb d'action vendues ou achetées par date.

voici la macro (j'ai essayé de commenter au maximum.)

Private Sub fifobtn_Click()

Dim x As Long, y As Long, CA As Long, NA As Long, RA As Long
Dim i As Long, j As Long, ENDT As Long, k As Integer
'declaration d'un tableau dynamique TabDyn
Dim TabDyn() As Variant, TabRow As Integer, NBVente As Long, NBVenteCalcul As Long
Dim A As Integer, B As Integer, C As Integer

'initialisation
ReDim TabDyn(0 To 0, 0 To 0)
CA = 0
NA = 0
RA = 0
B = 1
'on determine la longueur des colonnes de données a traiter
ENDT = ActiveSheet.range("D7").End(xlDown).Rows.Count

'parcours la colonne des achat/vente
For i = 0 To ENDT

'pour caque vente (valeur positive, on stocke la valeur et on calcule la + value
If Cells(11, i + 2).Value <= 0 Then NBVente = Cells(11, i + 2).Value And A = i + 2
NBVenteCalcul = NBVente
TotalGroupe = 0
TabRow = 0

While B <> 0

'on parcours le tableau en sens inverse pour déterminer quel stock doit etre vendu
While NBVenteCalcul <> 0 And C >= 0
For k = A - 1 To 0 Step -1
If Cells(11, k).Value >= 0 And NBVenteCalcul - Cells(11, k).Value <= 0 Then TabDyn(TabRow, 0) = Cells(11, k).Value And NBVenteCalcul = NBVenteCalcul - Cells(11, k).Value
If Cells(11, k).Value <= 0 Then C = 1
If Cells(11, k).Value >= 0 Then TabDyn(TabRow, 1) = Cells(3, k).Value
If NBVente - Cells(11, k).Value <= 0 Then TabDyn(TabRow, 1) = (Cells(3, k) - NBVenteCalcul) And B = 0
Next k
Wend
'on recupère la dimension de notre tableau dynamique avant de faire le total
L = UBound(TabDyn, 1)

For k = 0 To L Step 1
'l'erreur se trouve la ...mais d'ou vient-elle.. mystère
TotalGroupe = TotalGroupe + (TabDyn(k, 0) * TabDyn(k, 1))
Next k

'on reset le tableau
Erase TabDyn

Wend

'ecriture des plus-values
Cells(13, i).Value = TotalGroupe

Next i



End Sub


voila un grand merci par avance pour le temps que vous pourrez me consacrer.
A voir également:

1 réponse

gbinforme Messages postés 15481 Date d'inscription   Statut Contributeur Dernière intervention   4 730
 
bonjour

Sans les données ce n'est pas facile de tout comprendre mais il me semble qu'il y a une incohérence au départ.

'on determine la longueur des colonnes de données a traiter
ENDT = ActiveSheet.range("D7").End(xlDown).Rows.Count


Ceci me paraît avoir du mal à fonctionner car en même temps tu utilises ENDT dans la variation des colonnes :
For i = 0 To ENDT

If Cells(11, i + 2).Value
Ici tu devrais inverser car tu fais progresser les colonnes et ta macro ne traite que la ligne 11.

Il me semble que c'est de là que vient le malaise ?
0