Autres macro pour concaténer plusieurs listes

Phil0208

XLDnaute Nouveau
bonjour,

je vous solicite pour une macro que je voudrais créer :

j'ai 3 listes, une liste d'article, une liste de magasins et une liste de fournisseurs.
je veux créer une liste avec autant de lignes que de combinaisons possible entre mes 3 listes.

pouvez-vous m'aider please?

Merci
 
Solution
Bonsoir @Phil0208 :), bienvenue sur XLD :),

Les trois listes sources ont chacune leur en-tête en ligne 1.
Liste1 => en colonne A, Liste2 => en colonne B, Liste3 => en colonne C.
Liste résultante en colonnes (E, F, G).

Comme pas de fichier joint :mad:, macro pas testée!:( Essayez ce code :
VB:
Sub TroisEnUn()
Dim t(1 To 3), r, x, y, z, n&
   If ActiveSheet.FilterMode Then ActiveSheet.ShowAllData
   For n = 1 To 3: t(n) = Range(Cells(2, n), Cells(Rows.Count, n).End(xlUp)): Next
   For n = 1 To 3
      If Not IsArray(t(n)) Then
         ReDim r(1 To 1, 1 To 1): r(1, 1) = t(n): t(n) = r
      End If
   Next n
   ReDim r(1 To 1 + UBound(t(1)) * UBound(t(2)) * UBound(t(3)), 1 To 3): n = 1
   For Each x In t(1): For Each y In t(2): For...

mapomme

XLDnaute Barbatruc
Supporter XLD
Bonsoir @Phil0208 :), bienvenue sur XLD :),

Les trois listes sources ont chacune leur en-tête en ligne 1.
Liste1 => en colonne A, Liste2 => en colonne B, Liste3 => en colonne C.
Liste résultante en colonnes (E, F, G).

Comme pas de fichier joint :mad:, macro pas testée!:( Essayez ce code :
VB:
Sub TroisEnUn()
Dim t(1 To 3), r, x, y, z, n&
   If ActiveSheet.FilterMode Then ActiveSheet.ShowAllData
   For n = 1 To 3: t(n) = Range(Cells(2, n), Cells(Rows.Count, n).End(xlUp)): Next
   For n = 1 To 3
      If Not IsArray(t(n)) Then
         ReDim r(1 To 1, 1 To 1): r(1, 1) = t(n): t(n) = r
      End If
   Next n
   ReDim r(1 To 1 + UBound(t(1)) * UBound(t(2)) * UBound(t(3)), 1 To 3): n = 1
   For Each x In t(1): For Each y In t(2): For Each z In t(3)
      n = n + 1: r(n, 1) = x: r(n, 2) = y: r(n, 3) = z: Next z, y, x
   r(1, 1) = [a1]: r(1, 2) = [b1]:: r(1, 3) = [c1]
   Range("e:g").ClearContents: Range("e1").Resize(UBound(r), 3) = r
End Sub
 
Dernière édition:

Gégé-45550

XLDnaute Accro
Bonsoir Phil0208 et mapomme,
Comme d'hab. la réponse de mapomme est rapide et excellente.
C'est plutôt l'objectif de Phil0208 qui interroge quant à la liste résultante.
Si A est le nombre d'articles, B le nombre de magasins et C le nombre de fournisseurs, la liste comptera A*B*C éléments, soit 1 000 éléments avec seulement 10 items dans chaque liste.
Alors comment traiter cette liste si elle contient plusieurs centaines d'articles et quelques dizaines de magasins et de fournisseurs ? Les capacités d'Excel risquent d'être rapidement dépassées.
Bonne soirée.
 

Phil0208

XLDnaute Nouveau
Bonjour @Gégé-45550

Tu as sûrement raison. Mes connaissances sont limitées. Je vais déjà gagner beaucoup de temps avec cette macro.
Je me suis peut être mal exprimé. Mon logiciel va générer des bons de commandes pour mes fournisseurs. Je vais donc juste importer mon fichier dans ce logiciel pour qu'il génère les bons de commandes.
Vu que je ne vais importer qu'une seule fois mon fichier, pas trop d'intérêt de faire une macro pour cela, je vais juste appuyer une fois sur le bouton "importer".
Mais merci pour ta réflexion qui aurait très bien pu être pertinente dans le cas d'une tâche répétitive.
Bonne journée
 

Discussions similaires