Excel & 1d100 Sans Limite

le Glauque Messages postés 66 Statut Membre -  
 Anonyme -
Bonjour à tous,

J’aimerai savoir s’il est possible de simuler dans une cellule le tirage d’un dé à 100 faces (d100) Sans Limite.

« Mais qu’est-ce donc que cela ?!..., vous interloquerez vous »
Et bien, il s’agit de tirer au hasard un nombre de 1 à 100. Jusqu’ici, rien de trop compliqué.
Mais deux alternatives peuvent se produire :
- Si ce nombre est compris entre 1 et 5, on retire à nouveau 1d100 et on l’ôte à ce résultat.
- Si le nombre est compris entre 96 et 100, on retire à nouveau 1d100 et on l’ajoute à ce résultat.
Tout en sachant que cela peut se cumuler.

Des exemples ? Mais bien sûr :

Ex A :
1er jet : 99
Je relance le dé pour y ajouter son résultat : 26.
On s’arrête là pour un total de 99+26 = 125

Ex B :
1er Jet : 01
Je relance le dé pour en retrancher le résultat : 76
On s’arrête là pour un total de : 01-76 = -75

Ex C :
1er Jet : 98
Je relance le dé pour y ajouter son résultat : 96
Je relance le dé pour y ajouter son résultat : 64.
On s’arrête là pour un total de 98+96+64 = 258

Ex D :
1er Jet : 04
Je relance le dé pour en retrancher le résultat : 96
Je relance le dé pour en retrancher le résultat : 02
Je relance le dé pour y ajouter le résultat : 65
On s’arrête là pour un total de : 04-96-02+65 = -29

Voilà…

Bon, ensuite, on peut créer des nuances, avec des jets d’1d100 Sans Limite Supérieure, où la relance ne se fait que sur un 96-100.

L’idée étant de pouvoir une liste d’individus qui ont besoin de faire un jet à chaque tour.
Ainsi, en appuyant sur un bouton, par exemple, je peux assigner un résultat de jet à 20 personnes (qui apparaît dans une case à côté de leur nom), au lieu de faire tous les jets des protagonistes.

Merci d’avance,

Le Glauque
A voir également:

8 réponses

Raymond PENTIER Messages postés 71857 Date d'inscription   Statut Contributeur Dernière intervention   17 388
 
Curieux et intéressant, comme défi !

Le gros problème, avec la génération de nombres aléatoires, c'est que le résultat change chaque fois qu'Excel relance un calcul, n'importe où dans la feuille ! C'est à dire quasiment à chaque appui sur une touche du clavier ...

Alors, avant que je ne me plonge dans l'étude approfondie de ton exercice, commence par me dire si tu es d'accord avec le principe de jeu suivant :
* une cellule particulière est dédiée au lancement du dé ;
* c'est toi (ou le joueur) qui saisis le nombre dans la case appropriée (dès la saisie validée, l'affichage du dé aura déjà changé !) ;
* il y a donc un risque certain de tricherie, puisqu'il n'est pas possible à Excel de mémoriser le résultat et de vérifier l'exactitude de la saisie manuelle !

Si tu peux tolérer ces restrictions, je continuerai à réfléchir à ton jeu.
0
le Glauque Messages postés 66 Statut Membre 1
 
>Curieux et intéressant, comme défi !

Hehehe, merci !...


>Le gros problème, avec la génération de nombres aléatoires, c'est que le résultat change chaque fois qu'Excel relance un calcul, n'importe où dans la feuille ! C'est à dire quasiment à chaque appui sur une touche du clavier ...

Oui, c'est un peu le problème avec la formule ALEA()


>Alors, avant que je ne me plonge dans l'étude approfondie de ton exercice, commence par me dire si tu es d'accord avec le principe de jeu suivant :

D'accord...


>* une cellule particulière est dédiée au lancement du dé ;

Oui. C'est la colonne "Jet".


>* c'est toi (ou le joueur) qui saisis le nombre dans la case appropriée (dès la saisie validée, l'affichage du dé aura déjà changé !) ;

En l'occurrence, c'est le Maître de Jeu qui s'en charge (donc moi ou un autre en fonction des parties).


>* il y a donc un risque certain de tricherie, puisqu'il n'est pas possible à Excel de mémoriser le résultat et de vérifier l'exactitude de la saisie manuelle !

Ca n'est pas vraiment un problème : vu que c'est le Maître de Jau qui a l'ordinateur ss les yeux, il ne trichera pas.
Le soucis, en revanche, c'est que s'il manipule une autre case ds le même doc il ne faut pas que tout soit recalculé.
L'idéal serait qu'il y ait un bouton, sur lequel serait raccorché une macro, ou un truc ds ce genre.
Au début de chaque rd, il n'aurait qu'à appuyer dessus pr faire les jets de ts le monde !


>Si tu peux tolérer ces restrictions, je continuerai à réfléchir à ton jeu.

J'espère que ça te convient...

Pour éclaircir un peu, il est ici question de Jeu de Rôle...

Lors d'un combat, on a besoin de "tirer l'Initiative" des divers protagonistes, pour savoir dans quel ordre ils vont agir.
Ce qui est résolu en 2 secondes et quelques jets de dés lorsqu'il y a 4 combattants devient tout de suite plus long lorsqu'on en arrive à une dizaine.
L'idée est donc d'automatiser tout ça, pour qu'à chaque début de round, je n'ai qu'à cliquer sur un bouton et que les jets se fassent tous seuls.

Ensuite, si je veux "pousser" le truc jusqu'au bout, avec un autre bouton, je les classe automatiquement du plus grand au plus petit, et j'ai mon ordre tout joli sous les yeux (mais ça, crée une macro de tri, je sais faire).

Voilà, tu sais tout !

J'ai crée un doc exemple... mais je ne sais pas comment le joindre à mon post...

Merci pour ta réponse si rapide.
0
Anonyme
 
Bonjour

Idée à suivre :

- 1 case à cocher : Cochée = calcul / Décochée = Arrêt calcul
- 1 cellule avec une formule **ALEA()** liée la case à cocher et à l'autre cellule
- 1 cellule mémoire avec le résultat de l'autre cellule quand la case n'est pas cochée

Activez les fonctions d'itérations !

Pourquoi ne pas utiliser une fonction / une macro afin de pouvoir mémoriser ?

Générer un nombre aléatoire
XlWiki:GenererNombreAleatoire
http://xlwiki.free.fr/wiki/wakka.php?wiki=GenererNombreAleatoire

La formule ALEA()
Syntaxe : =ALEA()
La formule ALEA.ENTRE.BORNES()
Syntaxe : =ALEA.ENTRE.BORNES(Minimum;Maximum)
Syntaxe : =Minimum+ENT((Maximum-Minimum+1)*ALEA())
Générer un nombre entre a et b (inclus) par pas de k
Syntaxe : =ENT(((b-a)/k+1)*ALEA())*k+a
Syntaxe : =ENT(((10-1)/0,5+1)*ALEA())*0,5+1
Simulation d'une loi normale
* Avec LOI.NORMALE.INVERSE()
Syntaxe : =LOI.NORMALE.INVERSE(ALEA();m;sigma)
* Méthode de Box-Müller
Syntaxe : =m+sigma*RACINE(-2*LN(1-ALEA()))*COS(2*PI()*ALEA())

Merci
0
lermite222 Messages postés 9042 Statut Contributeur 1 191
 
Bonjour,
Une approche de ton exposé !
Sub Tir20()
    Sheets("Feuil1").Select
    For i = 4 To 24
        Cells(i, 2) = TirageD100()
    Next i
End Sub


Public Function TirageD100() As Integer
Dim Buff As Integer
Dim Tampon As Integer
Reco:
    Select Case Buff
    Case 0
        Buff = Tire()
        Tampon = Buff
        GoTo Reco
    Case Is > 95
        Buff = Tire()
        Tampon = Tampon + Buff
        GoTo Reco
    Case Is < 6
        Buff = Tire()
        Tampon = Tampon - Buff
        GoTo Reco
    End Select
    TirageD100 = Tampon
End Function
Private Function Tire() As Integer
    Tire = Int((100 * Rnd) + 1)
End Function

Mais il peut arriver qu'il y ai 2 résultats identiques, tester et recommencer un tirage si double !
A+
0
Anonyme
 
Bonjour

Si ça peut aider :
la fonction ALEA - Excel Downloads Forums :
https://www.excel-downloads.com/threads/la-fonction-alea.43732/
(J'avais perdu le lien il y a 30 minutes environ / 30 minutes que je cherche = donc je le propose;))

Je cite :
Public Function DES(ByRef NB As Range) As Integer
Application.Volatile (False)
Randomize: DES = Int((10 * Rnd) + 1)
End Function

Je cite :
Feuil1!A1 : cellule de référence

En A2 de n'importe quelle feuille : =SI(Feuil1!$A$1=1;ALEA();A2)
formule pouvant être copiée dans n'importe quelle cellule de n'importe quelle feuille (sauf en Feuil1!A1 évidemment !)

Si la cellule Feuil1!A1 contient le chiffre 1, la fonction ALEA() fonctionne.
Dans les autres cas, même si Feuil!1$A$1 est vide, la valeur ne se modifie pas.

****
/!\ Pour éviter le message (d'erreur) de référence circulaire activez les fonctions d'itérations !

Merci
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
lermite222 Messages postés 9042 Statut Contributeur 1 191
 
Re à tous,
Si faut pas de doublon remplacer Tir20() par
Sub Tir20_SD()
Dim TB(1 To 20) As Integer
Dim i As Integer, e As Integer, g As Integer
    Sheets("Feuil1").Select
    Randomize Timer
    For i = 1 To 20
reco:
        g = TirageD100()
        For e = 1 To i - 1
            If TB(e) = g Then GoTo reco
        Next e
        TB(i) = g
        Cells(i + 3, 2) = g
    Next i
End Sub


Faut de toute façon ajouter la ligne Randomize Timer sinon c'est toujours la même série.
0
le Glauque Messages postés 66 Statut Membre 1
 
Alors :
Non, les doublons, c'est pas un problème : plusieurs protagonistes peuvent faire le même jet de dés.
Sur ta formule précédente (la 1ère), dois-je tout de même ajouter "Randomize Timer" ?
Est-ce que la relance se fait plus d'une fois( si un 99 et un 97 sont obtenus, par exemple) ?
0
lermite222 Messages postés 9042 Statut Contributeur 1 191 > le Glauque Messages postés 66 Statut Membre
 
oui, faut ajouter pour que le tirage soit pseudo aléatoir.
0
le Glauque Messages postés 66 Statut Membre 1
 
"Pseudo" ?
0
le Glauque Messages postés 66 Statut Membre 1
 
Alors on m'a posté une réponse sur un autre formum qui me convient bien,
J'aurais aimé vs la communiquer par PJ... mais je n'y arrive pas !

MEric encore pour tout !
0
Anonyme
 
Bonjour

http://www.cijoint.fr/cjlink.php?file=cj200808/cijQOD3uHZ.zip (Source)

La **solution** :
https://www.developpez.net/forums/d597162/logiciels/microsoft-office/excel/jet-limite/

Tu te connectes, t'enregistres ton fichier sur ton pc si tu l'as plus et tu mets le fichier ici.
Et n'oublies pas le lien ! Coches la case 'Rendre public le fichier' ici.

Merci
0