Bonjour,

Merci d'avance pour essayer de m'aider, j'espère que l'on y arrivera .

A la base je voulais de l'aide pour un tri de données dans mon tableau dimensionnelle à 3 colonnes et x lignes.

Mais je vais vous expliquer mon Objectif = Determiner pour chaque commande une date de rupture du produit sans prendre en compte la commande puis avec la commande et s'il y a plusieurs commandes reboucler avec les commandes précédentes.
Pour ce faire j'ai la liste des besoins dans un onglet et j'ai une liste de commande que je remets en forme pour ajouter les informations citées ci-dessus.

J'ai réussi à integrer les besoins et la commande dans un tableau dimensionnelle mais je séche sur le tri car la commande va être intégrer en début de tableau et les besoins par la suite donc lors de mon tri j'ai la derniere ligne qui ne s'affiche pas.
J'obtiens dans la fenêtre d'execution sans le tri, ceci :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
 
                                1429,73 'stock de départ Tabbesoin(0,3)
'date             qté          cumul
'tabbesoin(i,1) tabbesoin(i,2) tabbesoin(i,3)
15/01/2011     1000          2429,73 
25/10/2010    -85,83         2343,9 
25/10/2010    -143,02        2200,88 
04/11/2010    -143           2057,88 
03/01/2011    -143           1914,88 
06/01/2011    -143           1771,88 
12/01/2011    -143           1628,88 
18/01/2011    -143           1485,88 
24/01/2011    -143           1342,88 
27/01/2011    -143           1199,88
Et voilà ce que j'obtiens avec mon tri, le cumul se fait après le tri bien sûr :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
 
                             1429,73 'stock de départ Tabbesoin(0,3)
'date             qté          cumul
'tabbesoin(i,1) tabbesoin(i,2) tabbesoin(i,3)
25/10/2010    -85,83         1343,9 
25/10/2010    -143,02        1200,88 
04/11/2010    -143           1057,88 
03/01/2011    -143           914,88 
06/01/2011    -143           771,88 
12/01/2011    -143           628,88 
15/01/2011     1000          1628,88 
18/01/2011    -143           1485,88 
24/01/2011    -143           1342,88 
                             1342,88
la ligne du 27/01/2010 ne se réécrit pas.

et voici mon code
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
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
 
Option Explicit
Option Base 0
Sub Couverture_Cde()
 
' Macro crée le 28/10/2010 par Bilbault Wilfried
'____________________________________________________________________________________________________________________________________
 
'----------------------------------------------------------------Déclaration des variables-------------------------------------------
    Dim i As Integer, j As Long, Daterupture As Date, Stock As Variant, Codearticle As Variant, finListe As Long, x As Long
    Dim dpt As Integer, z As Integer, NbreCde As Integer, finBes As Long, cpteur As Integer, y As Integer, t As Variant
 
    Dim wsB As Worksheet, wsS As Worksheet, wsC As Worksheet
 
    'Définit le tableau à 2 dimensions ainsi que leur taille.
    Dim TabBesoin(0 To 65535, 1 To 4) As Variant
 
Set wsB = Sheets("Besoin")
Set wsS = Sheets("Total stock")
 
''-----------------------------------------------------------Mise en forme la liste des commandes-------------------------------------
''Tri des commandes par code puis date de libération
'Sheets("Ordre d'achat").Copy Before:=Sheets(2)
'
'Sheets("Ordre d'achat (2)").Name = "Analyse Commande"
 
Set wsC = Sheets("Analyse Commande")
finListe = wsC.Range("A65536").End(xlUp).Row
'dernier besoin
finBes = wsB.Range("A65536").End(xlUp).Row
x = 2
For x = 2 To finListe Step 1
 
    Codearticle = 15    'wsC.Cells(x, 1)
    NbreCde = WorksheetFunction.CountIf(wsC.Columns(1), Codearticle)
 
Erase TabBesoin
 
' Récupération du stock associé au code article commandé
        Stock = WorksheetFunction.SumIf(wsS.Columns(1), Codearticle & "Stock-Accepté", wsS.Columns(3)) + _
                WorksheetFunction.SumIf(wsS.Columns(1), Codearticle & "Stock-Quarantaine", wsS.Columns(3))
'----------------------------------------------------------------Calcul de la rupture-----------------------------------------------------------------------
' intégration du stock dans le tableau
        TabBesoin(0, 3) = Stock
dpt = 1
i = 1
cpteur = 0
'intégration des commandes dans le tableau (partie à revoir car ne fonctionne pas avec plusieurs commandes)
    For dpt = 1 To NbreCde
    'date du commande
    TabBesoin(i, 1) = wsC.Cells(x + cpteur, 5)
    'quantité
    TabBesoin(i, 2) = wsC.Cells(x + cpteur, 3)
    i = i + 1
 
    'intégration des besoins correspondants au code article commandé
        For j = 2 To finBes
        'conditions pour incrementer le tableau dimensionnelle
            If wsB.Cells(j, 3) = Codearticle And wsB.Cells(j, 8) = "Ferme" And (wsB.Cells(j, 7) Like "M*") = False Then
                'date du besoin
                TabBesoin(i, 1) = wsB.Cells(j, 1)
                'quantité
                TabBesoin(i, 2) = wsB.Cells(j, 5) * -1
                i = i + 1
            End If
        Next j
 
'boucle de tri
    For z = 1 To i Step 1
        If TabBesoin(z, 1) > TabBesoin(z + 1, 1) Then
                For y = 1 To 2
                    t = TabBesoin(z, y)
                    TabBesoin(z, y) = TabBesoin(z + 1, y)
                    TabBesoin(z + 1, y) = t
                Next y
        End If
 
    Next z
 
       'calcul stock projeté et affichage        
For i = 1 To i
 
        TabBesoin(i, 3) = WorksheetFunction.Round(TabBesoin(i - 1, 3) + TabBesoin(i, 2), 2)
            Debug.Print TabBesoin(i - 1, 1), TabBesoin(i - 1, 2), TabBesoin(i - 1, 3)
Next i
Merci beaucoup pour votre aide