Bonjour à tous,
Je travaille sur un exemple de job shop ou comment planifier plusieurs taches selon leur temps d'execution sur 2 machines différentes et le message "Erreur d'exécution n°9, l'indice n'appartient pas à la sélection" apparait lorsque j'essaie de lire mon code VBA. J'ai cherché pendant de longs moments ce qui n'allait pas dans mon code mais impossible de trouver!
Mes données de base sont:
Job t(i,1) t(i,2)
1 5 2
2 1 6
3 9 7
4 3 8
5 10 4
où t(i,j) correspond au temps d'execution du job i sur la machine j
La stratégie adoptée pour classer les jobs est la suivante:
- si le plus petit temps d'exécution est effectué sur la machine 1, alors on planifie ce job en premier
- si le plus petit temps d'exécution est effectué sur la machine 2, alors on planifie ce job en dernier
Dans l'exemple ci-dessus, ça donne l'ordre suivant: 2-4-3-5-1.
Ci-dessous mon code:
Sub TaskA()
Dim k, i, j, n, v, l, w, x, Z, a, b, t As Integer
Dim u() As Integer
Dim s() As Integer
n = 5 'nombre total de jobs'
ReDim u(n) 'créer un array pour stocker tous les jobs non planifiés: les valeurs sont 0 pour chaque cas et quand le job est planifié, 1"
ReDim s(n) 'créer un array pour se rappeler l'ordre des jobs planifiés'
x = 0 'compteur des jobs scheduled sur la machine 2'
Z = 0 'compteur des jobs scheduled sur la machine 1'
For i = 1 To n
b = k = 20 'indique le minimum des processing times'
w = v = 0 'indique le numéro du job avec le minimum process time'
For j = 1 To n 'pour la premiere colonne donc pour la premiere machine'
t = Cells(j, 1)
If u(j) <> 1 And (t < k) Then
k = t And v = j
End If
Next
For l = 1 To n 'pour la deuxieme machine'
a = Cells(l, 2)
If u(l) <> 1 And a < b Then
b = a And w = l
End If
Next
If b < k Then
k = b And v = w And x = x + 1 And s(5 - x + 1) = v
Else
Z = Z + 1 And s(i - Z + 1) = v
End If
u(v) = 1
Next
MsgBox " The job sequence is " & s(1) & "-" & s(2) & "-" & s(3) & "-" & s(4) & "-" & s(5)
End Sub
L'erreur apparait sur la ligne u(v)=1
Merci beaucoup pour l'aide que vous pourrez m'apporter
Bonne fin de journée
Je travaille sur un exemple de job shop ou comment planifier plusieurs taches selon leur temps d'execution sur 2 machines différentes et le message "Erreur d'exécution n°9, l'indice n'appartient pas à la sélection" apparait lorsque j'essaie de lire mon code VBA. J'ai cherché pendant de longs moments ce qui n'allait pas dans mon code mais impossible de trouver!
Mes données de base sont:
Job t(i,1) t(i,2)
1 5 2
2 1 6
3 9 7
4 3 8
5 10 4
où t(i,j) correspond au temps d'execution du job i sur la machine j
La stratégie adoptée pour classer les jobs est la suivante:
- si le plus petit temps d'exécution est effectué sur la machine 1, alors on planifie ce job en premier
- si le plus petit temps d'exécution est effectué sur la machine 2, alors on planifie ce job en dernier
Dans l'exemple ci-dessus, ça donne l'ordre suivant: 2-4-3-5-1.
Ci-dessous mon code:
Sub TaskA()
Dim k, i, j, n, v, l, w, x, Z, a, b, t As Integer
Dim u() As Integer
Dim s() As Integer
n = 5 'nombre total de jobs'
ReDim u(n) 'créer un array pour stocker tous les jobs non planifiés: les valeurs sont 0 pour chaque cas et quand le job est planifié, 1"
ReDim s(n) 'créer un array pour se rappeler l'ordre des jobs planifiés'
x = 0 'compteur des jobs scheduled sur la machine 2'
Z = 0 'compteur des jobs scheduled sur la machine 1'
For i = 1 To n
b = k = 20 'indique le minimum des processing times'
w = v = 0 'indique le numéro du job avec le minimum process time'
For j = 1 To n 'pour la premiere colonne donc pour la premiere machine'
t = Cells(j, 1)
If u(j) <> 1 And (t < k) Then
k = t And v = j
End If
Next
For l = 1 To n 'pour la deuxieme machine'
a = Cells(l, 2)
If u(l) <> 1 And a < b Then
b = a And w = l
End If
Next
If b < k Then
k = b And v = w And x = x + 1 And s(5 - x + 1) = v
Else
Z = Z + 1 And s(i - Z + 1) = v
End If
u(v) = 1
Next
MsgBox " The job sequence is " & s(1) & "-" & s(2) & "-" & s(3) & "-" & s(4) & "-" & s(5)
End Sub
L'erreur apparait sur la ligne u(v)=1
Merci beaucoup pour l'aide que vous pourrez m'apporter
Bonne fin de journée