hela_bouks
Messages postés18Date d'inscriptionvendredi 24 février 2006StatutMembreDernière intervention 2 janvier 2008
-
31 déc. 2007 à 11:29
jmfmarques
Messages postés7666Date d'inscriptionsamedi 5 novembre 2005StatutMembreDernière intervention22 août 2014
-
1 janv. 2008 à 10:21
Bonjour,
J'explique mon probleme : j'ai 3 produit P1, P2, P3 à affecter sur 5 machines.
Chaque produit est divisé en opération, ce qui donne :
O11
O21
O31
O12
O22
O32
O13
O23
Le premier chiffre indique le numéro de l'operation et le deuxième le numéro du produit.
Bien sur, l'operation 1 passe toujours avant la 2 et la 2 avant la 3. Chaque operation est affectée aleatoirement à une machine.
Le but est de choisir une operation au hasard parmi cet ensemble et de verifier que :
1- qu'elle n'a pas encore été choisie auparavant
2 - que les operations qui la precedent ont deja été affectée à des machines (cad si le choix est O32, il faut verifier que O22 et O12 ont été préalablement traitées)
Ce serait mega génial si vous pouviez m'aider!!!!
Un grand merci
jmfmarques
Messages postés7666Date d'inscriptionsamedi 5 novembre 2005StatutMembreDernière intervention22 août 201427 31 déc. 2007 à 12:05
Bonjour,
Je ne comprends pas la philosophie de ton truc !
je dirais :
pour chaque produit : une chaine 123
- tirage aléatoire d'une machine (sur une leste de 5 machines)
- tirage aléatoire d'un produit (sur une liste de 3 produits) - attribution du 1er caractère de la chaine et suppresion de ce caractère dans la chaine. Et si, après suppression (dernier caractère) la chaine et vide : suppression du produit dans la liste des produits.
hela_bouks
Messages postés18Date d'inscriptionvendredi 24 février 2006StatutMembreDernière intervention 2 janvier 2008 31 déc. 2007 à 12:54
En fait, à la base ce n'est pas trés compliqué,
Chaque produit doit passer par une machine, peu importe laquelle. Mais par exemple sur une même machine, le produit O32 ne peut pas passer avant O22, l'ordre doit être respecté!!!
Un autre exemple : On peut traiter O11 sur la machine 4 et O21 sur la machine 1 en parallère, ça ne pose pas de problème.
Ce qui me pose problème c'est comment respecter l'ordre de passage sur une machine donnée.
Si je peux donner plus d'explication, je suis à votre disposition.
Merci
jmfmarques
Messages postés7666Date d'inscriptionsamedi 5 novembre 2005StatutMembreDernière intervention22 août 201427 31 déc. 2007 à 13:07
Bon,
1) j'ai maintenant bien compris ton truc
2) il s'agit là d'un problème simple et non "complexe"
3) je t'ai donné des indications suffisamment précises
4) je viens de mettre en oeuvre, sans problèmes, la "chose"
5) il s'agit manifestement là d'un exercice de cours et je n'ai dans ce cas absolument pas l'intention de le faire à ta place
6) la solution est moins dans le code VB que dans l'élaboration d'un mécanisme de pensée (comme toujours, d'ailleurs)
7) dans ce cas et en conclusion :
- une listbox comportant 3 articles : 1123 2123 3123, où le 1er caractère est l'identificateur du produit
- 5 listboxes vides au départ, représentant tes 5 machines et qui seront alimentées par les produits jusqu'à épuisement
Pour le reste : à toi de jouer (celà se fait en à peine quelques lignes de code... !). Je ne reviendrai ici que si tu nous montres un peu de code d'essai sur ces bases et celles que je t'ai montrées plus haut. Le tout est fort simple.
jmfmarques
Messages postés7666Date d'inscriptionsamedi 5 novembre 2005StatutMembreDernière intervention22 août 201427 1 janv. 2008 à 09:38
Allez ...
Un cadeau pour le jour de l'an, va...
Une listbox nommée List1, une listbox nommée List2 et un bouton de commande nommé Command1
Code :
Private Sub Form_Activate()
Randomize Timer
End Sub
Private Sub Command1_Click()
Dim nb As Integer, machine As Integer, produit As Integer, chaine As String
List1.Clear
List1.AddItem "1231"
List1.AddItem "1232"
List1.AddItem "1233"
List2.Clear
While List1.ListCount > 0
nb = List1.ListCount
produit = Int(nb * Rnd)
machine = Int((5 * Rnd) + 1)
chaine = List1.List(produit)
List2.AddItem "machine " & machine & " : 0" & Left(chaine, 1) & Right(chaine, 1)
List1.List(produit) = Mid(chaine, 2)
If Len(List1.List(produit)) = 1 Then List1.RemoveItem produit
Wend
End Sub
Vous n’avez pas trouvé la réponse que vous recherchez ?
jmfmarques
Messages postés7666Date d'inscriptionsamedi 5 novembre 2005StatutMembreDernière intervention22 août 201427 1 janv. 2008 à 10:21
Une autre feinte est de traiter tes produits dans l'ordre et de leur attribuer aléatoirement une machine, tout simplement :
Exemple :
1 seule listbox nommée List1 et un bouton de commande Command1
code :
Private Sub Command2_Click()
Randomize Timer
Dim nbproduits As Integer, nbmachines As Integer, nbreferences As Integer
nbproduits = 3
nbmachines = 5
nbreferences = 3
List2.Clear
Dim I As Integer, J As Integer
For I = 1 To nbproduits
For J = 1 To nbreferences
List2.AddItem "machine " & Int((nbmachines * Rnd) + 1) & " : " & "0" & J & I
Next
Next I
End Sub
Tu remarqueras que tu peux faire varier à ta guise le nombre des machines, celui des produits et celui des références de chaque produit
Voilà ... tu découvres ainsi que le développement informatique est avant tout celui de sa propre pensée...