Bonjour,

Voici mon problème :

Je dois mettre à jour chaque élément d'une collection (en fait un sorteddictionary) en fonction d'un savant calcul.

L'élément value de mon sorted dictionary est formé de la structure suivante :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
 
Friend Structure Donnees
    dim YearWeek as string    'Clé
    dim StkIni as long
    dim QteDispo as long
    dim BesoinBrut as long
    dim StkMin as long
    dim StkMax as long
    dim BesoinNet as long
End Structure
Cette collection représente les données d'un article pour une plage de semaines (d'ou la clé YearWeek) allant de S1 à SZ

La formule de calcul de BesoinNet est la suivante (pour la semaine SN courante)
Calculer volume = StkMin(SN) - (StkIni (S1) + SOMME(QteDispo(de S1 à SZ))) + SOMME(BesoinBrut (de S1 à SN))

Si volume > 0
BesoinNet = volume - SOMME(BesoinNet(de S1 à SN-1))
Sinon
BesoinNet = 0
Fsi
Dans un premier temps, j'alimente mon sorteddictionary en créant les enregistrements dedans pour la plage de semaine.

Après avoir inseré la dernière semaine, j'appelle la sub calcul suivante :
Initialiser les variables locale

Parcourir la collection pour calculer SOMME(QteDispo)

Mémoriser les informations concernant S1

Pour tout les enregistrements de la collection
Calculer SommeBesoinBrut = SommeBesoinBrut + BesoinBrut(SN)

Calculer Volume = StkMin(SN) - (StkIni(S1) + SOMME(QteDispo)) + SommeBesoinBrut

Si Volume > 0
BesoinNet(SN) = Volume - TotBesNet
Sinon
BesoinNet(SN) = 0
Fsi

TotBesNet = TotBesNet + BesoinNet(SN)

FPour
Ce que j'ai traduit par le code suivant :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
 
    Public Sub calcul()
 
        Dim Volume As Long
        Dim Sem1 As Boolean = True
        Dim RecSem1 As RecordDonnesCalcul
        Dim TotQteDispo As Long = 0
        Dim TotBesBrut As Long = 0
        Dim TotBesNet As Long = 0
 
        For Each RecSem As RecordDonnesCalcul In Values
            TotQteDispo += RecSem.QteDispo
        Next
 
        For Each RecSem As RecordDonnesCalcul In Values
            If (Sem1) Then
                RecSem1 = RecSem
                Sem1 = False
            End If
 
            TotBesBrut += RecSem.BesoinBrut
 
            Volume = RecSem.Stockmin - (RecSem1.StockInitial + TotQteDispo) + TotBesBrut
 
            If (Volume > 0) Then
                RecSem.BesoinNet = Volume - TotBesNet
            Else
                RecSem.BesoinNet = 0
            End If
 
            TotBesNet += RecSem.BesoinNet
 
        Next
 
    End Sub
Les calculs se font bien (j'ai vérifié sous débug) par contre, la collection n'est pas mise à jour (lorsque je veux récupérer les information d'une semaine, BesoinNet est toujours à zéro).

Je soupçonne que "RecSem" n'est pas un pointeur sur la "Value" courante mais une copie de celle-ci.

Ma question est la suivante :
Comment parcourir une collection en récupérant un pointeur vers l'élément "Value" courant.

Merci de votre aide.

Joël