VBA Commandbutton+randomize

Résolu
ouistit64 Messages postés 22 Date d'inscription dimanche 23 septembre 2007 Statut Membre Dernière intervention 24 juin 2009 - 29 nov. 2008 à 11:21
ouistit64 Messages postés 22 Date d'inscription dimanche 23 septembre 2007 Statut Membre Dernière intervention 24 juin 2009 - 30 nov. 2008 à 22:03
Bonjour,

Est ce que quelqu'un peut m'expliquer car je galère. J'ai 12 commandbuttons sur un userform, le joueur1 a les commandbuttons de 1 à 6. Mon but c'est de dire à l'ordinateur de jouer après le joueur1 et donc de déclencher un des 12 commandbuttons et qu'en suite le joueur1 puisse jouer et ainsi de suite. Et j'y arrive pas ça fait quelque temps...
voici mon code :

Sub Ordinateur()


Randomize
Dim i As Integer
joueur2 = "ordinateur"
 
If Nombredejoueurs = "1" Then
     i = 1
     i = Int((12 * Rnd) + 7)
     
   End If
End Sub

Merci d'avavnce pour votre aide

14 réponses

NHenry Messages postés 15123 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 20 mai 2024 159
30 nov. 2008 à 21:55
Bonjour,

Il faut que tu généralise les gestionnaires d'evenements afin que tous las events mènent sur une seule et même fonction/procédure, cela te permettra de simplifier les modifications (et réduire ton code), simplifiera le débugage.

http://nhen0039.chez-alice.fr/index.php
3
NHenry Messages postés 15123 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 20 mai 2024 159
29 nov. 2008 à 14:02
Bonjour,

Où tu bloques ?

http://nhen0039.chez-alice.fr/index.php
0
ouistit64 Messages postés 22 Date d'inscription dimanche 23 septembre 2007 Statut Membre Dernière intervention 24 juin 2009
29 nov. 2008 à 14:27
Voici mon problème. Voilà un exemple du code du commandbutton1 (cbt) pour essayer d'être plus clair . Ce sont les mêmes jusqu'au 12 à part "tour.caption" qui est de 1 à partir du cbt7 :

Private Sub TextBox1_Change()
b = ActiveWorkbook.Path
a = b & "" & TextBox12.Value & ".jpg "
CommandButton12.Picture = LoadPicture(a)
End Sub

Private Sub CommandButton1_Click()
tour.Caption = "2" 'me permet de bloquer les 6 derniers cbt
tourdujoueur 'pour dire que si c'est joueur2 ça bloque les 6 1er cbt
tourdujoueur2 'pour dire que si c'est joueur1 ça bloque les 6 dernier cbt
'Ordinateur le but serait qu'une fois que le joueur a cliqué l'ordinateur joue un des 6 derniers cbt aléatoirement

Dim i As Integer
For i = 1 To 30
traitons i
Next
End Sub

Private Sub traitons(num As Integer)

If TextBox1.Value = num Then
TextBox1.Value = 0
For i = 2 To num + 1
n = i
If i > 12 Then n = i - 12
Me.Controls("TextBox" & n).Value = Me.Controls("TextBox" & n).Value + 1
Next
End If
End Sub

Mon but c'set que dès que le joueur1 à jouer l'ordinateur doit jouer tout seul et redonner la main au joueur1, et ça je sais pas faire. Je sais pas si c'est trés clair.
0
NHenry Messages postés 15123 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 20 mai 2024 159
29 nov. 2008 à 15:08
Bonjour,

Escuse, mais je vois un peu mieux, mais je ne comprends pas ta logique. Peux-tu mettre une plus grosse partie de ton code ? (comme tourdujoueur et tourdujoueur2)

Autre question/confirmation :
Joueur1 : cbt 1-6
Joueur2 : cbt 7-12
Ordinateur : cbt 1-6 et 7-12 selon le joueur en cours
tour.Caption = "2" c'est le numéro de joueur actif
tour est un contrôle d'une UserForm
Et ton prog fonctionne à partir d'une UserForm

a quoi sert 'traitons', et pourquoi de 1 à 30 ?

En l'attente de confirmation/correction, j'en reste là.

http://nhen0039.chez-alice.fr/index.php
0

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

Posez votre question
ouistit64 Messages postés 22 Date d'inscription dimanche 23 septembre 2007 Statut Membre Dernière intervention 24 juin 2009
29 nov. 2008 à 19:09
Le programme fonctionne à partir d'un userform. Voilà le code pour tourdujoueur1 et 2 + les paramètres dues joueurs. Traitons me permet de mettre à 0 mon userform (qui est une image) et d'incrémenter de un les commandbutton suivants du nombre du commandbutton mis à 0.

Sub tourdujoueur()




If Jeu.tour.Caption = "1" Then
    Jeu.CommandButton7.Enabled = False
    Jeu.CommandButton8.Enabled = False
    Jeu.CommandButton9.Enabled = False
    Jeu.CommandButton10.Enabled = False
    Jeu.CommandButton11.Enabled = False
    Jeu.CommandButton12.Enabled = False
   
ElseIf Jeu.tour.Caption = "2" Then
    Jeu.CommandButton7.Enabled = True
    Jeu.CommandButton8.Enabled = True
    Jeu.CommandButton9.Enabled = True
    Jeu.CommandButton10.Enabled = True
    Jeu.CommandButton11.Enabled = True
    Jeu.CommandButton12.Enabled = True
   
End If
   
End Sub


Sub tourdujoueur2()


If Jeu.tour.Caption = "2" Then
    Jeu.CommandButton1.Enabled = False
    Jeu.CommandButton2.Enabled = False
    Jeu.CommandButton3.Enabled = False
    Jeu.CommandButton4.Enabled = False
    Jeu.CommandButton5.Enabled = False
    Jeu.CommandButton6.Enabled = False
   
ElseIf Jeu.tour.Caption = "1" Then
    Jeu.CommandButton1.Enabled = True
    Jeu.CommandButton2.Enabled = True
    Jeu.CommandButton3.Enabled = True
    Jeu.CommandButton4.Enabled = True
    Jeu.CommandButton5.Enabled = True
    Jeu.CommandButton6.Enabled = True
   
End If


End Sub

Sub Parametre()


    Dim Nombredejoueurs As Integer
    Dim joueur1 As String
    Dim joueur2 As String


line1:  Nbdejoueurs.Show
Nombredejoueurs = Jeu.Joueurs.Caption




Select Case Nombredejoueurs


    Case 0:
            MsgBox "Vous devez choisir", , "Awalé"
            GoTo line1


    Case 1:
            'enregistrement le nom des joueurs
            joueur1 = InputBox("Nom du joueur 1", "Noms des joueurs")
           
            If joueur1 = "" Then
                MsgBox ("Chosissez votre nom"), vbInformation, ("ATTENTION")
                    GoTo line1
           
            End If
           
            joueur2 = "Ordinateur"
          
          
           'Initialise le score du joueur à 0
            Jeu.scoreJ1.Caption = "0"
            Jeu.scoreJ2.Caption = "0"
           
    Case 2:
            'enregistrement le nom des joueurs
            joueur1 = InputBox("Nom du joueur 1", "Noms des joueurs")
           
            If joueur1 = "" Then
                MsgBox ("Chosissez votre nom"), vbInformation, ("ATTENTION")
                    GoTo line1
            End If
           
            joueur2 = InputBox("Nom du joueur 2", "Noms des joueurs")
           
            If joueur2 = "" Then
                MsgBox ("Chosissez votre nom"), vbInformation, ("ATTENTION")
                    GoTo line1
            End If
                     
            'Initialise le score des joueurs à 0
            Jeu.scoreJ1.Caption = "0"
            Jeu.scoreJ2.Caption = "0"
         
    End Select
       
    'Insérer le noms des joueurs sur le formulaire jeu
  
    Jeu.J1.Caption = joueur1
    Jeu.J2.Caption = joueur2


 
Sheets("Awale").Range("c1").Value = Jeu.J1.Caption
Sheets("Awale").Range("f1").Value = Jeu.J2.Caption
Sheets("Awale").Range("b9").Value = Jeu.Joueurs.Caption


Jeu.Show


End Sub

Voilà tout merci
0
NHenry Messages postés 15123 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 20 mai 2024 159
29 nov. 2008 à 23:44
Bonjour,

Avec ces précisions, je vois déjà mieux (pas tout encore, car je n'ai pas le visuel final, mais ce n'est pas encore trop grave).

Pour l'ordinateur :

private sub Ordinateur()
dim lActPlayer as long 'Il aurais mieux valu que tu utilises une valeur numérique pour Tour.Caption, mais ce n'est pas grave
lActPlayer=(cint(tour.Caption)-1)*6+1

lActPlayer=int(rnd*6)+lActPlayer
select case lActPlayer
case 1
CommandButton1_Click()
case 2
CommandButton2_Click()

...
Case 12
CommandButton12_Click()

End Select
End Sub

En direct, je pense que ça ne doit pas être trop mauvais.

http://nhen0039.chez-alice.fr/index.php
0
ouistit64 Messages postés 22 Date d'inscription dimanche 23 septembre 2007 Statut Membre Dernière intervention 24 juin 2009
30 nov. 2008 à 00:07
merci de ta réponse mais je ne comprends pas trop cette partie.
case 1
CommandButton1_Click()
case 2
CommandButton2_Click()
...
Case 12
CommandButton12_Click()
End Select

En plus il me mets tous les commandbutton en rouge. J'ai inséré le code dans un modèle et ensuite je dois rajouté le paramètre "ordinateur" dans les 6 premièrs commandbutton ou dans userform_initialyse
0
NHenry Messages postés 15123 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 20 mai 2024 159
30 nov. 2008 à 11:56
Bonjour,

Les Case, c'est pour le bouton à activer, on réutilise les gestionnaire d'evenements des boutons (cela simule un clic quoi).

Par contre, j'ai pas compris si ta dernière phrase était une question ou pas.

http://nhen0039.chez-alice.fr/index.php
0
ouistit64 Messages postés 22 Date d'inscription dimanche 23 septembre 2007 Statut Membre Dernière intervention 24 juin 2009
30 nov. 2008 à 12:00
merci. oui c'était une toute petite question
0
ouistit64 Messages postés 22 Date d'inscription dimanche 23 septembre 2007 Statut Membre Dernière intervention 24 juin 2009
30 nov. 2008 à 12:04
case 1
CommandButton1_Click()     'il me met : erreur de compilatin, Attendu : =
case 2
CommandButton2_Click()        'il me met : erreur de compilatin, Attendu : =

c'est normal ?
0
NHenry Messages postés 15123 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 20 mai 2024 159
30 nov. 2008 à 12:28
Bonjour,

Je me suis basé sur ton message du "samedi 29 novembre 2008 à 14:27:27" et celui "samedi 29 novembre 2008 à 19:09:19", Ce sont les gestionnaire d'evenement des boutons quand tu clique dessus.

Peux-tu poser ta question plus clairement, car j'ai pas compris pourquoi les CmdBtn passent en rouge.

Nota, je suis sur le chat aujourd'hui, si tu veux une discussion plus rapide.

http://nhen0039.chez-alice.fr/index.php
0
NHenry Messages postés 15123 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 20 mai 2024 159
30 nov. 2008 à 18:24
Bonjour,

J'ai eu pas mal de pb.
Déjà,

Private Sub Ordinateur()
Jeu.Joueurs.Caption = "1"
joueur2 = "Ordinateur"

Dim lActPlayer As Long
lActPlayer = (CInt(tour.Caption) - 1) * 6 + 1

lActPlayer = Int(Rnd * 6) + lActPlayer
Select Case lActPlayer
Case 1
CommandButton1_Click
Case 2
CommandButton2_Click
Case 3
CommandButton3_Click
Case 4
CommandButton4_Click
Case 5
CommandButton5_Click
Case 6
CommandButton6_Click
Case 7
CommandButton7_Click
Case 8
CommandButton8_Click
Case 9
CommandButton9_Click
Case 10
CommandButton10_Click
Case 11
CommandButton11_Click
Case 12
CommandButton12_Click

End Select
End Sub
J'ai retiré les () en trop

Ensuite, mets systématiquement "Option Explicit" en première ligne de ton code(dans chaque fichier de code), cela t'oblige à déclarer les variables, et donc évite certaines erreurs.

http://nhen0039.chez-alice.fr/index.php
0
ouistit64 Messages postés 22 Date d'inscription dimanche 23 septembre 2007 Statut Membre Dernière intervention 24 juin 2009
30 nov. 2008 à 20:13
merci j'ai mis l'option explicit, j'ai donc du redéfinir les variables.
Pour l'ordinateur j'arrive pas à le faire fonctionner comment il sait que c'est à lui de jouer ? J'ai beau mettre ordinateur dans le commandbutton1 puisque c'est à lui de jouer après mais ça fonctionne pas. Je pars du principe que l'ordinateur c'est toujours le joueur2. Merci pour tes réponses et de ton temps qui me sont bien utiles.
0
ouistit64 Messages postés 22 Date d'inscription dimanche 23 septembre 2007 Statut Membre Dernière intervention 24 juin 2009
30 nov. 2008 à 22:03
merci
0
Rejoignez-nous