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
| Option Explicit
Sub Simulatio()
Dim i As Long
ActiveWorkbook.Worksheets("Test").Select
Range("M3:Q843").ClearContents '--- vider tableau des files
For i = 0 To 4
Simulation_Jour i
Range(Cells(3, 13 + i), Cells(843, 13 + i)).Value = Range(Cells(3, 9), Cells(843, 9)).Value
Next i
End Sub
'--- pas plus de 15 véhicules sur 15 minutes
Private Sub Simulation_Jour(i As Long)
Dim kCS As Long, kRS As Long, shStat As Worksheet
Dim kCT As Long, kRT As Long, shTest As Worksheet
Dim kC As Long, kR As Long, j As Long, k As Long, n As Long
Randomize
Set shStat = ActiveWorkbook.Worksheets("Stat")
Set shTest = ActiveWorkbook.Worksheets("Test")
shTest.Range("C3:E843,G3:I843,F844:I900").ClearContents '--- vider plages calculs
kCS = 9
kRS = 7 + 56 * i
kCT = 2
kRT = 3
'--- les arrivées
With shStat
For kR = 1 To 56 '--- 9h*4 = 56 quarts d'heure par jour
'--- ajouts données "dans l'ordre"
For kC = 1 To 5 '--- types différents de véhicules
n = .Cells(kRS + kR, kCS + kC)
If n > 0 Then
For j = 1 To n
shTest.Cells(kRT, kCT + 1) = .Cells(4, kCS + kC)
shTest.Cells(kRT, kCT + 2) = .Cells(5, kCS + kC)
shTest.Cells(kRT, kCT + 3) = .Cells(6, kCS + kC)
kRT = kRT + 1
Next j
End If
Next kC
'--- rendre l'ordre d'arrivée aléatoire dans le quart d'heure
kRT = 3 + (kR - 1) * 15 '--- ligne début quart d'heure
For k = 0 To 14
j = Int(15 * Rnd)
If j > 15 Then
Stop
End If
'--- permutation
shTest.Range(Cells(kRT + 15, 3), Cells(kRT + 15, 5)).Value = shTest.Range(Cells(kRT + k, 3), Cells(kRT + k, 5)).Value
shTest.Range(Cells(kRT + k, 3), Cells(kRT + k, 5)).Value = shTest.Range(Cells(kRT + j, 3), Cells(kRT + j, 5)).Value
shTest.Range(Cells(kRT + j, 3), Cells(kRT + j, 5)).Value = shTest.Range(Cells(kRT + 15, 3), Cells(kRT + 15, 5)).Value
Next k
kRT = 3 + kR * 15 '--- ligne début quart d'heure suivant
shTest.Range(Cells(kRT, 3), Cells(kRT, 5)).ClearContents
Next kR
End With
'--- les sorties
shTest.Select
n = 0 '--- temps d'attente
j = 843 '--- ligne dernière heure
For kRT = 3 To 843
'--- calcul longueur file
If kRT = 3 Then
Cells(kRT, 9) = Cells(kRT, 4).Value
Else
Cells(kRT, 9) = Cells(kRT - 1, 9) + Cells(kRT, 4) - Cells(kRT, 8)
End If
k = Cells(kRT, 5) '--- temps traitement véhicule arrivé
If k > 0 Then
'--- véhicule arrivé, indiquer sa sortie
If n > 0 Then '--- selon longueur file
n = n + k
Else
n = k
End If
If kRT + n > 843 Then
'--- ne pourront être traités avant la fermeture
j = j + 1
Cells(j, 6) = Cells(kRT, 2) + n / 1440 '--- 24*60 = 1440 minutes dans 1 jour
Range(Cells(j, 7), Cells(j, 8)).Value = Range(Cells(kRT, 3), Cells(kRT, 4)).Value
Else
'--- traité dans la journée
Range(Cells(kRT + n, 7), Cells(kRT + n, 8)).Value = Range(Cells(kRT, 3), Cells(kRT, 4)).Value
End If
End If
n = n - 1
Next kRT
End Sub |