Relancer macro après une boucle infinie

Bonjour,

je tente de créer un générateur de Sudoku sur Excel VBA.

L'idée est de d'abord remplir une grille complète, pour ensuite retirer certains nombres en fonction de la difficulté voulue.

J'ai donc créé une boucle qui inscrit un nombre aléatoire entre 1 et 9 dans chacune des 81 cases du tableau (9x9) et qui recommence la boucle tant que ce nombre se trouve soit dans la même ligne, soit dans la même colonne, soit dans le même carré de 3x3.

Sub alea()

Do
[Case11].Value = Int((9 - 1 + 1) * Rnd + 1)

Loop While _
[Case11].Value = [Case12].Value Or _
[Case11].Value = [Case13].Value Or _
[Case11].Value = [Case14].Value Or _
[Case11].Value = [Case15].Value Or _
[Case11].Value = [Case16].Value Or _
[Case11].Value = [Case17].Value Or _
[Case11].Value = [Case18].Value Or _
[Case11].Value = [Case19].Value Or _
[Case11].Value = [Case21].Value Or _
[Case11].Value = [Case31].Value Or _
[Case11].Value = [Case41].Value Or _
[Case11].Value = [Case51].Value Or _
[Case11].Value = [Case61].Value Or _
[Case11].Value = [Case71].Value Or _
[Case11].Value = [Case81].Value Or _
[Case11].Value = [Case91].Value Or _
[Case11].Value = [Case22].Value Or _
[Case11].Value = [Case23].Value Or _
[Case11].Value = [Case32].Value Or _
[Case11].Value = [Case33].Value

End Sub

(ce code est ensuite répété pour chacune des 81 cases (nommées de Case11 à Case99)

Jusqu'ici aucun problème, la macro fonctionne parfaitement (même si un peu trop longue peut-être).

L'ennui c'est qu'il arrive que les nombres choisis aléatoirement empêchent la suite de la grille de se remplir, ce qui créé une boucle infinie.

Exemple des 5 premières lignes du tableau:

1 6 2 9 4 3 8 7 5

7 5 3 1 8 6 9 4 2

4 9 8 7 5 2 3 6 1

8 7 6 2 1 5 4 9 3

2 1 4 3 7 8 5 X

Dans cet exemple, arrivé à la ligne 5, il ne reste plus que le 6 et le 9 de disponible.

Or, il est impossible de les placer puisqu'ils se trouvent déjà dans la même colonne.

Les nombres qu'Excel a choisi aléatoirement sont justes mais la séquence est impossible à terminer et engendre donc une boucle infinie là où j'ai inscrit le "X".

Ma question est donc la suivante:

Est-il possible, en codage VBA, de stopper la macro et de la relancer tant que celle-ci engendre une boucle infinie ?

Je me rend compte qu'un générateur de Sudoku est bien plus compliqué que de simplement envoyer des nombres aléatoires dans des cases et dans ce cas, auriez-vous une autre piste à me donner afin d'y arriver si ma méthode n'est pas la bonne ?

J'espère avoir été clair

Merci beaucoup

Bonjour,

une exemple de génération d'un tableau de sudoku

Sub aargh()
    Sheets(1).Activate
    'génère une grille
    For i = 1 To 9
        If i = 1 Then
            Cells(i, 1) = 1
        ElseIf i Mod 3 = 1 Then
            Cells(i, 1) = Cells(i - 3, 1) + 1
        Else
            Cells(i, 1) = Cells(i - 1, 1) + 3
        End If
        For j = 2 To 9
            Cells(i, j) = (Cells(i, j - 1) Mod 9) + 1
        Next j
    Next i
    'mélange la grille
    q = Application.RandBetween(8, 20)
    For i = 1 To q
        ty = Application.RandBetween(1, 2)
        Select Case Application.RandBetween(1, 2)
        Case 1
            Range(Cells(1, 1), Cells(3, 9)).Cut
            Cells(ty * 3 + 4, 1).Insert Shift:=xlDown
            Range(Cells(1, 1), Cells(1, 9)).Cut
            Cells(ty + 2, 1).Insert Shift:=xlDown
        Case 2
            Range(Cells(1, 1), Cells(9, 3)).Cut
            Cells(1, ty * 3 + 4).Insert Shift:=xlToRight
            Range(Cells(1, 1), Cells(9, 1)).Cut
            Cells(1, ty + 2).Insert Shift:=xlToRight
        End Select
    Next i
    'mélange les chiffres
    Dim a(9)
    For i = 1 To 9
        a(i) = i
        Range("A1:i9").Replace i, Chr$(i + 64)
    Next i
    For i = 1 To 9
        q = Application.RandBetween(1, 10 - i)
        Range("A1:I9").Replace Chr$(a(q) + 64), i
        a(q) = a(10 - i)
    Next i
End Sub

Merci beaucoup pour cette réponse très complète.

Je vais analyser ce code de plus près pour mieux le comprendre et je vous retiens au courant...

Bonne soirée

Rechercher des sujets similaires à "relancer macro boucle infinie"