1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47
|
Option Explicit
Sub Generer() 'Génère la grille de sudoku
Application.ScreenUpdating = False 'Désactive l'affichage de la grille à chaques nouvelles permutations
Sheets("Programmation").Visible = 1 'Active la visibilité de la feuille "Programmation" pour nous permettre de réaliser la fonction
Sheets("Programmation").Select
Dim nbdif As Integer 'Nombre de cases à masquer en fonction du niveau de difficulté
Dim nbcase As Integer 'Variable de 1 à nbdif pour réaliser la fonction masquer
Dim i As Byte 'Ligne de la grille finale
Dim j As Byte 'Colonne de la grille finale
Dim var As Byte 'Variable aléatoire de permutation
Dim attribution() As String 'Texte
Dim pas As Byte 'Permet de garder les petites colonnes et lignes par groupe de 3 lors des permutations
Dim grille() As Variant 'Grille provisoire pour chaques permutations
Dim grillefinale() As Variant 'Grille finale recopiée dans la feuille de jeu
Dim memoireune As Byte
Dim memoiredeux As Byte
pas = 0 'Permutations des petites colonnes
For pas = 0 To 6 Step 3
'pas prend comme valeur 0, 3 ou 6
i = 0
memoireune = 0
var = 0
memoiredeux = 0
For i = 1 + pas To 3 + pas
While var = memoireune Or var = memoiredeux 'A chaque colonne est attribué un réel entre 1 et 3
Randomize 'Permet au générateur de nombre aléatoires de démarrer à chaque fois sur une valeur différente
var = Int((3 * Rnd) + 1) 'Retourne un nombre aléatoire entre la valeur max et la valeur min: Int((valeur max -valeur min +1) * Rnd + valeur min)
Wend
attribution() = Split(" ca cb cc cd ce cf cg ch ci ") '"Split" permet de découper la chaîne de caractères
grille = Range(attribution(var + pas)) 'La colonne est affectée à la variable matrice
Range(Cells(9, i + 14), Cells(8 + UBound(grille, 1), i + 14)) = grille
If i = 1 + pas Then 'Empêche la répétition d'une colonne
memoireune = var
Else: memoiredeux = var
End If
Next i
Next pas |
Partager