Tirage au sort multiple via script

Bonjour

Je souhaite créer un fichier de tirage au sort, numéro par numéro à l'aide d'un script.

Dans l'onglet Liste j'ai crée la plage à utiliser pour un alea.entre.bornes en colonne B

Je souhaite que lorsque l'on clique sur le bouton vert (qui sert de main innocente ), cela affiche une valeur aléatoire de cette plage en cellule Tirage!B6 et que le nombre soit collé en valeur afin d'être figé.

Lorque l'on reclique à nouveau sur le bouton, un nouveau numéro apparait en cellule B7 etc

Lorsque l'on clique sur le bouton rouge "initialisation" on supprime tous les tirages effectués.

Idéalement je souhaite ne pas pouvoir tirer 2 fois le même numéro mais si c'est complexe à scripter je pensais mettre dans ma colonne Tirage!B une MFC pour colorer les doublons et ainsi visualiser qu'il suffit juste d'effectuer un nouveau tirage.

https://docs.google.com/spreadsheets/d/19nmoskFfp4ByfEc_kypp64HRXYRKSrFkfCKpdX5CJ-4/edit#gid=0

Bonjour,

au passage, en B1 de l'onglet Liste, tu peux utiliser la fonction sequence https://support.google.com/docs/answer/9368244?hl=fr

=sequence(Tirage!B4-Tirage!B3+1;Tirage!B3;1;1)

tirage au sort ...

complété corrigé ci-dessous

Top

Ca marche nickel. Ca démarre en B5 et je n'ai pas réussi dans ton script à le faire démarrer en B6 mais j'ai adapté mon fichier.

De même pour le bouton initialisation une petite macro enregistrée est bien suffisante.

Merci.

Et merci pour la fonction sequence. J'apprends toujorus de nouvelles choses avec toi :)

Petite question, je vois que n'utilise pas ma plage créée avec le query mais tu te bases directement des valeur min et max que je veux enregistrer.

Après test, je peux tomber sur la valeur 0 alors que mon min est à 1

De même je ne sais pas si c'est du bol mais je tombe facilement sur des doublons. Je vois que tu utilises un Math.random. Il fait exactement comme ALEA.ENTRE.BORNES?

Ca marche nickel. Ca démarre en B5 et je n'ai pas réussi dans ton script à le faire démarrer en B6 mais j'ai adapté mon fichier.

en fait, j'avais mis un titre à B5 justement pour commencer en B6 avec

.getNextDataCell(SpreadsheetApp.Direction.UP).offset(1,0)

Petite question, je vois que n'utilise pas ma plage créée avec le query mais tu te bases directement des valeur min et max que je veux enregistrer.

Après test, je peux tomber sur la valeur 0 alors que mon min est à 1

De même je ne sais pas si c'est du bol mais je tombe facilement sur des doublons. Je vois que tu utilises un Math.random. Il fait exactement comme ALEA.ENTRE.BORNES?

en effet, erreur de ma part

sh.getRange('B'+sh.getMaxRows()).getNextDataCell(SpreadsheetApp.Direction.UP).offset(1,0).setValue(data[Math.floor(Math.random() * data.length)])

bien sûr !

explication ... data comprend tous les nombres de min à max sauf ceux déjà sortis, cela donne un certain nombre de données

je tire au sort un nombre égal entre 0 et le nombre de données, et je tire alors le xième nombre de data (je n'avais pas fait cette dernière phase)

je me demande par contre si je ne sors pas de la liste par le haut ?? à voir

je me demande par contre si je ne sors pas de la liste par le haut ?? à voir

pas de soucis avec Math.floor()...

function getRandom() {
  var sh = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Tirage')
  var deja = sh.getRange('B6:B' + sh.getLastRow()).getValues().flat().filter(r => r != '')
  var data = []
  for (var i=sh.getRange('B3').getValue();i<=sh.getRange('B4').getValue();i++) {if (deja.indexOf(i)==-1) data.push(i)}
  sh.getRange('B'+sh.getMaxRows())
    .getNextDataCell(SpreadsheetApp.Direction.UP)
    .offset(1,0)
    .setValue(data[Math.floor(Math.random() * data.length)])
}
function init(){
  var sh = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Tirage')
  sh.getRange('B6:B' + sh.getLastRow()).clearContent()
}

Un grand merci.

J'aime bien ta minutie. Même dans ta fonction init tu créés une variable alors qu'elle n'est pas obligatoire.

Rechercher des sujets similaires à "tirage sort multiple via script"