Belag55
Messages postés20Date d'inscriptionmercredi 17 décembre 2008StatutMembreDernière intervention13 février 2009
-
27 janv. 2009 à 15:29
Belag55
Messages postés20Date d'inscriptionmercredi 17 décembre 2008StatutMembreDernière intervention13 février 2009
-
27 janv. 2009 à 19:22
Bonjour,
Ma requête risque de sortir un peu de l'ordinaire.
Pour m'entrainer, je me suis amusé à réaliser un code qui permet de simuler des lancer de dés avec possibilité de choisir le nombre de dé (de 1 à 10 et le type de dé 3, 4, 6, 8, 10, 12, 20, 30 et 100 faces). Ceci par l'intermédiaire d'un formulaire qui se présente un peu comme une calculatrice où l'on click sur le nombre désiré, puis sur le type de dé et enfin le choix entre un résultat qui donne la somme ou le résultat dé par dé sur une seule box. Rien de très complexe, ni original. Là où ma requête sort de l'ordinaire, c'est que ça marche très bien et le rendu est celui souhaité, mais je reste persuadé que mon code est trop lourd et qu'il y a moyen de faire plus simple. Je ne cherche donc pas une aide pour accomplir le code, mais pour le simplifier, le corriger. Y aurait-il une âme charitable qui voudrait bien aider un débutant à progresser et à qui je pourrai envoyer le fichier svp ? ou puis-je me permettre de le poster ici ?
Belag55
Messages postés20Date d'inscriptionmercredi 17 décembre 2008StatutMembreDernière intervention13 février 2009 27 janv. 2009 à 17:14
En fait je n'ai pas osé le poster tout de suite. Je pense que le forum est plus dédié à aider ceux qui coincent plutot que de corriger les codes qui fonctionnent et je préférais donc attendre un réponse avant.
Pour ce qui est de l'interface : un userform qui présente 2 frames. Dans le 1er 10 labelbox (sous forme de bouton : special effect : 1) avec les nombre de 1 à 10 en caption. Dans le second, 9 Labelbox (meme model) avec les types de dé. Et enfin 3 CommandButton : "resultat cumulé", "résultat par dé" et "sortie". Affichage du résultat pas l'appel d'un autre Userform avec un Labelbox dont le "caption" est modifié en fonction du résultat.
Pour ce qui est du code, le voici :
Option Explicit
Option Base 1
Dim nbre, demax, i, lAncé, tabde() As Byte
Dim Resultat As Long
Dim Messag
Private Sub BTN_cumul_Click() 'donne le résultat cumulé des dés lancés
Resultat = 0
For i = 1 To nbre
Randomize
lAncé = Int(Rnd * demax + 1)
Resultat = Resultat + lAncé
Next i
UF_resul.Label1.Caption = Resultat
UF_resul.Show
End Sub
Private Sub BTN_parde_Click() 'donne le résultat de chaque dé lancé
'redéfinit la taille du tableau
ReDim tabde(nbre)
'execution d'un tirage aléatoire pour chaque dé sur la base du nombre choisi (variable nbre)
For i = 1 To UBound(tabde)
Randomize
tabde(i) = Int(Rnd * demax + 1)
Next i
Voila, ça fonctionne très bien, mais le code me semble redondant. N'y a-t-il pas moyen de faire plus simple ? Surtout dans la partie affichage du résultat. Ici j'ai utilisé select case de 1 à 10 parce que l'utilisateur n'a le choix de lancer que 10 dés maximum, mais supposons que l'utilisateur ai un choix plus important (disons 100 ) via un listbox ou textbox par exemple, je suppose qu'il y a plus simple que d'écrire 100 lignes de "case" ^^
A tiens, j'ai tout de même un petit soucis maintenant que j'y pense : dans l'affichage du résultat, j'ai été obligé de dimentionner mon userform en fonction du résultat prenant le plus de place (10 dé 100 alignés et séparés par des virgules ça prend de la largeur). Cela n'est pas très gènant en soi, mais à l'affichage d'un résultat à un seul chiffre, ça fait un peu ridicule ce grand truc presque vide. Peut-on redimentionner le labelbox et surtout le userform qui le contient en fonction du nombre de caractère ?
Merci à ceux qui ont pri le temps de s'interesser à mon cas
Belag55
Messages postés20Date d'inscriptionmercredi 17 décembre 2008StatutMembreDernière intervention13 février 2009 27 janv. 2009 à 19:22
Merci beaucoup.
Je ne connaissais pas "mid", pour le reste je vais travailler dessus.
J'apprécie particulièrement ta façon de faire : j'aime autant qu'on me guide sans me donner des réponses toutes cuites .
Lorsque j'aurai développé ça un peu mieux je posterai le correctif.
Merci encore.