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 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135
|
Option explicit
Sub essai_12_04_10()
Dim N22 As Integer, N42 As Integer, N23 As Integer, N43 As Integer, A As Integer, s22 As Single, T22 As Single, s42 As Single, T42 As Single, s23 As Single, T23 As Single, s43 As Single, T43 As Single, X22 As Integer, X42 As Integer, X23 As Integer, X43 As Integer
Dim maxi As Integer
Dim Ligne As Long
[G7:U65536].ClearContents
T22 = [D1]
T42 = [F1]
T23 = [D3]
T43 = [F3]
maxi = [A1]
Ligne = 7
Maxi2SF = Int(maxi / T22)
Maxi2DF = Int(maxi / T42)
Maxi3SF = Int(maxi / T23) 'nb maxi de tours/camion/jour en SF
Maxi3DF = Int(maxi / T43) 'nb maxi de tours/camion/jour en DF
Do
N22 = Cells(Ligne, "A") 'pour gagner en lisibilité tu peux utiliser les lettres au lieu de leur valeur numerique
N42 = Cells(Ligne, "B")
N23 = Cells(Ligne, "C")
N43 = Cells(Ligne, "D")
A = Cells(Ligne, "E")
Cells(Ligne, "G") = N22 * T22
Cells(Ligne, "H") = N42 * T42
Cells(Ligne, "O") = N23 * T23
Cells(Ligne, "P") = N43 * T43
s22 = N22 * T22 'Cells(Ligne, "G")'il sera plus rpide de refaire la multiplication que d'aller chercher dans le tableau
s42 = N42 * T42 'Cells(Ligne, "H")
s23 = N23 * T23 'Cells(Ligne, 15)
s43 = N43 * T43 'Cells(Ligne, 16)
'Attention ici, il faut reinitialisé les valeur de X, sinon elle concerveront la valeu de la boucle Do... loop precedente, voir explication plus loin
X42 = 0
X43 = 0
X22 = 0
X23 = 0
'a) si N22=N42=0, on va à la ligne suivante
If Not (N22 = 0 And N42 = 0) Then
'on détermine le nombre de camions qu'il faut pour le simple fret
'on cherche X22 tq Maxi*(X22-1)<=s22<=Maxi*X22
If Int(N22 / Maxi2SF) < N22 / Maxi2SF Then X22 = Int(N22 / Maxi2SF) + 1 Else X22 = N22 / Maxi2SF
'on cherche le tps maxi en fonction du nb de trajets max que peuvent réaliser les camions
MaxiT22 = X22 * maxi
'tps libre du dernier camion de la flotte
TapresT22 = (MaxiT22 - s22)
'on détermine le nb de camions qu'il faut pour le double fret
TSFDF2 = Int(TapresT22 / T42) 'nb de tours en DF du dernier camion de SF
'If Int((N42 - TSFDF2) / Maxi2DF) < ((N42 - TSFDF2) / Maxi2DF) Then X42 = Int((N42 - TSFDF2) / Maxi2DF) + 1 Else X42 = Int((N42 - TSFDF2) / Maxi2DF) + 1
'ElseIf N42 = 0 Then X42 = 0
'La forme de ta boucle If est fausse
'Il faudrait faire
'If Int((N42 - TSFDF2) / Maxi2DF) < ((N42 - TSFDF2) / Maxi2DF) Then
' X42 = Int((N42 - TSFDF2) / Maxi2DF) + 1
'ElseIf N42 = 0 Then
' X42 = 0
'Else
' X42 = ((N42 - TSFDF2) / Maxi2DF)
'End If
'Mais il est plus interessant de faire comme ca
If N42 = 0 Then
X42 = 0
Else
If Int((N42 - TSFDF2) / Maxi2DF) < ((N42 - TSFDF2) / Maxi2DF) Then X42 = Int((N42 - TSFDF2) / Maxi2DF) + 1 Else X42 = Int((N42 - TSFDF2) / Maxi2DF) + 1
End If
End If
'C'est a cause de cette ligne qu'il faut remettre les X a 0, sinon X42 aura gardé la mm valeur que le tour d'avant si N22 et N42=0
If X42 <> 0 Then TapresT42 = ((X42 * Maxi2DF) - (N42 - TSFDF2)) * T42 Else TapresT42 = 0
'idem ici pour X22 et X42
Xtot2 = X22 + X42
[I1] = Maxi2SF
[K1] = Maxi2DF
Cells(Ligne, 9) = X22
Cells(Ligne, 10) = TapresT22
Cells(Ligne, 11) = X42
Cells(Ligne, 12) = TapresT42
Cells(Ligne, 13) = Xtot2
'b) si N23=N43=0, on va à la ligne suivante
If Not (N23 = 0 And N43 = 0) Then
'on détermine le nombre de camions qu'il faut pour le simple fret
'on cherche X23 tq Maxi*(X23-1)<=s23<=Maxi*X23
If Int(N23 / Maxi3SF) < N23 / Maxi3SF Then X23 = Int(N23 / Maxi3SF) + 1 Else X23 = N23 / Maxi3SF
'on cherche le tps maxi en fonction du nb de trajets max que peuvent réaliser les camions
MaxiT23 = X23 * maxi
'tps libre du dernier camion de la flotte
TapresT23 = (MaxiT23 - s23)
'on détermine le nb de camions qu'il faut pour le double fret
TSFDF3 = Int(TapresT23 / T43) 'nb de tours en DF du dernier camion de SF
If Int((N43 - TSFDF3) / Maxi3DF) < ((N43 - TSFDF3) / Maxi3DF) Then X43 = Int((N43 - TSFDF3) / Maxi3DF) + 1 Else X43 = ((N43 - TSFDF3) / Maxi3DF)
ElseIf N43 = 0 Then X43 = 0
End If
If X43 <> 0 Then TapresT43 = ((X43 * Maxi3DF) - (N43 - TSFDF3)) * T43 Else TapresT43 = 0
Xtot3 = X23 + X43
[I3] = Maxi3SF
[K3] = Maxi3DF
Cells(Ligne, 17) = X23
Cells(Ligne, 18) = TapresT23
Cells(Ligne, 19) = X43
Cells(Ligne, 20) = TapresT43
Cells(Ligne, 21) = Xtot3
Ligne = Ligne + 1
Loop Until Ligne = 217 'jusqu'à la dernière ligne
End Sub |