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
    apres le "gagné" mais avant l exit sub bien sur...
    0
    1. Ouais on peut faire un reset sinnon ?
      enfin sinnon tu le placerait ou le exit sub escuse chui un peu fatigué :)
      0
      1. Contributeur
        ben si un joueur gagne .. y a plus rien a faire (mis a part recommencer une partie) donc.. le code qu'il y a apres on le squizz.. d'où le exit sub si gagné tu me suis??
        0
        1. Comment sa ?
          lol je te laisse faire voir ce que tu essai de me dire la si un joeur gagne c'est bon sa met la box x ou o gagne lol
          0
          1. Contributeur
            non, car il faut mettre un exit sub si un joueur gagne ;)
            0
            1. Parceque en fait si on faisait

              If Command1(1).Caption <> "" And Command1(2).Caption <> "" And Command1(3).Caption <> "" And Command1(4).Caption <> "" And Command1(5).Caption <> "" And Command1(6).Caption <> "" And Command1(7).Caption <> "" And Command1(8).Caption <> "" And Command1(9).Caption <> "" Then
              MsgBox "Match Nul"

              et que toutes les cases était coché mais que soit o soit x gagnait en diagonale sa mettai
              fenetre x ou o gagne
              et apres fenetre match nul
              mais la c bon :p
              0
              1. If Command1(1).Caption <> "" And Command1(5).Caption <> "" And Command1(9).Caption <> "" Then Exit Sub
                If Command1(3).Caption <> "" And Command1(5).Caption <> "" And Command1(7).Caption <> "" Then Exit Sub
                If Command1(1).Caption <> "" And Command1(2).Caption <> "" And Command1(3).Caption <> "" And Command1(4).Caption <> "" And Command1(5).Caption <> "" And Command1(6).Caption <> "" And Command1(7).Caption <> "" And Command1(8).Caption <> "" And Command1(9).Caption <> "" Then
                MsgBox "Match Nul"

                J'ai trouvé tout seul !!!
                J'ai pa encore lu ta solution ;)
                0
                1. Contributeur
                  si si... c'est ca :) bon, y aplus court bien sur, mais c'est l idée :)

                  allez.. comme t as trouver, j te donne la solution :)

                  PasFini =false
                  For Each bt In Command1 'pour tous les controls de command1
                  If bt.Caption = "" Then PasFini = True 'met la veriable pasfini à vrai si il trouve un command vide
                  Next

                  If Not PasFini Then 'si ce n'est pas pas fini=> fini
                  If MsgBox("Match nul." & Chr$(10) & Chr$(13) & "Nouvelle partie ?", vbYesNo) = vbYes Then NouveauJeu_Click
                  End If
                  0
                  1. Ah ok !!!

                    Donc
                    If Command1(1).Caption <> "" And Command1(2).Caption <> "" And Command1(3).Caption <> "" And Command1(4).Caption <> "" And Command1(5).Caption <> "" And Command1(6).Caption <> "" And Command1(7).Caption <> "" And Command1(8).Caption <> "" And Command1(9).Caption <> "" Then
                    MsgBox "Match Nul"
                    0
                    1. Contributeur
                      non, pas exactement.. mais ton resonnement est bon...

                      Le hic je pense que tu n a pas compris l'indexage...

                      index dans command(index) correspond au bouton que le joueur à cliquer.. et non tous les boutons
                      0
                      1. Okok et j'ai encore un ptit soucis niveau code :p

                        Le match nul je pensais faire un truc comme sa :

                        If Command1(Index).Caption <> "" And Command1(Index).Value = True Then MsgBox "Match Nul"
                        Genre si toutes les cases sont cochées et que leurs caption est forcément différent de "" alors mettre une msgbox je ne sais pas si c'est possible
                        0
                        1. Contributeur
                          ca veut dire qu il quitte la sub en cours.. comme s'il allait directyement au en sub de la fin du command_click
                          0
                          1. Lol ouais j'ai bien compris ^^ mais exit sub sa veut dire que sa annule la commande c'est sa ?
                            0
                            1. Contributeur
                              ben si y a deja un "X" ou "O".. l'utilisateur joue sur une case deja utilisée.. donc ne joue pas.. d où le exit sub
                              0
                              1. Ok merci j'ai compris encore quelques questions :p dsl
                                If Command1(Index).Caption <> "" Then Exit Sub
                                La je vois pas trop
                                si la caption des bouttons est différent de rien donc qu'il y a deja x ou o alors
                                exit sub ?
                                0
                                1. Contributeur
                                  Dim sert à déclarer une variable

                                  Form_Load avec CarEnCours ="X"
                                  => Form load est une des premiere instruction appelé au démarage du programme. litéralement au chargement de la feuille

                                  If Command1(Index).Caption <> ""

                                  <> veut dire différent en vb
                                  0
                                  1. Alors attend que je comprenne bien ce que je fais

                                    Dim CarEnCours
                                    Dim sa veut dire quoi concrètement on demande quoi au programme sa cré une variable c'est sa ?

                                    on l initialise dans Form_Load avec CarEnCours ="X"
                                    La sa va faire quoi au juste ?
                                    Form c'est la fenetre ?

                                    If Command1(Index).Caption <> ""
                                    <> c'est quoi ? ni plus grand ni plus petit que " " ?

                                    Dsl c'est juste pour bien tout maitriser sur sa et pouvoir le réutiliser quand j'en aurais besoin sur d'autre trucs par exemple :)
                                    0
                                    1. Contributeur
                                      bon.. maintenant on va s'attaquer à ton X ou O...

                                      1) on n'utilise plus ta coche.. si "X" vient de jouer, ca sera forcement le tour de "O" et inversement... jusque là tu me suis..

                                      donc on cré une variable générale CarEnCours :

                                      dans général déclaration (c'est a dire en premire ligne de code, avant toutes les sub :

                                      Dim CarEnCours

                                      on l initialise dans Form_Load avec CarEnCours ="X"

                                      Pour que le bouton prenne la marque voulu on a dans command_click :

                                      If BtJeu(Index).Caption <> "" Then Exit Sub 'ceci si il clique sur un bouton ayant dejà une marque

                                      BtJeu(Index).Caption = CarEnCours 'pour mettre "X" ou "O"

                                      et pour faire l inversion dans ton command1_click(Index as integer) à la fin, juste avant le end sub, ajoute ceci:

                                      If CarEnCours = "X" Then CarEnCours = "O" Else CarEnCours = "X"
                                      end sub

                                      je le met à la fin, car c'est une fois que lon aura verifier si le joueur à gané qu'il faut changer de signe..
                                      0
                                      1. Ce qui nous donne ^^

                                        Private Sub Command1_Click(Index As Integer)
                                        If Check1.Value = 1 Then Command1(Index).Caption = "X"
                                        If Check2.Value = 1 Then Command1(Index).Caption = "O"

                                        If Command1(1).Caption = "X" And Command1(2).Caption = "X" And Command1(3).Caption = "X" Then
                                        MsgBox "X Gagne"
                                        End If
                                        If Command1(4).Caption = "X" And Command1(5).Caption = "X" And Command1(6).Caption = "X" Then
                                        MsgBox "X Gagne"
                                        End If
                                        If Command1(7).Caption = "X" And Command1(8).Caption = "X" And Command1(9).Caption = "X" Then
                                        MsgBox "X Gagne"
                                        End If
                                        If Command1(1).Caption = "X" And Command1(4).Caption = "X" And Command1(7).Caption = "X" Then
                                        MsgBox "X Gagne"
                                        End If
                                        If Command1(2).Caption = "X" And Command1(5).Caption = "X" And Command1(8).Caption = "X" Then
                                        MsgBox "X Gagne"
                                        End If
                                        If Command1(3).Caption = "X" And Command1(6).Caption = "X" And Command1(9).Caption = "X" Then
                                        MsgBox "X Gagne"
                                        End If
                                        If Command1(1).Caption = "X" And Command1(5).Caption = "X" And Command1(9).Caption = "X" Then
                                        MsgBox "X Gagne"
                                        End If
                                        If Command1(1).Caption = "O" And Command1(2).Caption = "O" And Command1(3).Caption = "O" Then
                                        MsgBox "O Gagne"
                                        End If
                                        If Command1(4).Caption = "O" And Command1(5).Caption = "O" And Command1(6).Caption = "O" Then
                                        MsgBox "O Gagne"
                                        End If
                                        If Command1(7).Caption = "O" And Command1(8).Caption = "O" And Command1(9).Caption = "O" Then
                                        MsgBox "O Gagne"
                                        End If
                                        If Command1(1).Caption = "O" And Command1(4).Caption = "O" And Command1(7).Caption = "O" Then
                                        MsgBox "O Gagne"
                                        End If
                                        If Command1(2).Caption = "O" And Command1(5).Caption = "O" And Command1(8).Caption = "O" Then
                                        MsgBox "O Gagne"
                                        End If
                                        If Command1(3).Caption = "O" And Command1(6).Caption = "O" And Command1(9).Caption = "O" Then
                                        MsgBox "O Gagne"
                                        End If
                                        If Command1(1).Caption = "O" And Command1(5).Caption = "O" And Command1(9).Caption = "O" Then
                                        MsgBox "O Gagne"
                                        End If
                                        End Sub
                                        0
                                        • 1
                                        • 2
                                        • 3