Créer des expressions à partir de 2 listes

Bonjour,

Je dispose de 2 listes de mots.

La première liste comprend 2000 mots (de 8 caractères dont des espaces, au cas où ce serait important).

La 2ème liste comprend 500 mots ("_" suivi de 4 caractères).

Je voudrais créer toutes les concaténations possibles de mots issus de la liste 1 et de mots issus de la liste 2 (uniquement dans cet ordre : mot issu de la liste 1 suivi des mots issus de la liste 2).

Donc par exemple, si ma liste 1 est :

2a 2b 6c

3c 5a 6b

Et ma liste 2 et :

_2d2d

_3c3a

La liste de résultats devrait être :

2a 2b 6c_2d2d

2a 2b 6c_3c3a

3c 5a 6b_2d2d

3c 5a 6b_3c3a

Jusque là, c'est pas très dur, il me suffirait de faire un tableau et de concaténer les entêtes de lignes et de colonnes.

... Sauf que j'ai besoin de ces résultats listés verticalement donc un tableau ne fait pas l'affaire.

C'est le genre de truc faisable en VBA, mais je ne sais pas le faire...

Merci de votre aide!

Nicole

Bonsoir,

2000 x 500 = 1 000 000 de lignes

c'est bien ce que tu veux ?

A+


Et les listes je les prends ou ?

galopin01 a écrit :

Bonsoir,

2000 x 500 = 1 000 000 de lignes

c'est bien ce que tu veux ?

A+


Et les listes je les prends ou ?

Bonsoir Galopin !

Oui, c'est ce que je voulais.

Cela dit, je crois que je viens de trouver la solution en commençant par créer un tableau, puis en utilisant le code de James007 pour transposer le contenu du tableau en une colonne : https://forum.excel-pratique.com/excel/lister-verticalement-les-valeurs-d-un-tableau-t99364.html

Ok...

Sinon... j'ai cet article là (en pièce jointe)

[EDIT] Ne fonctionne pas au de la de 65500 lignes...

Je suppose que c'est une limitation due au Dictionnary !

A+

13nicopat.xlsm (16.60 Ko)

Bonsoir,

Teste voir si ça te convient (prend tout de même une quinzaine de secondes pour 1 000 000 de valeurs) :

Sub Test()

    Dim Plage1
    Dim Plage2
    Dim Tbl() As String
    Dim I As Long
    Dim J As Long
    Dim k As Long

    'en colonne A
    With ActiveSheet: Plage1 = .Range(.Cells(1, 1), .Cells(.Rows.Count, 1).End(xlUp)): End With
    'en colonne B
    With ActiveSheet: Plage2 = .Range(.Cells(1, 2), .Cells(.Rows.Count, 2).End(xlUp)): End With

    'dimensionne avant et de cette façon afin d'éviter la transposition à la fin
    ReDim Tbl(1 To UBound(Plage1) * UBound(Plage2), 1 To 1)

    For I = 1 To UBound(Plage1)
        For J = 1 To UBound(Plage2)
            k = k + 1
            Tbl(k, 1) = Plage1(I, 1) & Plage2(J, 1)
    Next J, I

    'en colonne C
    Range(Cells(1, 3), Cells(UBound(Tbl), 3)) = Tbl

End Sub
Rechercher des sujets similaires à "creer expressions partir listes"