Bonsoir les amis
je souhaite generer une liste aléatoire entre bornes, avec la possibilité d'exclure un chiffre au regard des chiffres de la colonne de gauche.
dans l'exemple que je joins, je ne souhaite pas que le 6 de la collone "base" revienne dans le resultat.
Merci pour votre assistance
Pièces jointes
question forum alea entre bornes avec exception.xlsx
Bonsoir les amis
je souhaite generer une liste aléatoire entre bornes, avec la possibilité d'exclure un chiffre au regard des chiffres de la colonne de gauche.
dans l'exemple que je joins, je ne souhaite pas que le 6 de la collone "base" revienne dans le resultat.
Merci pour votre assistance
Bonsoir,
avec une fonction perso à insérer dans un module :
VB:
Function AleaSauf&(bInf&, bSup&, Exclude&)
Dim a&, continue as Boolean
Do
a = Application.WorksheetFunction.RandBetween(bInf, bSup)
If a = Exclude Then continue = True Else continue = False
Loop Until continue = False
AleaSauf = a
End Function
Pour les deux cas cités dans le message #2 .
Via une formule en E9 qui est recopiée 1999 fois vers le bas soit 2 000 formules en tout.
Frapper la touche de fonction F9 pour relancer un tirage.
Premier cas : la valeur de la colonne E (résultat du calcul) doit être différente de la valeur de la même ligne de la colonne D. La formule en D9 est : =SI(D9=1;ALEA.ENTRE.BORNES(2;25);SI(D9=25;ALEA.ENTRE.BORNES(1;24);SI(ALEA.ENTRE.BORNES(1;24)<=D9;ALEA.ENTRE.BORNES(1;D9-1);ALEA.ENTRE.BORNES(D9+1;25))))
Deuxième cas : la valeur de la colonne E (résultat du calcul) doit toujours être différente de la valeur 6. La formule en D9 est : =SI(ALEA.ENTRE.BORNES(1;24)<6;ALEA.ENTRE.BORNES(1;5);ALEA.ENTRE.BORNES(7;25))
nota 1 : les nombres aléatoire sont entre 1 et 25 nota 2 : on a ajouté des colonnes de vérification.
re
Bonjour @mapomme
au premier regard il y a un trou dans ton raisonnement sauf erreur de ma part
car j'ai testé tout a l'heure 2 alea entre bornes lancé peuvent donner le même nombre
Bonjour.
Rappel: mon objet ListeAléat supporte une liste de numéros allant de 1 à un maximum spécifié, en ordre aléatoire et sans doublon. Elle est aussi munie d'une méthode Supprimer permettant comme son nom l'indique d'en supprimer.
Bien sûr et alors ? Il n'est pas dit par le demandeur que les valeurs de la colonne E doivent être différentes entre-elles. Je réponds à la question posée . Si elle est mal posée, je n'y peux rien .
nota : et en plus, je me suis fendu de deux interprétations !
c'est pas entre cellule que je disais
c'est entre deux alea dans la formule même
pour le 1 ou 25 ok mais apres avec ton < que tu reviens sur tes positions
encore une fois me semble t il
J'explique mes formule en espérant qu'au cours de mes explications je ne découvre pas "un gros loup" !
Cas n° 1 : sur une même ligne D et E doivent être différents
=SI(D9=1;ALEA.ENTRE.BORNES(2;25);SI(D9=25;ALEA.ENTRE.BORNES(1;24);SI(ALEA.ENTRE.BORNES(1;24)<=D9;ALEA.ENTRE.BORNES(1;D9-1);ALEA.ENTRE.BORNES(D9+1;25))))
Si D9 = 1, on retourne un nombre aléatoire entre 2 et 24 (donc forcément diff. de 1)
Si D9 = 25, on retourne un nombre aléatoire entre 1 et 24 (donc forcément diff. de 25)
sinon on calcule un nombre aléatoire X entre 1 et 24
si X est inférieur à D9, on retourne un nombre aléatoire entre 1 et (D9-1) (donc forcément diff. de D9)
si X est supérieur à D9, on retourne un nombre aléatoire entre (D9+1) et 25 (donc forcément diff. de D9)
A priori, la formule ne retournera jamais D9.
Cas n° 2 : jamais la valeur 6 =SI(ALEA.ENTRE.BORNES(1;24)<6;ALEA.ENTRE.BORNES(1;5);ALEA.ENTRE.BORNES(7;25))
On calcule un nombre Z entre 1 et 24
si Z est inférieur à 6, on retourne un nombre aléatoire entre 1 et 5 (donc forcément diff. de 6)
si Z est supérieur à 6, on retourne un nombre aléatoire entre 7 et 25 (donc forcément diff. de 6)
Bonjour
Toutes mes excuses. j'avais oublié de recopie la formule. précision
en fait, je veux que la valeur de la colonne E (résultat du calcul) soit différente de la valeur de la même ligne colonne D ?
Merci beaucoup
La formule pour le cas 1 doit répondre à votre souhait (enfin je crois ) :
=SI(D9=1;ALEA.ENTRE.BORNES(2;25);SI(D9=25;ALEA.ENTRE.BORNES(1;24);SI(ALEA.ENTRE.BORNES(1;24)<=D9;ALEA.ENTRE.BORNES(1;D9-1);ALEA.ENTRE.BORNES(D9+1;25))))
re @mapomme
ha ben ca va tout de suite mieux avec des explications
ce qui m'a perdu c'est ce qui est entouré
je me suis dit "pourquoi recommence t il si c'est bon ?