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

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