XL 2013 Récursion : combiner des listes.

dionys0s

XLDnaute Impliqué
Bonjour le forum,

je cherche en vain sur Internet (mais peut-être n'utilisé-je pas les bon mots-clé) comment combiner n listes.
Par exemple à partir de 3 tableaux en une dimension (A1.1, A1.2), (A2.1, A2.2) et (A3.1, A3.2), j'obtiendrai un tableau de deux dimensions comme ceci listant toutes les combinaisons possibles alliant les 3 tableaux :
A1.1 | A2.1 | A3.1
A1.1 | A2.1 | A3.2
A1.1 | A2.2 | A3.1
A1.1 | A2.2 | A3.2
A1.2 | A2.1 | A3.1
A1.2 | A2.1 | A3.2
A1.2 | A2.2 | A3.1
A1.2 | A2.2 | A3.2

Je sais que je dois fonctionner de manière récursive mais je n'y arrive pas.
J'en suis là pour le moment, mais j'ai l'impression de m'égarer...
VB:
Public Function Combin(ParamArray ArgList() As Variant) As Variant

  Dim Elt As Variant, Bool As Boolean, x As Long, Rslt() As Variant

  For Each Elt In ArgList
    If Bool Then
      x = x * (UBound(Elt) - LBound(Elt) + 1)
    Else: Bool = True: x = UBound(Elt) - LBound(Elt) + 1: End If
  Next Elt

  ReDim Rslt(1 To x, LBound(ArgList) To UBound(ArgList))
  sCombin Rslt, 1, LBound(ArgList), ArgList

End Function

Private Sub sCombin(ByRef Rslt() As Variant, ByVal i As Long, ByVal j As Long, ParamArray ArgList() As Variant)

  Dim Elt As Variant, SubElt As Variant

  For Each Elt In ArgList
'    If VBA.IsArray(Elt) Then
'      For Each SubElt In Elt
'        sCombin Rslt, i, j, SubElt
'      Next SubElt
'    Else
'      Stop
'      MsgBox Elt
'    End If
  Next Elt

End Sub
 

Paf

XLDnaute Barbatruc
Re : Récursion : combiner des listes.

Bonjour,

Pas bien saisi comment se présentent les tableaux initiaux à une dimension ni comment ils sont transmis .

Un essai en PJ; chaque colonne représente un tableau, on sélectionne le nombre de lignes et de colonnes puis action sur le commandbutton. les résultats sont affichés à partir de H1.

à adapter.

A+
 

Pièces jointes

  • Combin Recursif.xls
    47 KB · Affichages: 36
  • Combin Recursif.xls
    47 KB · Affichages: 36

dionys0s

XLDnaute Impliqué
Re : Récursion : combiner des listes.

Bonjour le forum,
bonjour Paf

Merci pour ton aide. Les différentes listes ne sont pas forcément de taille identique, mais pour le reste c'est nickel :)
Je devrais pouvoir adapter ça à mon besoin.

Merci encore !
 

dionys0s

XLDnaute Impliqué
Re : Récursion : combiner des listes.

Re le forum

modification terminées :

Une fonction avec un unique paramètre : un tableau en 1D qui contient les listes (elles-même des tableaux 1D) qui ne sont pas nécessairement de taille identique. Il n'y a plus de variable de module.

Merci encore Paf.
 

Pièces jointes

  • Combin Recursif.xlsm
    24.9 KB · Affichages: 24

Paf

XLDnaute Barbatruc
Re : Récursion : combiner des listes.

re bonjour dionys0s,


Quelques modifications à ma proposition:

- on ne sélectionne plus à la souris
- on ne traite que si l'élément est renseigné

A+
 

Pièces jointes

  • Combin Recursif.xls
    27 KB · Affichages: 22
  • Combin Recursif.xls
    27 KB · Affichages: 20

dionys0s

XLDnaute Impliqué
Re : Récursion : combiner des listes.

Re,

merci.
Un inconvénient avec ta manière de dimensionner TabFin, c'est qu'à moins que les listes soient de taille identique, il est verticalement surdimensionné. Et donc à la dépose, tout ce qui aurait pu se trouver en dessous est effacé.

Par ailleurs, pourquoi passer le tableau des indexs en argument alors qu'il est déclaré en tête de module ?
 

dionys0s

XLDnaute Impliqué
Re : Récursion : combiner des listes.

Re,

cf. post #4, pour le dimensionnement j'ai le fais en amont (en parcourant les listes).
Ça évite le redim preserve et le tranpose à la fin (qui finit par planter quand le tableau est trop grand si mes souvenirs ne me trompent pas).

Merci encore. Tu m'as bien aidé :)
 

Discussions similaires

Réponses
12
Affichages
413
Réponses
2
Affichages
549

Statistiques des forums

Discussions
314 220
Messages
2 107 431
Membres
109 824
dernier inscrit
Teglin