[VBA Excel] Tirage de personne en aleatoire selon 2 conditions

Tirage de personne en aleatoire selon 2 conditions [VBA Excel] - VB/VBA/VBS - Programmation

Marsh Posté le 29-11-2017 à 18:56:54    

Bonjour
 
Pour les besoins d'un generateur de planning, je cherche a faire une macro qui va selectionner 2 personnes
chaque personne a 2 critères, competence et presence
on doit avec un couple a chaque fois sur la présence, et le niveau doit pas etre inferieur a 2 (les niveau c'est juste 1 et 2)
pour l'instant on a 12 personnes, et en principe, ca changera pas
 
J'ai un tableau avec mes personnes, leur présence et leur niveau dans une feuille, que je stock dans 2 variables tableaux (selon leur presence)
 
Pour l'instant j'arrive a generer mes couples sans trop de soucis, mais une fois les 6/8 premier couple en place, je commence a tomber dans une boucle infinie a cause de mon random
en fait, j'aimerais que une fois un couple est tiré, que je puisse les supprimer de mes tableaux en variable, mais je sais pas faire, une idée ?
 
 
Voici mon code pour l'instant

Code :
  1. Function aleat(max)
  2. Randomize
  3. aleat = Int(max * Rnd)
  4. End Function
  5. Sub Tirage()
  6. Dim People_Int(5, 2)
  7. Dim People_Pre(5, 2)
  8. 'Declaration des 2 tableaux People
  9. ' Tableau interne
  10. Worksheets("Param" ).Activate
  11. Range("B4" ).Select
  12. i = 0
  13. While (ActiveCell.Value <> "" )
  14.     People_Int(i, 0) = i
  15.     People_Int(i, 1) = ActiveCell.Value
  16.     People_Int(i, 2) = ActiveCell.Offset(0, 1).Value
  17.     i = i + 1
  18.     ActiveCell.Offset(1, 0).Select
  19. Wend
  20. ' Tableau Presta
  21. Range("E4" ).Select
  22. j = 0
  23. While (ActiveCell.Value <> "" )
  24.     People_Pre(j, 0) = i
  25.     People_Pre(j, 1) = ActiveCell.Value
  26.     People_Pre(j, 2) = ActiveCell.Offset(0, 1).Value
  27.     j = j + 1
  28.     ActiveCell.Offset(1, 0).Select
  29. Wend
  30. 'on se remet sur la feuille de planning
  31. Worksheets("Planning" ).Activate
  32. 'on supprime les champs si deja mis
  33. Range("C4:N4" ).Value = ""
  34. Range("C4" ).Select
  35. 'Calcul des binomes Int Presta
  36. pmax = 0
  37. While (pmax < 12)
  38. resul = 1
  39. While (resul <> 0)
  40.     'Test du niveau selon le tirage
  41.     niv_int = 0
  42.     niv_pre = 0
  43.     While (niv_int + niv_pre < 2)
  44.         tir_int = aleat(max_int)
  45.         niv_int = People_Int(tir_int, 2)
  46.         tir_pre = aleat(max_pre)
  47.         niv_pre = People_Int(tir_pre, 2)
  48.     Wend
  49.     'Test si deja sorti ou pas
  50.     For Each cell In Range("C4:N4" )
  51.         If (cell = People_Int(tir_int, 1) Or cell = People_Pre(tir_pre, 1)) Then
  52.             resul = 1
  53.             Exit For
  54.         Else
  55.             resul = 0
  56.         End If
  57.     Next cell
  58. Wend
  59. 'si tout est OK, on met les nom
  60. ActiveCell.Value = People_Int(tir_int, 1)
  61. ActiveCell.Offset(0, 1).Value = People_Pre(tir_pre, 1)
  62. ActiveCell.Offset(0, 2).Select
  63. pmax = pmax + 2
  64. Wend
  65. End Sub


---------------
Serveur HFR - OpenTTD
Reply

Marsh Posté le 29-11-2017 à 18:56:54   

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed