Bonjour,
Pour un projet informatique nous devons créer un sudoku, nous travaillons actuellement sur la fonction "generer", donc des permutations sur une grille initiale.
Dans une feuille "Programmation" nous avons inclus la grille résolue initiale sur laquelle nous faisons les permutations.
La fonction "split" qui nous permettrait de diviser la grille en 9 colonnes ne semble pas reconnaitre ces colonnes.
Voila notre code
Cf fichier joint pour la feuille programmation
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
Merci beaucoup
Partager