Mon code ferme excel

Résolu/Fermé
VicKing - Modifié le 20 mai 2020 à 17:42
Le Pingou Messages postés 12042 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 24 avril 2024 - 21 mai 2020 à 18:02
Bonjour,

je code le jeu du taquin en VBA avec excel, et je dois avoir une boucle infinie car une fois lancé, le programme ne s'arrete plus.
help pls !!!

voila mon code:
Option Explicit
Sub jeuduTaquin_vba()

Dim Taquin(3, 3) As Integer
Dim continuer As Boolean
Dim x As Single
Dim case_vide_ligne As Integer
Dim case_vide_colonne As Integer
Dim ligne As Integer
Dim Nb As Integer
Dim colonne As Integer
Dim coup As Integer
Dim verification As Integer
Dim verification_ligne As Integer
Dim verification_colonne As Integer
Dim entree As Integer
Dim entree_ligne As Integer
Dim entree_colonne As Integer
Dim ind1 As Integer
Dim ind2 As Integer

Call MsgBox("Vous allez entrer dans le jeu du taquin dont le but est de résoudre un damier 3x3 aux valeurs aléatoires en un damier aux valeurs qui se suivent. Pour y arriver, vous avez une case vide, vous ne pouvez donc que déplacer une case adjacente à la case vide dans cette dernière. Le damier gagnant est comme suit")
Call MsgBox("la case comportant le 0 etant la case vide")
continuer = True
For ind1 = 1 To 3
    For ind2 = 1 To 3
        Taquin(ind1, ind2) = 0
    Next
Next
entree = 0
entree_ligne = 1
entree_colonne = 1
Do While entree <= 8
    Randomize
    Nb = Int(7 * Rnd + 1)
    If (Nb <> Taquin(1, 1)) And (Nb <> Taquin(1, 2)) And (Nb <> Taquin(1, 3)) And (Nb <> Taquin(2, 1)) And (Nb <> Taquin(2, 2)) And (Nb <> Taquin(2, 3)) And (Nb <> Taquin(3, 1)) And (Nb <> Taquin(3, 2)) And (Nb <> Taquin(3, 3)) Then
        Taquin(entree_ligne, entree_colonne) = Nb
        Cells(entree_ligne, entree_colonne).Value = Taquin(entree_ligne, entree_colonne)
        entree = entree + 1
        If entree_colonne = 3 Then
            entree_colonne = 0
            entree_ligne = entree_ligne + 1
        End If
        entree_colonne = entree_colonne + 1
    End If
Loop
case_vide_ligne = 3
case_vide_colonne = 3
Do While continuer = True
    Call MsgBox(Taquin(1, 1), Taquin(1, 2), Taquin(1, 3))
    Call MsgBox(Taquin(2, 1), Taquin(2, 2), Taquin(2, 3))
    Call MsgBox(Taquin(3, 1), Taquin(3, 2), Taquin(3, 3))
    ligne = InputBox("entrer la ligne de la case a deplacer dans la case vide")
    colonne = InputBox("entrer la colonne de la case a deplacer dans la case vide")
    If (((case_vide_ligne = ligne) And (case_vide_colonne = colonne + 1)) Or ((case_vide_ligne = ligne) And (case_vide_colonne = colonne - 1)) Or ((case_vide_ligne = ligne + 1) And (case_vide_colonne = colonne)) Or ((case_vide_ligne = ligne - 1) And (case_vide_colonne = colonne))) Then
        Taquin(case_vide_ligne, case_vide_colonne) = Taquin(ligne, colonne)
        Taquin(ligne, colonne) = 0
        case_vide_ligne = ligne
        case_vide_colonne = colonne
        coup = coup + 1
    Else
        Call MsgBox("la ligne et la colonne saisie ne correspondent pas a une case adjacente a la case vide")
    End If
    verification = 1
    For verification_ligne = 1 To 3
        For verification_colonne = 1 To 3
            If Taquin(verification_ligne, verification_colonne) = verification Then
                verification = verification + 1
            End If
        Next
    Next
    If verification = 8 Then
        Call MsgBox("FELICITATIONS VOUS AVEZ COMPLETEZ LE JEU EN", coup, "COUPS")
        continuer = False
    End If
Loop
    
End Sub


Si il existe une âme charitable qui a trouve mon erreur, il sera mon héros pendant loooongtemps!

Victor H

Configuration: Windows / Chrome 81.0.4044.138


EDIT : Ajout des balises de code (la coloration syntaxique).
Explications disponibles ici : ICI

Merci d'y penser dans tes prochains messages.
A voir également:

2 réponses

Le Pingou Messages postés 12042 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 24 avril 2024 1 426
20 mai 2020 à 18:17
Bonjour,
Bizarre il semble que vous jouez avec une grille de 3x3 et dans votre code la variable Taquin est de 4x4......!
0
Le Pingou Messages postés 12042 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 24 avril 2024 1 426
21 mai 2020 à 18:02
Bonjour,
Concernant la boucle 2 corrections suivantes :
Do While entree < 8 '** '<' au lieu de '<='

Nb = Int(8 * Rnd + 1) '*** pour damier 3x3 nb chiffre est 8 (7 = faux)

Pour la suite à vous de voir.

0