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
Cependant, lors de l'exécution, j'ai l'erreur «argument non facultatif» sur le «Item» de «tottab.Item.Value.Rows.Count < nb_max»
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
D'où vient mon erreur?
Merci!
Partager