Tirage aléatoire de carte [Résolu]

Eliot7500 18 Messages postés dimanche 22 décembre 2013Date d'inscription 4 janvier 2014 Dernière intervention - 22 déc. 2013 à 23:57 - Dernière réponse : ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionContributeurStatut 11 avril 2018 Dernière intervention
- 28 déc. 2013 à 17:45
Bonjour,
Je suis en train de créer un formulaire et j'ai besoin de votre aide. Je souhaite tirer de façon aléatoire des cartes, à chaque tirage il faut éliminer la puis les cartes qui ont déjà été tiré. Je ne sais pas ce qu'il faut que je rajoute à ma formule pour carte2 et carte3. Est ce que quelqun peux m'aider?

Dim carte1 as integer
Dim carte2 as integer
Dim carte3 as integer

Randomize
carte1 = Int(52 * Rnd) + 1

Randomize
carte2 = Int(52 * Rnd) + 1

Randomize
carte3 = Int(52 * Rnd) + 1

J'ai un autre soucis quand je suis en mode développeur dans l'onglet visual basic le formulaire ne s'affiche pas. Du coup je ne peux plus faire de modification. Je ne vois pas ou je peux afficher le formulaire.
Afficher la suite 

Votre réponse

16 réponses

Meilleure réponse
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionContributeurStatut 11 avril 2018 Dernière intervention - Modifié par ucfoutu le 28/12/2013 à 11:14
1
Merci
Ou en es-tu ?
Pour continuer au rang de la réflexion.
Que se passe-t-il dans les faits avec un jeu de cartes que l'on veut distribuer aléatoirement ? ===>> on "touille" le paquet de cartes, puis on distribue les cartes dans l'ordre "touillé" du paquet, en commençant par celle du dessus, puis la suivante, etc ... ===>> donc, de cette manière, on y puise la carte de rang 1, puis celle de rang 2, puis celle de rang 3 et ainsi de suite jusqu'à la dernière.
Comment faire la même chose en informatique ? ===>>>
1) On met toutes les cartes dans un tableau dynamique
2) on "touille" aléatoirement ce tableau dynamique
3) on y puise les cartes tour à tour en commençant par la première, puis la seconde, etc ...

Comment "touiller" un tableau dynamique, alors ? ===>>>
Si tu avais utilisé avec soin le moteur de recherche de ce forum, tu serais "tombé" sur plusieurs discussions auxquelles j'ai participé et la solution que j'y ai donnée !
En voilà une (parmi d'autres) de ces discussions :

http://codes-sources.commentcamarche.net/forum/affich-1621301-debutant-vba-aide-pour-tirage-aleatoire

Le code nécessaire est dans mon message du 5 janv. 2013 à 20:04

________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviend

Merci ucfoutu 1

codes-sources a aidé 80 internautes ce mois-ci

Commenter la réponse de ucfoutu
NHenry 14183 Messages postés vendredi 14 mars 2003Date d'inscriptionModérateurStatut 27 mai 2018 Dernière intervention - 23 déc. 2013 à 00:39
0
Merci
Bonsoir,

Pour éviter le rejeu des cartes, regardes la classe Collection, elle te sera utile, je pense.

Pour le formulaire, je ne vois pas ce que ça peut être, pas assez d'info.
Commenter la réponse de NHenry
Eliot7500 18 Messages postés dimanche 22 décembre 2013Date d'inscription 4 janvier 2014 Dernière intervention - 23 déc. 2013 à 09:11
0
Merci
J'ai trouvé cet article là : http://codes-sources.commentcamarche.net/faq/370-probabilites mais cela ne m'aide pas beaucoup, il ne parle de tirage avec un nombre exclu. Il y a peut être un autre article qui en parle mais je n'ai pas trouvé.

Pour mon problème de formulaire. Quand j'ouvre Virtual Basic Microsoft mon formulaire qui a déjà été crée devrait être visible afin que je puisse le modifié. Cependant il est invisible, la fenêtre de l'Userform1 n'est pas là. Je ne vois pas ou je peux faire apparaître cette fenêtre.
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionContributeurStatut 11 avril 2018 Dernière intervention - 25 déc. 2013 à 17:44
Ah ! Et elle est où, cette "boucle loop while" ?
Eliot7500 18 Messages postés dimanche 22 décembre 2013Date d'inscription 4 janvier 2014 Dernière intervention - 25 déc. 2013 à 17:47
Private Sub UserForm_Initialize()

Randomize
carte1 = Int(10 * Rnd) + 1
Do
Randomize
carte2 = Int(10 * Rnd) + 1
Loop While carte2 = carte1
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionContributeurStatut 11 avril 2018 Dernière intervention - 25 déc. 2013 à 18:59
Ah ! Tu ne tires que deux cartes ?
Que vas-tu (comptes-tu) faire pour les tirages suivants ?
Eliot7500 18 Messages postés dimanche 22 décembre 2013Date d'inscription 4 janvier 2014 Dernière intervention - 25 déc. 2013 à 19:44
Je tire d'autres cartes mais je ne voulais pas même tous le script .Pour les tirages suivant, j'écris la même chose sauf que je rajoute une condition en plus apres loop while.

Par contre je ne sais pas comment réinitialiser les variables cartes à la fin du jeu dans le but de relancer le tirage des cartes au début du jeu. Une idée?
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionContributeurStatut 11 avril 2018 Dernière intervention - 25 déc. 2013 à 20:54
Une idée ?
Il me semble que tant NHenry que moi-même t'en avons données (et pas une, mais plusieurs).
Mais tu t'obstines sur une "lancée" qui, dans le meilleurs des cas, ne fera qu'alourdir et ralentir. (et ce : de plus en plus avec l'avancement de tes tirages, compte tenu d'une évidence majeure : plus tu aurais déjà tiré de cartes et moins ta boucle aura de "chances" de tomber sur une carte non déjà tirée !)
Mais c'est dans ce cas ta seule affaire (ton obstination et ta méthode).
Voilà voilà ...
Quant à
"Par contre je ne sais pas comment réinitialiser les variables cartes à la fin du jeu dans le but de relancer le tirage des cartes au début du jeu"
===>> nous ne savons même pas (tu n'en a rien dit), dans "quoi" tu as mis ces cartes au départ !
Commenter la réponse de Eliot7500
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionContributeurStatut 11 avril 2018 Dernière intervention - 25 déc. 2013 à 21:07
0
Merci
Enfin quoi : réfléchis un peu :
Lorsque tu tires une carte au hasard dans un jeu, elle n'est plus dans le paquet et ne risque donc pas d'être tirée à nouveau au prochain tirage, hein ...
Idem en informatique : que ce soit avec une collection, une listbox ou une plage de cellules : tu retires (de la collection, de la listbox ou de la plage de cellules) chaque carte déjà tirée et le prochain tirage se fait donc sur les cartes restantes (dans la collection, dans la listbox ou dans la plage de cellules).
Voilà !
Et toute autre "approche" serait très lourde, sinon insensée.
Commenter la réponse de ucfoutu
Eliot7500 18 Messages postés dimanche 22 décembre 2013Date d'inscription 4 janvier 2014 Dernière intervention - 28 déc. 2013 à 17:28
0
Merci
Je m'en suis sorti. Par contre je n'arrive pas à afficher une valeure numérique dans une textbox à l'ouverture du formulaire. J'ai essayé d'insérer lorsque je clicke sur mon bouton pour ouvrir le forumulaire. Mais cela ne fonctionne pas.
Sub Bouton3_Clic()
UserForm1.Show
Dim balance As Integer
balance=1000
TextBox2.Value = balance
End Sub
Commenter la réponse de Eliot7500
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionContributeurStatut 11 avril 2018 Dernière intervention - 28 déc. 2013 à 17:45
0
Merci
Ta nouvelle question n'a rien à voir avec le sujet (Tirage aléatoire de carte) de la présente discussion !
Si la difficulté objet de CETTE discussion est résolue, sujet à clore (un clic sur le tag "Résolu" au niveau de ton premier message).
Si tu as une AUTRE question ===>>> AUTRE discussion (discipline indispensable).
Commenter la réponse de ucfoutu

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.