Bonjour,

J'ai créé une macro. qui renseigne 2 feuilles d'un même classeur.

La première est renseignée par les n° d'ordre de fabrication et leur rattachement aux lignes de commande (feuille "OF").

La deuxième est renseignée par les lignes de commande client (feuille "CMDES").

Après avoir renseigné ces 2 feuilles, je souhaite positionner les affectations des ordres de fabrication aux lignes de commande sous la ligne de commande qui le concerne dans la feuille des lignes de commande.

Ma macro. supprime des lignes de commande client malheureusement.

Voici le code que j'ai utilisé pour insérer les enregistrements des affectations (feuille nommée "OF") vers la feuille des commandes (feuille nommée "CMDES").

i est mon indice pour balayer les lignes de commande client,
j est la ligne traitée dans les affectations d'OF,
id_cmde_ligne est mon critère d'appareillage des 2 feuilles,

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
i = 3
 
   If Worksheets("CMDES").Range("A" & i).Value = "" Then
      fin_tableau = True
   Else
      fin_tableau = False
   End If
 
   nb_lignes = Worksheets("OF").Range("A65536").End(xlUp).Row
 
   Do Until fin_tableau
 
     ' Si la quantité restant à livrer est > à la quantité totale réservée alors il convient de rechercher
     ' les lignes d'affectation d'OF correspondant et de les ramener sous la ligne de commande client
 
     If Int(Worksheets("CMDES").Range("G" & i).Value) > Int(Worksheets("CMDES").Range("H" & i).Value) Then
 
        ' Récupération de l'id_cmde_ligne de la ligne de commande client restant à livrer.
        id_cmde_ligne = Int(Worksheets("CMDES").Range("O" & i).Value)
 
        ' Recherche de l'id_cmde_ligne dans la feuille des affectations d'of.
        Set rFound = Worksheets("OF").Range("I2:I" & nb_lignes).Find(id_cmde_ligne, LookIn:=xlValues)
 
        ' Il y a une affectation dans la feuille des affectations d'OF
 
        If Not rFound Is Nothing Then
           LaLig = rFound.Row
           Set rFound = Nothing
           j = LaLig
 
           fin_recherche = False
 
           ' Boucle jusqu'à ce que l'id_cmde_ligne lu dans la feuille des affectations des of
           ' soit supérieur à celui de la ligne de commande ou être arrivé à la fin de la feuille des affectations d'OF
           Do Until fin_recherche
              ' Copie de la ligne concernée
              Worksheets("OF").Range("A" & j & ":U" & j).Copy
               ' Coller dans la feuille des lignes de commande sous la ligne de commande concernée
               ' Positionnement sur la ligne suivante
              i = i + 1
              Worksheets("CMDES").Range("A" & i).PasteSpecial xlPasteValues
              j = j + 1
 
              If Worksheets("OF").Range("I" & j).Value = "" Or Int(Worksheets("OF").Range("I" & j).Value) > id_cmde_ligne Then
                 fin_recherche = True
              End If
           Loop
 
        End If
 
     End If
 
     i = i + 1
 
     If Worksheets("CMDES").Range("A" & i).Value = "" Then
        fin_tableau = True
     End If
 
   Loop
Julien.