Bonjour à tous,
Je poste ici un nouveau message car j'ai revu mon algorithme, ne parvenant pas à utiliser la récursivité. Ce message n'a donc rien à voir avec celui-ci, qui est toujours d'actualité: http://www.developpez.net/forums/d12...e/#post6985946


Pour remplir certaines cases de mon tableau, j'ai besoin à un moment donné de générer une suite hexagonale. Je la mets pour info pour que vous compreniez le but de la macro:
3;3;3 - 3;3;2 - 3;3;1 - 3;2;3 - 2;3;3 - 3;1;3 - 1;3;3 - 3;2;1 - 2;3;1 - 2;1;3 - 3;1;2 - 1;3;2 - 1;2;3 - 3;2;2 - 2;3;2 - 2;3;3 - 3;1;1 - 1;3;1 - 1;1;3
Il s'agit donc de trouver tous le n-uplets de chiffres comprenant au moins le chiffre max y. Ici x = y = 3.

Le but pour moi est donc de créer un tableau de tableaux en prenant deux paramètres:
- chiffre max (3 ici)
- nombre de chiffres dans un bloc (3 aussi ici, par exemple)

Je lancerai ensuite une macro sur chaque élément de ce tableau.

Voilà mon code

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
Sub algo_seq()
'tottab contient tous les "blocs" de nombre, qui sont des tableaux
    Dim tottab As Collection
 
'testtab est le tableau "tampon"
    Dim testtab() As Integer
    ReDim testtab(1)
 
'on prend ici les mêmes valeurs que dans mon exemple
    Dim ch_max As Integer
    Dim nb_max As Integer
    ch_max = 3
    nb_max = 3
 
'on initialise la collection de base
    For i = 1 To ch_max 
        testtab(0) = i
        Call tottab.Add(testtab)
    Next
 
'on remplit la collection de base jusqu'à avoir les bonnes longueur de bloc
    While tottab.Item.Value.Rows.Count < nb_max
        fin = tottab.Count
        For i = fin To 1 Step -1
            For j = 1 To ch_max
                tottab.Add Union(tottab.Item(i).Value, j)
            Next
            tottab.Remove i
        Next
    Wend
 
'ici je "nettoie" ce dont je ne veux pas
    dim z as variant
    fin = tottab.Count
    For i = fin To 1 Step -1
        z = Filter(tottab.Item(sequence), ch_max)
        If UBound(z) < 0 Then
             tottab.Remove i 
        End If
    Next
 
 'je lance ma macro sur tous les blocs   
    'For sequence = 1 To tottab.Count
        'ajouter(tottab.Item(sequence).Value)
    'Next sequence
 
End Sub
Cependant, lors de l'exécution, j'ai l'erreur «argument non facultatif» sur le «Item» de «tottab.Item.Value.Rows.Count < nb_max»

D'où vient mon erreur?

Merci!