XL 2013 Récursion : combiner des listes.

  • Initiateur de la discussion Initiateur de la discussion dionys0s
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

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
 
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

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 !
 
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

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 ?
 
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é 🙂
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
3
Affichages
834
Réponses
12
Affichages
631
Retour