Bonjour,
Je n'ai pas besoin de solution, mais d'une explication.
Pourquoi ce code ne fonctionne pas?
Il s'agit juste d'un "exercice", je ne souhaite donc pas de codage différent.
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 Public Sub Main() Dim Grille(8, 8) As Integer Do Remplit_Grille (Grille) Loop While Not Verifie_Colonnes(Grille) End Sub Private Sub Remplit_Grille(ByRef t() As Integer) Dim i As Integer, j As Integer Randomize Timer For i = 0 To 8 For j = 0 To 8 t(i, j) = Int(Rnd() * 9) + 1 Next j Next i End Sub Private Function Verifie_Colonnes(Grille() As Integer) As Boolean Dim Colonne(8) As Integer Dim i As Integer, j As Integer For j = 0 To 8 For i = 0 To 8 Colonne(i) = Grille(i, j) Next i If TousDifferents(Colonne) = False Then Exit Function Next j Verifie_Colonnes = True End Function Private Function TousDifferents(t() As Integer) As Boolean Dim i As Integer, j As Integer For i = 0 To 7 For j = i + 1 To 8 If t(i) = t(j) Then Exit Function Next j Next i TousDifferents = True End Function
Je veux juste comprendre pourquoi VBA bloque sur ma variable Grille (Ligne 5 du code) dans la Sub Main en disant :
La solution la plus simple est de changer le type de t() As Integer dans la Sub Remplit_Grille par ByRef t As Variant, mais je souhaiterai comprendre.Erreur de compilation
Incompatibilité de type : tableau ou type défini par l'utilisateur attendu.
Pourquoi ma variable Grille passe bien en paramètre des Function TousDifferents et Function Verifie_Colonnes mais pas de la Sub Remplit_Grille ?
=> certainement parce qu'elle est vide au moment de Remplit_Grille et remplie au moment des fonctions ?...
Egalement je voudrais savoir pourquoi on ne peux pas passer autre chose qu'un variant...
Merci d'avance.
Partager