Programmation Msgbox si Caption = X

Bonjour, j'aurais voulu avoir votre aide pour cette commande.

Je n'arrive pas a faire en sorte que qu'une fenêtre s'ouvre si les 3 premiers boutons sont cochés.
J'ai 3 buttons et 2 CheckBox
Si je coche la première CheckBox cela va me mettre un X sur le ou les boutons que je clic
Et je veux qu'une fois avoir cliquer sur les 3 boutons donc rempli de X j'ai une fenetre qu'il souvre

If bt1.Caption = "X" And bt2.Caption = "X" And bt3.Caption = "X" Then MsgBox "X Gagne"
La sa ne met rien mais la fenetre ne s'ouvre pas

La sa met une erreur
If bt1.valeur = Check1.Text And bt2.valeur = Check1.Text Then MsgBox "ok"

Concretement je veux dire:
If les 3 boutons ont pour caption "X" alors mettre fenetre.

Merci
Configuration: Windows XP
Firefox 3.5.1

49 réponses

Résumé de la discussion

Questionnement principal : un mini-jeu de morpion nécessite d’ouvrir une fenêtre dès que trois boutons affichent X, avec 3 boutons et 2 CheckBox, et le code actuel ne déclenche pas l’ouverture. Parmi les solutions proposées, l’utilisation d’un contrôle indexé (BtJeu(Index)) permet d’appliquer un seul code gagnant pour tous les boutons et d’identifier le bouton cliqué grâce à son index. Des approches plus pratiques incluent une logique de tour avec une variable CarEnCours pour verrouiller les coups déjà joués et alterner X et O, puis tester les combinaisons gagnantes sans dupliquer le code. En pratique, l’utilisation d’un tableau des combinaisons gagnantes et d’une boucle sur l’état des boutons indexés peut simplifier le contrôle et améliorer la lisibilité du code.

Bobot (l’IA à votre service)
  1. Contributeur
    la bonne solution c'est la 1 :
    If bt1.Caption = "X" And bt2.Caption = "X" And bt3.Caption = "X" Then MsgBox "X Gagne"

    Maintenant, ca ne te l affiche pas, donc je suppose:
    1) soit tu n a pas mis la ligne au bon endroit (moi je dirais qu il faut la mettre dans ta checkbox_change)
    2) soit que bt1.caption (ou 2 ou 3) <>"X"

    pour voir si il va voire ta ligne, clique dans la marge, ca doit t'afficher un point rouge (le code s'arretera sur cette ligne) et ensuite F8 (pas à pas=> ligne jaune) pour continuer. tu peux voir la valeur cd bt1.caption en pointant ta sourie sur le code (sans cliquer)
    0
    1. Hey merci de ta réponse :)

      Effectivement la premiere m'a lair plus concrète
      j'ai essayer de mettre la commande dans

      Private Sub Check1_Click()

      Private Sub Check2_Click()

      mais sa ne marche toujours pas.

      En fait je fais un tic tac toe (morpion)
      vu que je débute j'essaie de me débrouiller sans m'inspirer de code pour apprendre seul.

      Private Sub bt1_Click()
      If Check1.Value = 1 Then bt1.Caption = "X"
      If Check2.Value = 1 Then bt1.Caption = "O"
      If Check1.Value = 1 And Check2.Value = 1 Then bt1.Caption = ""
      If Check1.Value = 1 And Check2.Value = 1 Then MsgBox "Vous ne devez cocher qu'un seul symbol à la fois", vbExclamation, "Erreur"
      End Sub

      Private Sub bt2_Click()
      If Check1.Value = 1 Then bt2.Caption = "X"
      If Check2.Value = 1 Then bt2.Caption = "O"
      If Check1.Value = 1 And Check2.Value = 1 Then bt1.Caption = ""
      If Check1.Value = 1 And Check2.Value = 1 Then MsgBox "Vous ne devez cocher qu'un seul symbol à la fois", vbExclamation, "Erreur"
      End Sub

      Private Sub bt3_Click()
      If Check1.Value = 1 Then bt3.Caption = "X"
      If Check2.Value = 1 Then bt3.Caption = "O"
      If Check1.Value = 1 And Check2.Value = 1 Then bt1.Caption = ""
      If Check1.Value = 1 And Check2.Value = 1 Then MsgBox "Vous ne devez cocher qu'un seul symbol à la fois", vbExclamation, "Erreur"
      End Sub

      Private Sub bt4_Click()
      If Check1.Value = 1 Then bt4.Caption = "X"
      If Check2.Value = 1 Then bt4.Caption = "O"
      If Check1.Value = 1 And Check2.Value = 1 Then bt1.Caption = ""
      If Check1.Value = 1 And Check2.Value = 1 Then MsgBox "Vous ne devez cocher qu'un seul symbol à la fois", vbExclamation, "Erreur"
      End Sub

      Private Sub bt5_Click()
      If Check1.Value = 1 Then bt5.Caption = "X"
      If Check2.Value = 1 Then bt5.Caption = "O"
      If Check1.Value = 1 And Check2.Value = 1 Then bt1.Caption = ""
      If Check1.Value = 1 And Check2.Value = 1 Then MsgBox "Vous ne devez cocher qu'un seul symbol à la fois", vbExclamation, "Erreur"
      End Sub

      Private Sub bt6_Click()
      If Check1.Value = 1 Then bt6.Caption = "X"
      If Check2.Value = 1 Then bt6.Caption = "O"
      If Check1.Value = 1 And Check2.Value = 1 Then bt1.Caption = ""
      If Check1.Value = 1 And Check2.Value = 1 Then MsgBox "Vous ne devez cocher qu'un seul symbol à la fois", vbExclamation, "Erreur"
      End Sub

      Private Sub bt7_Click()
      If Check1.Value = 1 Then bt7.Caption = "X"
      If Check2.Value = 1 Then bt7.Caption = "O"
      If Check1.Value = 1 And Check2.Value = 1 Then bt1.Caption = ""
      If Check1.Value = 1 And Check2.Value = 1 Then MsgBox "Vous ne devez cocher qu'un seul symbol à la fois", vbExclamation, "Erreur"
      End Sub

      Private Sub bt8_Click()
      If Check1.Value = 1 Then bt8.Caption = "X"
      If Check2.Value = 1 Then bt8.Caption = "O"
      If Check1.Value = 1 And Check2.Value = 1 Then bt1.Caption = ""
      If Check1.Value = 1 And Check2.Value = 1 Then MsgBox "Vous ne devez cocher qu'un seul symbol à la fois", vbExclamation, "Erreur"
      End Sub

      Private Sub bt9_Click()
      If Check1.Value = 1 Then bt9.Caption = "X"
      If Check2.Value = 1 Then bt9.Caption = "O"
      If Check1.Value = 1 And Check2.Value = 1 Then bt1.Caption = ""
      If Check1.Value = 1 And Check2.Value = 1 Then MsgBox "Vous ne devez cocher qu'un seul symbol à la fois", vbExclamation, "Erreur"

      End Sub

      Private Sub btexit_Click()
      End
      End Sub

      Private Sub btreset_Click()
      bt1.Caption = ""
      bt2.Caption = ""
      bt3.Caption = ""
      bt4.Caption = ""
      bt5.Caption = ""
      bt6.Caption = ""
      bt7.Caption = ""
      bt8.Caption = ""
      bt9.Caption = ""
      Check1.Value = 0
      Check2.Value = 0

      End Sub

      Private Sub Frame2_DragDrop(Source As Control, X As Single, Y As Single)

      End Sub

      Private Sub Calcul_DragDrop(Source As Control, X As Single, Y As Single)
      If bt1.Text = "X" And bt2.Text = "X" Then MsgBox "winner"

      End Sub

      Private Sub Check1_Click()
      If bt1.Caption = "X" And bt2.Caption = "X" And bt3.Caption = "X" Then MsgBox "X Gagne"
      End Sub

      Private Sub Check2_Click()
      If bt1.Caption = "X" And bt2.Caption = "X" And bt3.Caption = "X" Then MsgBox "X Gagne"
      End Sub


      Le code ne doit pas ressembler a grand chose mais bon :)
      0
      1. Contributeur
        Lol.. mais non.. c'est un bon début le morpion pour apprendre à programmer et se faire une logique !! :D

        mais bon, c'est sur que ca doit etre améliorrer ;)

        j'ai bien compris que bt1 -> bt9 ce sont les cases du jeu... mais que vient faire Check1.Value et Check2.Value ?
        0
    2. :) merci :p

      Check1 et Check 2 c'est deux petites cases qui me servent a :

      Label 1 CheckBox1

      X Case pour cocher X

      Label 2 CheckBox2

      O Case pour cocher O

      Pour choisir le symbole.
      0
      1. Ainsi en faisant reset les bouttons 1 a 9 s'effacent tout comme la case cochée pour choisir soit x soit o
        0
        1. Contributeur
          ok... je comprend un peu mieux...

          donc pour les bouton de 1=>9ca donne quelquechose comme ca :

          1 | 2 | 3
          4 | 5 | 6
          7 | 8 | 9

          If bt1.Caption = "X" And bt2.Caption = "X" And bt3.Caption = "X" Then MsgBox "X Gagne"
          ca ca ne marche que si il y a un "X" dans 1 2 3 pas pour 1 4 7 par exemple...

          de plus.. tu l as mis dans Private Sub Check1_Click()... ce qui veut dire qu il ne va la vérifié que lorsque que l utilisateur va cocher une des 2 cases à coher..
          Perso, je l'aurais mis ici : (a faire pour tous les boutons.. apres, je t'expliquerais comment les indexés afin de n'avoir qu un seul bouton duppliqué et ainsi, une seul commande pour tous les boutons ;) ...mais allons y pas à pas...

          Private Sub bt1_Click()
          If Check1.Value = 1 Then bt1.Caption = "X"
          If Check2.Value = 1 Then bt1.Caption = "O"
          If Check1.Value = 1 And Check2.Value = 1 Then bt1.Caption = ""
          If Check1.Value = 1 And Check2.Value = 1 Then MsgBox "Vous ne devez cocher qu'un seul symbol à la fois", vbExclamation, "Erreur"

          If bt1.Caption = "X" And bt2.Caption = "X" And bt3.Caption = "X" Then MsgBox "X Gagne"

          End Sub

          Derniere remarque (apres c'est long à lire et ca pique les yeux :p

          If Check1.Value = 1 And Check2.Value = 1 Then bt1.Caption = ""
          If Check1.Value = 1 And Check2.Value = 1 Then MsgBox "Vous ne devez cocher qu'un seul symbol à la fois", vbExclamation, "Erreur"

          =>

          If Check1.Value = 1 And Check2.Value = 1 Then
          bt1.Caption = ""
          MsgBox "Vous ne devez cocher qu'un seul symbol à la fois", vbExclamation, "Erreur"
          End if
          0
          1. [quote]
            1 | 2 | 3
            4 | 5 | 6
            7 | 8 | 9
            [/quote]

            Exactement de cette sorte la.

            [quote]ca ca ne marche que si il y a un "X" dans 1 2 3 pas pour 1 4 7 par exemple... [/quote]

            Oui je pensais par la suite le faire pour toutes les combinaisons soit:

            123
            456
            789
            147
            258
            369
            159

            If bt1.Caption = "X" And bt2.Caption = "X" And bt3.Caption = "X" Then MsgBox "X Gagne"
            If bt4.Caption = "X" And bt5.Caption = "X" And bt6.Caption = "X" Then MsgBox "X Gagne"
            If bt7.Caption = "X" And bt8.Caption = "X" And bt9.Caption = "X" Then MsgBox "X Gagne"
            If bt1.Caption = "X" And bt4.Caption = "X" And bt7.Caption = "X" Then MsgBox "X Gagne"
            If bt2.Caption = "X" And bt5.Caption = "X" And bt8.Caption = "X" Then MsgBox "X Gagne"
            If bt3.Caption = "X" And bt6.Caption = "X" And bt9.Caption = "X" Then MsgBox "X Gagne"
            If bt1.Caption = "X" And bt5.Caption = "X" And bt9.Caption = "X" Then MsgBox "X Gagne"
            else MsgBox "O Gagne"

            [quote] apres, je t'expliquerais comment les indexés afin de n'avoir qu un seul bouton duppliqué et ainsi, une seul commande pour tous les boutons ;) [/quote]

            Euhhh ... Sa marche :p :)
            [quote]de plus.. tu l as mis dans Private Sub Check1_Click()[/quote]

            Oui, je l'ai mis la après pour tester mais à la base il était dans boutton 1 ^^

            [quote]If Check1.Value = 1 And Check2.Value = 1 Then
            bt1.Caption = ""
            MsgBox "Vous ne devez cocher qu'un seul symbol à la fois", vbExclamation, "Erreur"

            C'est vrai que c'est mieux xD
            0
            1. Contributeur
              donc apres avoir modifier pour bt1 2 et 3, dis moi si ca marche qd tu met un "X" dans bt 1 2 et 3 ;)
              0
              1. Alors avec ce code :

                Private Sub bt1_Click()
                If Check1.Value = 1 Then bt1.Caption = "X"
                If Check2.Value = 1 Then bt1.Caption = "O"
                If Check1.Value = 1 And Check2.Value = 1 Then
                bt1.Caption = ""
                MsgBox "Vous ne devez cocher qu'un seul symbol à la fois", vbExclamation, "Erreur"
                If bt1.Caption = "X" And bt2.Caption = "X" And bt3.Caption = "X" Then MsgBox "X Gagne"
                If bt4.Caption = "X" And bt5.Caption = "X" And bt6.Caption = "X" Then MsgBox "X Gagne"
                If bt7.Caption = "X" And bt8.Caption = "X" And bt9.Caption = "X" Then MsgBox "X Gagne"
                If bt1.Caption = "X" And bt4.Caption = "X" And bt7.Caption = "X" Then MsgBox "X Gagne"
                If bt2.Caption = "X" And bt5.Caption = "X" And bt8.Caption = "X" Then MsgBox "X Gagne"
                If bt3.Caption = "X" And bt6.Caption = "X" And bt9.Caption = "X" Then MsgBox "X Gagne"
                If bt1.Caption = "X" And bt5.Caption = "X" And bt9.Caption = "X" Then MsgBox "X Gagne"
                End Sub

                C'est très bizarre
                Tout aller sa marchais dans le sens inverse (Lorsque je cliquais sur 1 puis 2 puis 3 sa marchait pas mais quand je faisais 3 puis 2 puis 1 sa marchait)
                Et la il me met

                Compile Error:
                Block If without End If

                Sa ne me le faisais pas il y a quelques secondes je suis légèrement perdu ^^
                0
                1. J'ai rajouté End If sa corrige le probleme mais la sa ne le fait plus du tout meme plus dans l'ordre 3 puis 2 puis 1 ^^
                  0
                  1. Alors attend mdr
                    J'ai remis les deux lignes
                    If Check1.Value = 1 And Check2.Value = 1 Then bt1.Caption = ""
                    If Check1.Value = 1 And Check2.Value = 1 Then MsgBox "Vous ne devez cocher qu'un seul symbol à la fois", vbExclamation, "Erreur"

                    Enlever le End if
                    et sa remarche
                    Mais toujours dans un seul sens
                    Quand je clique sur 3 puis sur 2 puis sur 1

                    Bizare
                    0
                    1. Contributeur
                      If Check1.Value = 1 And Check2.Value = 1 Then
                      bt1.Caption = ""
                      MsgBox "Vous ne devez cocher qu'un seul symbol à la fois", vbExclamation, "Erreur"

                      elle est la l erreur...

                      ptite note sur le if/else/endif

                      si une seule ligne :

                      if ... then ....

                      si plusieurs ligne :
                      if ... then
                      'ligne 1
                      'ligne2
                      end if

                      et pour else:
                      if ... then
                      'ligne 1
                      'ligne 2
                      else
                      'ligne 1
                      'ligne 2
                      end if

                      donc remet le end if apres le msgbox
                      0
                      1. Ah ok merci beaucoup jjsteing
                        Je ne comprenAIS pas a quoi servait end if :)

                        C'est bon plus de problème après cette ligne de commande.

                        Au niveau des boutons toujours le même soucis
                        Dans l'ordre 3 puis 2 puis 1 = fenêtre
                        Dans l'ordre 7 puis 4 puis 1 = fenêtre
                        Dans l'ordre 9 puis 5 puis 1 = fenêtre

                        Sinon rien.

                        Bizarre je trouve
                        0
                        1. Contributeur
                          As tu mis le meme code dans bt1 2 et 3 ?
                          0
                          1. Non mais quesque je peux etre c ..

                            Mdr merci t'es un géni
                            0
                            1. Contributeur
                              lol.. bon... maintenant.. comment faire un bouton indexé (c'est valable aussi pour plein d autres choses), a quoi ca sert et comment on programme dedans...

                              1) créer un bouton indexé:

                              Choisir un bouton (bt1 dans ton cas que je renommerais BtJeu) puis copier coller.. la un message apparait "il y a déjà un control nomé BtJeu, voulez vous créer un groupe de control ? => Oui

                              Un nouveau bouton apparait...
                              Pour toi, refaire la manip jusqu a avoir tes 10 boutons.. 10 oui oui... lis la suite
                              Dans les propriété de chaque bouton, il y a une propriété 'Index' (qui commence à 0 -> 9).. donc supprime celui à l index 0 et place correctement les autres en fonction de l 'index...

                              Une fois placés passons à l'étape 2

                              2) A quoi ca sert :

                              Le fait d avoir un control indexé (ici un bouton) nous permet d'avoir un seul et meme code qui s'applique à tous ces boutons.. tres utile pour un jeu comme le morpion (ou un jeu de taquin ;) )

                              3) comment programmer un bouton indéxé...

                              Les commandes sont les memes qu'avec un bouton normal, sauf qu'il se nomme BtJeu(1) pour le bouton index 1, BtJeu(2) pour le 2 ect...

                              Dans le code, pour ton jeu de morpion ca devient donc :

                              If BtJeu(1).Caption = "X" And BtJeu(2).Caption = "X" And BtJeu(3).Caption = "X" Then MsgBox "X Gagne"

                              pour savoir sur quel bouton l'utilisateur à cliquer, dans la procédure du bouton BtJeu tu as :
                              Private Sub BtJeu _Click(Index As Integer)

                              End Sub

                              la variable Index t'indiquera quel est le bouton cliqué... mais dans ton cas, tu t'en fou de savoir sur quel bouton l'utilisateur à cliqué, vu que tu test tous les boutons ;) mais garde ca en mémoire.. pour la suite des opérations afin d améliorer encore + le code...

                              Tu verra, au final, le jeu tient en une dizaine de ligne de code :p
                              0
                              1. Et encore une petite question je ne sais pas si c'est possible mais plutot que de mettre une fenetre je voyais plutot sa :

                                Comme sa L'un des deux se décoche automatiquement mais j'aimerais le mettre dans l'ordre genre:

                                Si la première case cochée est X et la deuxième 0
                                décocher automatiquement le X (Sa sa se fait tout seul)
                                Si la première case cochée est 0 et la deuxième X
                                Décocher automatiquement le 0 (Sa je ne sais pas si on peut le faire ?)

                                Mais te prend pa la tete hein il n'y a rien d'urgent tu ma deja bcp aidé et je t'en remerci !!
                                0
                                1. Contributeur
                                  Ca me prend pas la tete.. ca me rappel mes debut en prog.. j'ai fais le meme style de prog... mais y avait personne pour m aider ;)
                                  0
                              2. Ps: je lis ton poste sur le boutton indexé j'avais pas vu :)
                                0
                                1. mais y avait personne pour m aider ;)

                                  +1
                                  0
                                  1. C'est pas mal ce system mais j'arrive pas trop a le coder

                                    Genre j'ai essayer d'adapter en renoman les 9 boutons qui sont indexé bt1 comme avant

                                    mais plein d'erreurs

                                    Private Sub bt1_Click(Index As Integer)

                                    If Check1.Value = 1 Then bt1(1).Caption = "X"
                                    If Check2.Value = 1 Then bt1(1).Caption = "O"
                                    If Check1.Value = 1 And Check2.Value = 1 Then
                                    Check1.Value = 0
                                    End If

                                    If Check2.Value = 1 And Check1.Value = 1 Then
                                    Check1.Value = 1
                                    End If

                                    If bt1(1).Caption = "X" And bt1(2).Caption = "X" And bt1(3).Caption = "X" Then MsgBox "X Gagne"
                                    If bt1(4).Caption = "X" And bt1(5).Caption = "X" And bt1(6).Caption = "X" Then MsgBox "X Gagne"
                                    If bt1(7).Caption = "X" And bt1(8).Caption = "X" And bt1(9).Caption = "X" Then MsgBox "X Gagne"
                                    If bt1(1).Caption = "X" And bt1(4).Caption = "X" And bt1(7).Caption = "X" Then MsgBox "X Gagne"
                                    If bt1(2).Caption = "X" And bt1(5).Caption = "X" And bt1(8).Caption = "X" Then MsgBox "X Gagne"
                                    If bt1(3).Caption = "X" And bt1(6).Caption = "X" And bt1(9).Caption = "X" Then MsgBox "X Gagne"
                                    If bt1(1).Caption = "X" And bt1(5).Caption = "X" And bt1(9).Caption = "X" Then MsgBox "X Gagne"

                                    End Sub

                                    Private Sub btexit_Click()
                                    End

                                    End Sub

                                    Private Sub btreset_Click()

                                    bt(1).Caption = ""
                                    bt(2).Caption = ""
                                    bt(3).Caption = ""
                                    bt(4).Caption = ""
                                    bt(5).Caption = ""
                                    bt(6).Caption = ""
                                    bt(7).Caption = ""
                                    bt(8).Caption = ""
                                    bt(9).Caption = ""
                                    Check1.Value = 0
                                    Check2.Value = 0

                                    End Sub
                                    0
                                    • 1
                                    • 2
                                    • 3