XL 2019 Nombre aléatoire + Probabilité

Gwenole_50

XLDnaute Nouveau
bonjour a tous !

J'ai besoin de votre aide pour un de mes projets sur Excel, le but est de remplir un tableau avec des chiffres de 1 à 5 mais je voudrais que ces chiffres apparaissent le meme nombre de fois :

Par exemple numéro sort 20 fois alors tout les numéros doivent sortir 20 fois.


Petite demande supplémentaire ( 🙄), je voudrai aussi par exemple pouvoir modifier le parametre d'apparition dun chiffre, si je veux que par exple les numéros 1,2 et 3 apparaissent plus souvent que le 4 et le 5.

Savez vous comment faire cela ?

J'ai lu sur internet qu'il faudrait peut etre utilise le VBA mais je ne sais pas ce que c'est ...?

Merci pour vos retour !!

Cordialement ;)
 

Pièces jointes

  • Classeur1.xlsx
    15.5 KB · Affichages: 21

Dudu2

XLDnaute Barbatruc
Si maintenant je veux pouvoir choisir dans quelle case mettre les nombres et pas dans toute les case.
Est ce qu'il y a quelque chose de simple à modifier ?
Il faut définir les cellules "interdites".
Si ce sont des cellules éparpillées dans le tableau, il faut les définir une à une. Il y en a beaucoup ?
Si ce sont des cellules groupées dans le tableau, il faut définir les plages correspondantes.
Une façon de les définir consiste à les lister.
Un autre façon consiste à les caractériser par une couleur de fond spécifique par exemple,
ou de les pré-remplir avec une valeur 'X' par exemple (meilleure solution).
 

mapomme

XLDnaute Barbatruc
Supporter XLD
Bonjour @Staple1600 :),
[aparté pink lady]
La dernière ligne de votre code contredit d'un chouia cette affirmation, monsieur mapomme
Mais c'est cette "fake news" qui me permet de passer dans le fil pour vous saluer ;)
[/aparté pink lady]
Effectivement, la dernière instruction de mon code est End Sub qui ne fait intervenir en rien la notion d'Array ;). Désolé :oops:.
 

mapomme

XLDnaute Barbatruc
Supporter XLD
Si maintenant je veux pouvoir choisir dans quelle case mettre les nombres et pas dans toute les case.
Est ce qu'il y a quelque chose de simple à modifier ?
Dans ce cas , il faut aussi tenir compte dans le tableau des quantités du nombre de "X" pour respecter le cohérence. Donc la réponse à votre question est "ce n'est pas aussi simple qu'on le croit".
 

Staple1600

XLDnaute Barbatruc
Re

[aparté de l'aparté]
Je voulais parler de la restitution de l'Array dans la grange.
Pardon la Range
Ceci dit je trouve votre code trés joli.
Je voulais juste faire la blague.
J'ai échoué.
Je suis désolé.
[/aparté de l'aparté]

Sinon, pour la question, j'essaie (mais sans trouver) quel est le contexte réel de la question (ou plutôt du projet de Gwenole) ?
 

mapomme

XLDnaute Barbatruc
Supporter XLD
[aparté de l'aparté]
Je voulais parler de la restitution de l'Array dans la grange.
Pardon la Range
Ceci dit je trouve votre code trés joli.
Je voulais juste faire la blague.
Je suis désolé.
[/aparté de l'aparté]
Moi aussi, je blaguais :p

Sinon, pour la question, j'essaie (mais sans trouver) quel est le contexte réel de la question (ou plutôt du projet de Gwenole) ?
Oui parce que le nouvelle demande me laisse un peu perplexe quant au but recherché.
 

Dudu2

XLDnaute Barbatruc
C'est parfait comme cela !
Cool.
Sur le tableau original de @Gwenole_50, je me suis aussi essayé à ce que j'appelle le "zip programing", c'est à dire faire un code le plus concentré possible.
- Noms de variables les plus limités possible (ne pas les déclarer c'est encore mieux)
- Un max d'instructions sur une même ligne
- Zéro commentaire
Le truc totalement incompréhensible et immaintenable. Voilà ce que ça donne... Et ça marche ! :cool:
VB:
Sub ZipProgram()
    'Dim c As Range, i&, j&, k&, n&, p&, t
    Randomize: p = 357: ReDim t(1 To p): Application.ScreenUpdating = False
    For Each c In [AG7:AG11]: For i = 1 To c.Value
            n = Int(p * Rnd + 1): p = p - 1: j = 0
            For k = 1 To UBound(t): If t(k) = vbEmpty Then j = j + 1: If j = n Then Exit For
            Next k: t(k) = c.Row - [AG7].Row + 1
    Next i, c
    For k = 1 To UBound(t): [J6].Offset(-1 + Int((k + 20) / 21) * 2, (k - 1) Mod 21).Value = t(k): Next k
End Sub
 

Dudu2

XLDnaute Barbatruc
Bonjour @Staple1600,
Tu as raison, False c'est beaucoup trop long !
Vive la Zip Attitude
1610770379049.gif

En plus ça existe vraiment !

Edit: de là à faire du code en trop y a quand même une marge. J'ai regroupé 2 fonctions en 1 dans le fichier du post #17 que @Gwenole_50 devrait récupérer à nouveau.
 
Dernière édition:

Statistiques des forums

Discussions
311 733
Messages
2 082 015
Membres
101 870
dernier inscrit
Dethomas