Option Explicit
Option Base 1
Sub jeuduTaquin_vba()

Dim Taquin(3, 3), a, b, case_vide_ligne, case_vide_colonne, ligne, colonne, Nb, coup, verification, verification_ligne, verification_colonne, ind1, ind2, entree, entree_ligne, entree_colonne As Integer
Dim continuer As Boolean
Dim x As Single

Call MsgBox("BIENVENUE DANS LE JEU DU TAQUIN")
Call MsgBox("By Victor HITSCH")
Call MsgBox("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(8 * 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
    For a = 1 To 3
        For b = 1 To 3
            Cells(a, b).Value = Taquin(a, b)
        Next
    Next
    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
