VBA Recursivité

Maxime084 -  
 Maxime084 -
Bonjour,

Je cherche à remplacer une partie de mon prog par quelquechose de recursif.
Je vais vous mettre la partie concernée.

J'ai presque honte de poster cela, c'est moche au possible, je ne sais pas comment j'en suis arrivé la. Mais aujourd'hui cela marche, mais j'aimerais rendre cela un peu plus... fonctionnel.






For temp1 = 1 To 2
For temp3 = 1 To 3
For temp4 = 1 To 3
For temp5 = 1 To 10
For temp7 = 1 To 5
For temp9 = 1 To 5
For temp10 = 1 To 7
For temp13 = 1 To 4
For temp14 = 1 To 2
For temp15 = 1 To 2
For temp16 = 1 To 5
For temp17 = 1 To 2
For temp18 = 1 To 23


tampon = Tableau(1, temp(1)) & Tableau(3, temp(3)) & Tableau(4, temp(4)) & Tableau(5, temp(5)) & Tableau(7, temp(7)) & Tableau(9, temp(9)) & Tableau(10, temp(10)) & Tableau(13, temp(13)) & Tableau(14, temp(14)) & Tableau(15, temp(15)) & Tableau(16, temp(16)) & Tableau(17, temp(17)) & Tableau(18, temp(18))

(Traitement perso)

Next temp18
Next temp17
Next temp16
Next temp15
Next temp14
Next temp13
Next temp10
Next temp9
Next temp7
Next temp5
Next temp4
Next temp3
Next temp1





Je demande cela car je risque de devoir augmenter la la taille de mon tableau, et ca va juste devenir ingérable.

Merci d'avance. (Et désolé pour la mise en page, j'ai esseyé de reprendre tout ca, mais impossible de sauter une seule ligne, alors qu'a l'ecriture tout est propre)

3 réponses

ed
 
salut,

je suis intéressé si tu trouves la solution, j'ai déjà essayé par plusieurs moyens (du style ma_variable = "temp" & i pour concaténer) mais je n'ai pas abouti...

bonne suite,
ed
0
Maxime084
 
La concatenation pour des noms de variables ne fonctionne pas vraiment.
le mieux reste d'utiliser plutot un tableau et mettre temp(i).

je ne peux pas utiliser cela, car c'est interdit lorsque l'on a des For imbriqué.
D'où ma nécessité de passer par la récursivité.
0
ed
 
merci pour l'info !
c'est une idée que je peux exploiter :-)
bonne suite,
ed
0
le père
 
Bonjour

Option Explicit 
Const PROFMAX = 13 'nombre d'imbrications, détermine les tailles de nboucles et TbIndices 
Const BCLMAX = 23 ' pour dimensionner table - plus grand nombre dans nboucles 
Const INDEXMAX = 18 ' pour dimensionner table - plus grand nombre dans TbIndices 

Dim nboucles 
Dim TbIndices 

Dim table(INDEXMAX, BCLMAX) 

Sub main() 

Dim kx, ky 
  nboucles = Array(2, 3, 3, 10, 5, 5, 7, 4, 2, 2, 5, 2, 23) 
  TbIndices = Array(1, 3, 4, 5, 7, 9, 10, 13, 14, 15, 16, 17, 18) 
' initialisation bidon de table 
  For kx = 1 To INDEXMAX 
    For ky = 1 To BCLMAX 
      table(kx, ky) = kx + ky 
    Next ky 
  Next kx 
  SubRecursive 0, "" ' appel initial 
End Sub 

Sub SubRecursive(profondeur, PourTampon) 
  Dim k, tampon 
  For k = 1 To nboucles(profondeur) 
    tampon = PourTampon & table(TbIndices(profondeur), k)
    If profondeur = PROFMAX - 1 Then 
      Debug.Print tampon ' traitement perso 
    Else 
      SubRecursive profondeur + 1, tampon 
    End If 
  Next k 
End Sub 


Si j'ai bien compris ce que tu voulais...
nboucles est un tableau qui fixe le nombre de boucles du 'for' à chaque niveau
TbIndices est un tableau qui indique les lignes (ou colonnes ?) à prendre en compte dans table
Tel que je l'ai écrit, le premier appel a lieu avec une "profondeur" de 0, on est donc "au fond" à PROFMAX-1
0
Maxime084
 
Je verrais ca lundi. J'ai la tete explosé, et le weekend approche :)

Merci d'avance, ca ne m'a l'air pas trop mal, je le sens bien.
0