Cherche correcteur

Belag55 Messages postés 20 Date d'inscription mercredi 17 décembre 2008 Statut Membre Dernière intervention 13 février 2009 - 27 janv. 2009 à 15:29
Belag55 Messages postés 20 Date d'inscription mercredi 17 décembre 2008 Statut Membre Dernière intervention 13 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 ?

5 réponses

jmf0 Messages postés 1566 Date d'inscription mardi 26 décembre 2000 Statut Membre Dernière intervention 5 avril 2013 7
27 janv. 2009 à 15:55
Bonjour,

M/ontre donc ton code, déjà...
Comment veux-tu qu'on en estime la lourdeur ou l'agilité sans le voir ????
0
Belag55 Messages postés 20 Date d'inscription mercredi 17 décembre 2008 Statut Membre Dernière intervention 13 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
   
    'définit le message de résultat en fonction du nombre de dé choisi
    Select Case nbre
        Case 1
            Messag = tabde(1)
        Case 2
            Messag = tabde(1) & ", " & tabde(2)
        Case 3
            Messag = tabde(1) & ", " & tabde(2) & ", " & tabde(3)
        Case 4
            Messag = tabde(1) & ", " & tabde(2) & ", " & tabde(3) & ", " & tabde(4)
        Case 5
            Messag = tabde(1) & ", " & tabde(2) & ", " & tabde(3) & ", " & tabde(4) _
            & ", " & tabde(5)
        Case 6
            Messag = tabde(1) & ", " & tabde(2) & ", " & tabde(3) & ", " & tabde(4) _
            & ", " & tabde(5) & ", " & tabde(6)
        Case 7
            Messag = tabde(1) & ", " & tabde(2) & ", " & tabde(3) & ", " & tabde(4) _
            & ", " & tabde(5) & ", " & tabde(6) & ", " & tabde(7)
        Case 8
            Messag = tabde(1) & ", " & tabde(2) & ", " & tabde(3) & ", " & tabde(4) _
            & ", " & tabde(5) & ", " & tabde(6) & ", " & tabde(7) & ", " & tabde(8)
        Case 9
            Messag = tabde(1) & ", " & tabde(2) & ", " & tabde(3) & ", " & tabde(4) _
            & ", " & tabde(5) & ", " & tabde(6) & ", " & tabde(7) & ", " & tabde(8) _
            & ", " & tabde(9)
        Case 10
            Messag = tabde(1) & ", " & tabde(2) & ", " & tabde(3) & ", " & tabde(4) _
            & ", " & tabde(5) & ", " & tabde(6) & ", " & tabde(7) & ", " & tabde(8) _
            & ", " & tabde(9) & ", " & tabde(10)
    End Select
   
    'affiche le résultat
    UF_resul.Label1.Caption = Messag
    UF_resul.Show
    'annule les valeurs du tableau en vu d'un nouveau tirage
    Erase tabde
   
End Sub


Private Sub BTN_sortie_Click()
    Unload UF_genede
End Sub


Private Sub LBL_d3_Click()
'change la couleur de "caption" du nombre séléctionné (de noir en rouge)
'idem pour les sub suivants
    Me.LBL_d3.ForeColor = RGB(255, 0, 0)
    Me.LBL_d4.ForeColor = RGB(0, 0, 0)
    Me.LBL_d6.ForeColor = RGB(0, 0, 0)
    Me.LBL_d8.ForeColor = RGB(0, 0, 0)
    Me.LBL_d10.ForeColor = RGB(0, 0, 0)
    Me.LBL_d12.ForeColor = RGB(0, 0, 0)
    Me.LBL_d20.ForeColor = RGB(0, 0, 0)
    Me.LBL_d30.ForeColor = RGB(0, 0, 0)
    Me.LBL_d100.ForeColor = RGB(0, 0, 0)
    demax = 3
End Sub
Private Sub LBL_d4_Click()
    Me.LBL_d3.ForeColor = RGB(0, 0, 0)
    Me.LBL_d4.ForeColor = RGB(255, 0, 0)
    Me.LBL_d6.ForeColor = RGB(0, 0, 0)
    Me.LBL_d8.ForeColor = RGB(0, 0, 0)
    Me.LBL_d10.ForeColor = RGB(0, 0, 0)
    Me.LBL_d12.ForeColor = RGB(0, 0, 0)
    Me.LBL_d20.ForeColor = RGB(0, 0, 0)
    Me.LBL_d30.ForeColor = RGB(0, 0, 0)
    Me.LBL_d100.ForeColor = RGB(0, 0, 0)
    demax = 4
End Sub
Private Sub LBL_d6_Click()
    Me.LBL_d3.ForeColor = RGB(0, 0, 0)
    Me.LBL_d4.ForeColor = RGB(0, 0, 0)
    Me.LBL_d6.ForeColor = RGB(255, 0, 0)
    Me.LBL_d8.ForeColor = RGB(0, 0, 0)
    Me.LBL_d10.ForeColor = RGB(0, 0, 0)
    Me.LBL_d12.ForeColor = RGB(0, 0, 0)
    Me.LBL_d20.ForeColor = RGB(0, 0, 0)
    Me.LBL_d30.ForeColor = RGB(0, 0, 0)
    Me.LBL_d100.ForeColor = RGB(0, 0, 0)
    demax = 6
End Sub
Private Sub LBL_d8_Click()
    Me.LBL_d3.ForeColor = RGB(0, 0, 0)
    Me.LBL_d4.ForeColor = RGB(0, 0, 0)
    Me.LBL_d6.ForeColor = RGB(0, 0, 0)
    Me.LBL_d8.ForeColor = RGB(255, 0, 0)
    Me.LBL_d10.ForeColor = RGB(0, 0, 0)
    Me.LBL_d12.ForeColor = RGB(0, 0, 0)
    Me.LBL_d20.ForeColor = RGB(0, 0, 0)
    Me.LBL_d30.ForeColor = RGB(0, 0, 0)
    Me.LBL_d100.ForeColor = RGB(0, 0, 0)
    demax = 8
End Sub
Private Sub LBL_d10_Click()
    Me.LBL_d3.ForeColor = RGB(0, 0, 0)
    Me.LBL_d4.ForeColor = RGB(0, 0, 0)
    Me.LBL_d6.ForeColor = RGB(0, 0, 0)
    Me.LBL_d8.ForeColor = RGB(0, 0, 0)
    Me.LBL_d10.ForeColor = RGB(255, 0, 0)
    Me.LBL_d12.ForeColor = RGB(0, 0, 0)
    Me.LBL_d20.ForeColor = RGB(0, 0, 0)
    Me.LBL_d30.ForeColor = RGB(0, 0, 0)
    Me.LBL_d100.ForeColor = RGB(0, 0, 0)
    demax = 10
End Sub
Private Sub LBL_d12_Click()
    Me.LBL_d3.ForeColor = RGB(0, 0, 0)
    Me.LBL_d4.ForeColor = RGB(0, 0, 0)
    Me.LBL_d6.ForeColor = RGB(0, 0, 0)
    Me.LBL_d8.ForeColor = RGB(0, 0, 0)
    Me.LBL_d10.ForeColor = RGB(0, 0, 0)
    Me.LBL_d12.ForeColor = RGB(255, 0, 0)
    Me.LBL_d20.ForeColor = RGB(0, 0, 0)
    Me.LBL_d30.ForeColor = RGB(0, 0, 0)
    Me.LBL_d100.ForeColor = RGB(0, 0, 0)
    demax = 12
End Sub
Private Sub LBL_d20_Click()
    Me.LBL_d3.ForeColor = RGB(0, 0, 0)
    Me.LBL_d4.ForeColor = RGB(0, 0, 0)
    Me.LBL_d6.ForeColor = RGB(0, 0, 0)
    Me.LBL_d8.ForeColor = RGB(0, 0, 0)
    Me.LBL_d10.ForeColor = RGB(0, 0, 0)
    Me.LBL_d12.ForeColor = RGB(0, 0, 0)
    Me.LBL_d20.ForeColor = RGB(255, 0, 0)
    Me.LBL_d30.ForeColor = RGB(0, 0, 0)
    Me.LBL_d100.ForeColor = RGB(0, 0, 0)
    demax = 20
End Sub
Private Sub LBL_d30_Click()
    Me.LBL_d3.ForeColor = RGB(0, 0, 0)
    Me.LBL_d4.ForeColor = RGB(0, 0, 0)
    Me.LBL_d6.ForeColor = RGB(0, 0, 0)
    Me.LBL_d8.ForeColor = RGB(0, 0, 0)
    Me.LBL_d10.ForeColor = RGB(0, 0, 0)
    Me.LBL_d12.ForeColor = RGB(0, 0, 0)
    Me.LBL_d20.ForeColor = RGB(0, 0, 0)
    Me.LBL_d30.ForeColor = RGB(255, 0, 0)
    Me.LBL_d100.ForeColor = RGB(0, 0, 0)
    demax = 30
End Sub
Private Sub LBL_d100_Click()
    Me.LBL_d3.ForeColor = RGB(0, 0, 0)
    Me.LBL_d4.ForeColor = RGB(0, 0, 0)
    Me.LBL_d6.ForeColor = RGB(0, 0, 0)
    Me.LBL_d8.ForeColor = RGB(0, 0, 0)
    Me.LBL_d10.ForeColor = RGB(0, 0, 0)
    Me.LBL_d12.ForeColor = RGB(0, 0, 0)
    Me.LBL_d20.ForeColor = RGB(0, 0, 0)
    Me.LBL_d30.ForeColor = RGB(0, 0, 0)
    Me.LBL_d100.ForeColor = RGB(255, 0, 0)
    demax = 100
End Sub
Private Sub LBL_fact1_Click()
    nbre = 1
    Me.LBL_fact1.ForeColor = RGB(255, 0, 0)
    Me.LBL_fact2.ForeColor = RGB(0, 0, 0)
    Me.LBL_fact3.ForeColor = RGB(0, 0, 0)
    Me.LBL_fact4.ForeColor = RGB(0, 0, 0)
    Me.LBL_fact5.ForeColor = RGB(0, 0, 0)
    Me.LBL_fact6.ForeColor = RGB(0, 0, 0)
    Me.LBL_fact7.ForeColor = RGB(0, 0, 0)
    Me.LBL_fact8.ForeColor = RGB(0, 0, 0)
    Me.LBL_fact9.ForeColor = RGB(0, 0, 0)
    Me.LBL_fact10.ForeColor = RGB(0, 0, 0)
End Sub
Private Sub LBL_fact2_Click()
    nbre = 2
    Me.LBL_fact1.ForeColor = RGB(0, 0, 0)
    Me.LBL_fact2.ForeColor = RGB(255, 0, 0)
    Me.LBL_fact3.ForeColor = RGB(0, 0, 0)
    Me.LBL_fact4.ForeColor = RGB(0, 0, 0)
    Me.LBL_fact5.ForeColor = RGB(0, 0, 0)
    Me.LBL_fact6.ForeColor = RGB(0, 0, 0)
    Me.LBL_fact7.ForeColor = RGB(0, 0, 0)
    Me.LBL_fact8.ForeColor = RGB(0, 0, 0)
    Me.LBL_fact9.ForeColor = RGB(0, 0, 0)
    Me.LBL_fact10.ForeColor = RGB(0, 0, 0)
End Sub
Private Sub LBL_fact3_Click()
    nbre = 3
    Me.LBL_fact1.ForeColor = RGB(0, 0, 0)
    Me.LBL_fact2.ForeColor = RGB(0, 0, 0)
    Me.LBL_fact3.ForeColor = RGB(255, 0, 0)
    Me.LBL_fact4.ForeColor = RGB(0, 0, 0)
    Me.LBL_fact5.ForeColor = RGB(0, 0, 0)
    Me.LBL_fact6.ForeColor = RGB(0, 0, 0)
    Me.LBL_fact7.ForeColor = RGB(0, 0, 0)
    Me.LBL_fact8.ForeColor = RGB(0, 0, 0)
    Me.LBL_fact9.ForeColor = RGB(0, 0, 0)
    Me.LBL_fact10.ForeColor = RGB(0, 0, 0)
End Sub
Private Sub LBL_fact4_Click()
    nbre = 4
    Me.LBL_fact1.ForeColor = RGB(0, 0, 0)
    Me.LBL_fact2.ForeColor = RGB(0, 0, 0)
    Me.LBL_fact3.ForeColor = RGB(0, 0, 0)
    Me.LBL_fact4.ForeColor = RGB(255, 0, 0)
    Me.LBL_fact5.ForeColor = RGB(0, 0, 0)
    Me.LBL_fact6.ForeColor = RGB(0, 0, 0)
    Me.LBL_fact7.ForeColor = RGB(0, 0, 0)
    Me.LBL_fact8.ForeColor = RGB(0, 0, 0)
    Me.LBL_fact9.ForeColor = RGB(0, 0, 0)
    Me.LBL_fact10.ForeColor = RGB(0, 0, 0)
End Sub
Private Sub LBL_fact5_Click()
    nbre = 5
    Me.LBL_fact1.ForeColor = RGB(0, 0, 0)
    Me.LBL_fact2.ForeColor = RGB(0, 0, 0)
    Me.LBL_fact3.ForeColor = RGB(0, 0, 0)
    Me.LBL_fact4.ForeColor = RGB(0, 0, 0)
    Me.LBL_fact5.ForeColor = RGB(255, 0, 0)
    Me.LBL_fact6.ForeColor = RGB(0, 0, 0)
    Me.LBL_fact7.ForeColor = RGB(0, 0, 0)
    Me.LBL_fact8.ForeColor = RGB(0, 0, 0)
    Me.LBL_fact9.ForeColor = RGB(0, 0, 0)
    Me.LBL_fact10.ForeColor = RGB(0, 0, 0)
End Sub
Private Sub LBL_fact6_Click()
    nbre = 6
    Me.LBL_fact1.ForeColor = RGB(0, 0, 0)
    Me.LBL_fact2.ForeColor = RGB(0, 0, 0)
    Me.LBL_fact3.ForeColor = RGB(0, 0, 0)
    Me.LBL_fact4.ForeColor = RGB(0, 0, 0)
    Me.LBL_fact5.ForeColor = RGB(0, 0, 0)
    Me.LBL_fact6.ForeColor = RGB(255, 0, 0)
    Me.LBL_fact7.ForeColor = RGB(0, 0, 0)
    Me.LBL_fact8.ForeColor = RGB(0, 0, 0)
    Me.LBL_fact9.ForeColor = RGB(0, 0, 0)
    Me.LBL_fact10.ForeColor = RGB(0, 0, 0)
End Sub
Private Sub LBL_fact7_Click()
    nbre = 7
    Me.LBL_fact1.ForeColor = RGB(0, 0, 0)
    Me.LBL_fact2.ForeColor = RGB(0, 0, 0)
    Me.LBL_fact3.ForeColor = RGB(0, 0, 0)
    Me.LBL_fact4.ForeColor = RGB(0, 0, 0)
    Me.LBL_fact5.ForeColor = RGB(0, 0, 0)
    Me.LBL_fact6.ForeColor = RGB(0, 0, 0)
    Me.LBL_fact7.ForeColor = RGB(255, 0, 0)
    Me.LBL_fact8.ForeColor = RGB(0, 0, 0)
    Me.LBL_fact9.ForeColor = RGB(0, 0, 0)
    Me.LBL_fact10.ForeColor = RGB(0, 0, 0)
End Sub
Private Sub LBL_fact8_Click()
    nbre = 8
    Me.LBL_fact1.ForeColor = RGB(0, 0, 0)
    Me.LBL_fact2.ForeColor = RGB(0, 0, 0)
    Me.LBL_fact3.ForeColor = RGB(0, 0, 0)
    Me.LBL_fact4.ForeColor = RGB(0, 0, 0)
    Me.LBL_fact5.ForeColor = RGB(0, 0, 0)
    Me.LBL_fact6.ForeColor = RGB(0, 0, 0)
    Me.LBL_fact7.ForeColor = RGB(0, 0, 0)
    Me.LBL_fact8.ForeColor = RGB(255, 0, 0)
    Me.LBL_fact9.ForeColor = RGB(0, 0, 0)
    Me.LBL_fact10.ForeColor = RGB(0, 0, 0)
End Sub
Private Sub LBL_fact9_Click()
    nbre = 9
    Me.LBL_fact1.ForeColor = RGB(0, 0, 0)
    Me.LBL_fact2.ForeColor = RGB(0, 0, 0)
    Me.LBL_fact3.ForeColor = RGB(0, 0, 0)
    Me.LBL_fact4.ForeColor = RGB(0, 0, 0)
    Me.LBL_fact5.ForeColor = RGB(0, 0, 0)
    Me.LBL_fact6.ForeColor = RGB(0, 0, 0)
    Me.LBL_fact7.ForeColor = RGB(0, 0, 0)
    Me.LBL_fact8.ForeColor = RGB(0, 0, 0)
    Me.LBL_fact9.ForeColor = RGB(255, 0, 0)
    Me.LBL_fact10.ForeColor = RGB(0, 0, 0)
End Sub
Private Sub LBL_fact10_Click()
    nbre = 10
    Me.LBL_fact1.ForeColor = RGB(0, 0, 0)
    Me.LBL_fact2.ForeColor = RGB(0, 0, 0)
    Me.LBL_fact3.ForeColor = RGB(0, 0, 0)
    Me.LBL_fact4.ForeColor = RGB(0, 0, 0)
    Me.LBL_fact5.ForeColor = RGB(0, 0, 0)
    Me.LBL_fact6.ForeColor = RGB(0, 0, 0)
    Me.LBL_fact7.ForeColor = RGB(0, 0, 0)
    Me.LBL_fact8.ForeColor = RGB(0, 0, 0)
    Me.LBL_fact9.ForeColor = RGB(0, 0, 0)
    Me.LBL_fact10.ForeColor = RGB(255, 0, 0)
End Sub


Private Sub LBL_nbre_d3_Click()


End Sub


Private Sub UserForm_Click()


End Sub

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
0
Belag55 Messages postés 20 Date d'inscription mercredi 17 décembre 2008 Statut Membre Dernière intervention 13 février 2009
27 janv. 2009 à 17:18
ooopsss je viens de voir mes 2 derniers subs... à effacer bien entendu
0
jmf0 Messages postés 1566 Date d'inscription mardi 26 décembre 2000 Statut Membre Dernière intervention 5 avril 2013 7
27 janv. 2009 à 18:42
Déjà :
tous tes select case sur nbre


Finalement, ils sont remplaçables par 4 lignes de code (sans même utiliser Select Casez) non ?

for i = 1 to nbre
  messag = messag & "," & tabde(i)
next
messag = mid(messag,2)

Commence à travailler sur ce point simple

Passons maintenant à tes clicks ...
Ils font quasiment la même chose et il te faut en profiter pour alléger, donc ...


Tu vas faire travailler tes méninges à l'aide de ces quelques mots (réfléchis) :


Me.Controls("toto" & n) se réfère au contrôle nommé toto1 si n = 1, toto2 si n= 2, toto3 si n = 3, etc...
A toi de jouer avec... (pas dur...)
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Belag55 Messages postés 20 Date d'inscription mercredi 17 décembre 2008 Statut Membre Dernière intervention 13 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.
0