VBA Recursivité

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

  1. 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
    1. 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é.
      1. merci pour l'info !
        c'est une idée que je peux exploiter :-)
        bonne suite,
        ed
    2. 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
      1. 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.