Tirage aléatoire VBA

BONJOUR ,

je veux sélectionner aléatoirement 1 personne disponible dans mon tableau pour les 13 samedis

range(A64:O70) pour les disponibilité

range(P64:AP70) pour les affectations

1 ça veut dire disponible, 0 indisponible

voilà le fichier

merci d'avance

32test-rus.xlsm (21.71 Ko)

Bonjour,

Ce n'est pas très clair, donnez un exemple de ce qu'on pourrait trouver?

Cdlt

re-bonjour;

j'ai 2 tableaux ( le 1 contient des personnes disponibles) et le 2 est consacré aux affectations des permanences pour les samedis

mon objectif est d'affecter chaque week end une seule personne disponible

pour les disponibilités ( 1 ça veut dire disponible 0 non)

par exemple si j'ai 2 personnes disponible je veux tirer aléatoirement 1 seule personne dans la 1 semaine et le même principe pour les autres semaines

Bonjour à tous,

@arturo83 Si vous voulez plus de détail, regardez plutot les messages d'astra. Vous verrez qu'il fait des nouveaux sujets portant toujours sur le même problème et qu'il a eut des réponses. (Voir aussi la charte à ce sujet sur les doublons des sujets).

Le sujet est de faire un tirage aléatoire pour faire travailler le samedi, avec 2 contraintes parmi des équipes/villes:

- Une est d'avoir pas plus de 3 présences le samedi sur 13 semaines.

- L' autre de tirer aléatoirement 3 villes avec un tirage de 3,2,2 ou 2,2,3 pour faire 7.

@astra Si je comprends bien, il faut pour le 3,2,2, avoir une ville qui a 3 employés qui travaillent le samedi, et 2 villes qui font travailler 2 employés le samedi ? Pourquoi pas faire un roulement plutôt qu'un tirage pour les villes.

Enfin en quoi les réponses faites ne vous satisfont pas ?

Cdt

bonjour,

no ce n'est pas le même sujet , c'est un nouveau sujet sans contraintes

mon objectif est d'affecter seulement une seule personne.

je n'ai pas des contraintes 2,2,3 ...

schermafbeelding 2022 04 24 152839
Sub random()
     Dim a, Pot, Counters()
     Set c = Range("B65:B70")     'votre noms
     arr = c.Value     'in an arrau
     pot0 = Evaluate("transpose(row(A1:A" & UBound(arr) & "))")     'des chiffres consequtives

     Do
          i = i + 1     'offset columns
          Set c1 = c.Offset(, i)     'range
          b = (WorksheetFunction.CountA(c1) > 0)     'le range, est-il vide ?
Debug.Print b & "  " & WorksheetFunction.CountA(c1) & c1.Address
          If b Then
               Pot = pot0     'tous les noms
               For ptr = UBound(Pot) To 1 Step -1     'tire chaque fois un nom, donc le nombre diminue chaque fois
                    r = WorksheetFunction.RandBetween(1, ptr)     'random number
Debug.Print r & " " & c1(1, r).Value&; " " & Join(Pot, "/")
                    If c1(r, 1) = 1 Then c1(c1.Rows.Count + 1, 1).Value = arr(r, 1): Exit For     'personne est disponible, donc choisit
                    Pot(r) = Pot(ptr)     'swap values
               Next
          End If
     Loop While b
End Sub

merci bsalv pour ton aide

avec le fichier

14test-rus-1.xlsm (30.03 Ko)
Rechercher des sujets similaires à "tirage aleatoire vba"