Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

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 ?
 

Paf

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

re,

heu, ben oui, merci.

Corrigé.

A+
 

Pièces jointes

  • Combin Recursif.xls
    30 KB · Affichages: 28
  • Combin Recursif.xls
    30 KB · Affichages: 32

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
552
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…