Tri aleatoire
Résolu/Fermé
mic6259
-
30 janv. 2015 à 18:32
ccm81 Messages postés 10905 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 27 décembre 2024 - 1 févr. 2015 à 12:12
ccm81 Messages postés 10905 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 27 décembre 2024 - 1 févr. 2015 à 12:12
5 réponses
JvDo
Messages postés
1978
Date d'inscription
mercredi 27 juillet 2005
Statut
Membre
Dernière intervention
28 septembre 2020
858
31 janv. 2015 à 07:59
31 janv. 2015 à 07:59
Bonjour,
oui, tu peux.
En formules, c'est un peu plus coton qu'en macro mais ça peut intéresser du monde.
Voici donc une possibilité qui fait appel à la macro complémentaire de Laurent Longre (morefunc) et à des références circulaires qui, d'habitude, ne sont pas les bienvenues :
1) tu vas dans les options d'excel rubrique formules et tu y mets calcul en manuel et tu coches itératif avec 1 en nbre maxi d'itérations. Tu quittes en faisant OK
2) dans la feuille qui te convient, tu sélectionnes la zone A1:A90 et tu saisis la formule matricielle :
3) en B1 :
4) en C1 :
5) en E1 :
6) en G1 : tu saisis le texte nouveau jeu
7) en H1 : tu définis le nom nouveau
Le principe de fonctionnement :
+A1:A90 contient la séquence aléatoire des valeurs tirées sans remise.
+pour réinitialiser la séquence aléatoire, il faut saisir ok dans nouveau (H1) puis l'effacer pour pouvoir lancer les tirages.
+on effectue les tirages de 1 à 90 en faisant <F9> (recalcul manuel)
+quand tu arrives à 90, tu bloques tant que tu n'as pas relancé une nouvelle séquence avec le ok précédent (en H1).
+tu caches les colonnes A et E. E1 sert de compteur qui s'incrémente à chaque recalcul grâce à la référence circulaire et au calcul itératif autorisé mais limité à une boucle.
j'espère que je n'ai pas laissé trainer une virgule à la place d'un point-virgule.
cordialement
oui, tu peux.
En formules, c'est un peu plus coton qu'en macro mais ça peut intéresser du monde.
Voici donc une possibilité qui fait appel à la macro complémentaire de Laurent Longre (morefunc) et à des références circulaires qui, d'habitude, ne sont pas les bienvenues :
1) tu vas dans les options d'excel rubrique formules et tu y mets calcul en manuel et tu coches itératif avec 1 en nbre maxi d'itérations. Tu quittes en faisant OK
2) dans la feuille qui te convient, tu sélectionnes la zone A1:A90 et tu saisis la formule matricielle :
=ALEAS(90;1;90;nouveau<>"ok")que tu valides par CTRL+MAJ+ENTER
3) en B1 :
=SI(ET(E1>0;E1<91);"tirage n° "& E1 &" : ";SI(nouveau="ok";"merci d'effacer le ok";SI(E1=0;"faire <F9> pour lancer le tirage";"")))
4) en C1 :
=SI(E1=91;"Fin du tirage";SI(nouveau="ok";"";SI(E1>0;INDEX($A$1:$A$90;$E$1);"")))
5) en E1 :
=SI(nouveau="ok";0;SI(E1=91;91;E1+1))
6) en G1 : tu saisis le texte nouveau jeu
7) en H1 : tu définis le nom nouveau
Le principe de fonctionnement :
+A1:A90 contient la séquence aléatoire des valeurs tirées sans remise.
+pour réinitialiser la séquence aléatoire, il faut saisir ok dans nouveau (H1) puis l'effacer pour pouvoir lancer les tirages.
+on effectue les tirages de 1 à 90 en faisant <F9> (recalcul manuel)
+quand tu arrives à 90, tu bloques tant que tu n'as pas relancé une nouvelle séquence avec le ok précédent (en H1).
+tu caches les colonnes A et E. E1 sert de compteur qui s'incrémente à chaque recalcul grâce à la référence circulaire et au calcul itératif autorisé mais limité à une boucle.
j'espère que je n'ai pas laissé trainer une virgule à la place d'un point-virgule.
cordialement
ccm81
Messages postés
10905
Date d'inscription
lundi 18 octobre 2010
Statut
Membre
Dernière intervention
27 décembre 2024
2 428
31 janv. 2015 à 14:44
31 janv. 2015 à 14:44
Bonjour à tous
Pour compléter la proposition de JvDo une solution vba
https://www.cjoint.com/?3AFo1aMqEG1
Cdlmnt
Pour compléter la proposition de JvDo une solution vba
https://www.cjoint.com/?3AFo1aMqEG1
Cdlmnt
JvDo
Messages postés
1978
Date d'inscription
mercredi 27 juillet 2005
Statut
Membre
Dernière intervention
28 septembre 2020
858
1 févr. 2015 à 05:26
1 févr. 2015 à 05:26
Bonjour ccm81,
j'ai regardé ta proposition par macro et je voudrais attiré ton attention sur la distribution de tes tirages.
J'en ai fait 1000 successifs.
J'ai ensuite calculé les fréquences de sorties de chaque numéro selon l'ordre de tirage et j'ai obtenu ce graphique :
ça n'est pas très uniforme. Tu as un peu plus de 5 fois plus de chance de tomber sur le numéro n au tirage n.
Et c'est évidemment pire avec 90 numéros.
J'ai refait le calcul avec la fonction Aleas() de Morefunc et j'obtiens quelque chose de plus applati :
cordialement
j'ai regardé ta proposition par macro et je voudrais attiré ton attention sur la distribution de tes tirages.
J'en ai fait 1000 successifs.
J'ai ensuite calculé les fréquences de sorties de chaque numéro selon l'ordre de tirage et j'ai obtenu ce graphique :
ça n'est pas très uniforme. Tu as un peu plus de 5 fois plus de chance de tomber sur le numéro n au tirage n.
Et c'est évidemment pire avec 90 numéros.
J'ai refait le calcul avec la fonction Aleas() de Morefunc et j'obtiens quelque chose de plus applati :
cordialement
ccm81
Messages postés
10905
Date d'inscription
lundi 18 octobre 2010
Statut
Membre
Dernière intervention
27 décembre 2024
2 428
Modifié par ccm81 le 1/02/2015 à 11:26
Modifié par ccm81 le 1/02/2015 à 11:26
Bonjour JvDo
Je pense que le problème vient du fait que je n'ai pas assez mélangé le tableau TN
Visiblement (numax/2) fois, ça ne mélange pas suffisamment donc peut être avec numax fois ça lissera davantage
Je vais tenter la chose et si tu peux m'envoyer ton fichier test au format excel 2003 ça me fera gagner du temps
En tout cas merci pour ta remarque et bon dimanche
Cordialement
Je pense que le problème vient du fait que je n'ai pas assez mélangé le tableau TN
' ici on remplit TN
For k = 1 To numax
TN(k) = k
Next k
' ici on mélange TN en permutant deux cases au hasard (numax\2) fois
For k = 1 To numax \ 2
n1 = Int(numax * Rnd) + 1
n2 = Int(numax * Rnd) + 1
num = TN(n1)
TN(n1) = TN(n2)
TN(n2) = num
Next k
Visiblement (numax/2) fois, ça ne mélange pas suffisamment donc peut être avec numax fois ça lissera davantage
Je vais tenter la chose et si tu peux m'envoyer ton fichier test au format excel 2003 ça me fera gagner du temps
En tout cas merci pour ta remarque et bon dimanche
Cordialement
ccm81
Messages postés
10905
Date d'inscription
lundi 18 octobre 2010
Statut
Membre
Dernière intervention
27 décembre 2024
2 428
1 févr. 2015 à 12:12
1 févr. 2015 à 12:12
Re salut JvDo
Effectivement en permutant 3*numax fois ça va beaucoup mieux
https://www.cjoint.com/?3Bbmu1AUOPj
Cdlmnt
Effectivement en permutant 3*numax fois ça va beaucoup mieux
https://www.cjoint.com/?3Bbmu1AUOPj
Cdlmnt
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Raymond PENTIER
Messages postés
58777
Date d'inscription
lundi 13 août 2007
Statut
Contributeur
Dernière intervention
24 décembre 2024
17 258
31 janv. 2015 à 04:26
31 janv. 2015 à 04:26
Non.
1 févr. 2015 à 08:20
J'ai mis comme indiqué toutes les formules en place , mais j'ai de A1:A90 B1 C1 et E1 #NOM?,
et en appuyant sur F9 rien ne ce passe
Ne pourrait-on pas le faire en VBA? ou plus d'explications, car ccm81 m'inquiète
Merci encore