VBA Recursivité
Maxime084
-
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)
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
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
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
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é.
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é.
Bonjour
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
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