Besoin aide pour formule ALEA ? ou autre ? Je ne sais pas

Todre

XLDnaute Occasionnel
Hello,

Je suis en train d'essayer de mettre en place un tableau qui parait simple mais en fait difficile (pour moi...)

Sur le fichier joint il y a une liste de noms ou je souhaiterai leur attribuer un métier selon un besoin sachant que j'ai un choix de 3 métiers.

Sur le fichier de besoin je mets mon nombre de personnes sachant que chaques fois que je modifie le besoin ou caque fois que je le rempli le choix ne pas etre le meme pour effectuer de la polyvalence.

J'espere etre à peut pret clair sinon ne pas hésiter à me demander.

Merci d'avance à tous. :p
 

Pièces jointes

  • Classeur1.xlsx
    10.4 KB · Affichages: 56
  • Classeur1.xlsx
    10.4 KB · Affichages: 62
  • Classeur1.xlsx
    10.4 KB · Affichages: 59

CBernardT

XLDnaute Barbatruc
Re : Besoin aide pour formule ALEA ? ou autre ? Je ne sais pas

Bonjour à tous,

Un tirage par VBA.

J'ai rajouté une ligne contrôle au-dessous du besoin de chaque métier qui fait la synthèse des métiers tirés.
Un message avant nouveau tirage permet de vérifier la décision de l'opérateur.

Le principe de fonctionnement de la macro :

1- Tirage aléatoire d'une cellule à donner un métier et contrôle que cette cellule est vide.
2- Tirage aléatoire d'un métier et contrôle que ce tirage est acceptable si le nombre de tirage déjà effectués de ce métier est inférieur au nombre souhaité.
3- Inscription du métier dans la cellule.
 

Pièces jointes

  • AleaMetierV1.xlsm
    23.1 KB · Affichages: 64
Dernière édition:

mapomme

XLDnaute Barbatruc
Supporter XLD
Re : Besoin aide pour formule ALEA ? ou autre ? Je ne sais pas

Bonjour à tous,

Un essai vite fait:
VB:
Sub melange()
Dim i, j, k, xcell As Range, S
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
  Range("b7:b" & Rows.Count).ClearContents
  For Each xcell In Range("h14:j14")
    S = S + xcell
    For j = 1 To xcell.Value
      Range("b7").Offset(k) = xcell.Offset(-1)
      k = k + 1
    Next j
  Next xcell
  Columns("B:B").Insert Shift:=xlToRight
  Range("b7").Resize(S).FormulaLocal = "=alea()"
  Range("b7").Resize(S, 2).Sort key1:=Range("b7"), Header:=xlNo
  Columns("B:B").Delete
Application.ScreenUpdating = True
Application.Calculation = xlCalculationAutomatic
End Sub
 

Pièces jointes

  • Tirage selon proportions v2.xlsm
    82.1 KB · Affichages: 45
Dernière édition:

mapomme

XLDnaute Barbatruc
Supporter XLD
Re : Besoin aide pour formule ALEA ? ou autre ? Je ne sais pas

Bonjour à tous,

Une version avec quelques vérif. en plus (une au sein du code, les autres en MFC - voir fichier pour description).
VB:
Sub melange()
Dim i, j, k, xcell As Range, S
If Application.WorksheetFunction.Sum(Range("h14:j14")) < 1 Then
    MsgBox "Erreur : aucun métier à ventiler !"
    Exit Sub
  End If
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
  Range("b7:b" & Rows.Count).ClearContents
  For Each xcell In Range("h14:j14")
    S = S + xcell
    For j = 1 To xcell.Value
      Range("b7").Offset(k) = xcell.Offset(-1)
      k = k + 1
    Next j
  Next xcell
  Columns("B:B").Insert Shift:=xlToRight
  Range("b7").Resize(S).FormulaLocal = "=alea()"
  Range("b7").Resize(S, 2).Sort key1:=Range("b7"), Header:=xlNo
  Columns("B:B").Delete
Application.ScreenUpdating = True
Application.Calculation = xlCalculationAutomatic
MsgBox "C'est fini !"
End Sub
 

Pièces jointes

  • Tirage selon proportions v3.xlsm
    111.3 KB · Affichages: 50

Todre

XLDnaute Occasionnel
Re : Besoin aide pour formule ALEA ? ou autre ? Je ne sais pas

Merci a tous pour vos messages

J'ai regardé un peu, pour moi le fichier le plus exploitable (plus simple pour moi) es celui de Bernard mais ne maitrisant pas le VBA, j'espère de récup le code pour adapter à mon fichier de base mais j'ai une erreur sur une ligne:

Loop Until Application.CountIf(Liste, Metier) < TabMetier(2, Tirage2)

merci pour votre aide sur le sujet:p
 

CBernardT

XLDnaute Barbatruc
Re : Besoin aide pour formule ALEA ? ou autre ? Je ne sais pas

Bonjour Todre et le forum,

Si tu n'arrives pas à reformuler la ligne de code :

Loop Until Application.CountIf(Liste, Metier) < TabMetier(2, Tirage2)

Essayons les explications :

- Application.CountIf est la traduction VBA de la formule NB.SI().
Liste est la zone où sont inscrit les métiers en face des noms.
Metier est une variable qui contient le tirage au sort de l'un des trois métiers.
- Si le nombre de fois de "metier" est inférieur au besoin alors "Metier" est transcrit dans la cellule de la zone tirée au sort et vide.


si ces explications te sont insuffisantes et pouvoir avoir réponse adaptée à ton fichier, il est nécessaire que tu nous montres un extrait de ce fichier.
 

Todre

XLDnaute Occasionnel
Re : Besoin aide pour formule ALEA ? ou autre ? Je ne sais pas

Bonjour Bernard

Est il possible de se contacter en privé car je ne peux mettre mon fichier a la vu de tout le monde je ne sais pas si sur le forum on peut envoyer en message privé ou une adresse mail ou je peux vous le joindre

Merci pour tout
 

CBernardT

XLDnaute Barbatruc
Re : Besoin aide pour formule ALEA ? ou autre ? Je ne sais pas

Bonjour Todre et le forum,


En déplacement jusqu'au 22 avril, si, d'ici là, le problème VBA demeure, tu peux me laisser un message privé sur la messagerie du forum avec ton adresse email.

Bonne journée
 

Discussions similaires

Réponses
1
Affichages
251

Statistiques des forums

Discussions
312 330
Messages
2 087 339
Membres
103 524
dernier inscrit
Smile1813