VBA_créer une liste (double boucle for ?)

Bonjour à tous,

Petit problème très simple.

J'ai une worksheet avec en colonne A des références d'étiquettes et en colonne B le nombre d'étiquettes à imprimer.

L'imprimante étant capricieuse, elle n'est capable que de lire une seule colonne.

J'aimerais donc créer dans la même worksheet dans une autre colonne (ici E), la liste des étiquettes.

Je précise que la colonne A a environ 50 000 références, donc si possible proposer une solution qui traite le problème rapidement.

image

Merci d'avance pour votre aide et à bientôt,

Mav'

Bonjour,

Oui on peut utiliser 2 boucles for, voici une proposition. J'ai également utilisé une arraylist, c'est plus simple pour créer la liste en colonne E.

Sub Etiquettes()
  Dim vals As Variant
  With ThisWorkbook.Worksheets(1).Range("A2:B2")
    vals = Range(.Cells, .End(xlDown)).Value2
  End With

  Dim outVals As Object
  Set outVals = CreateObject("System.Collections.ArrayList")
  Dim i As Long, j As Long
  For i = 1 To UBound(vals, 1)
    For j = 1 To vals(i, 2)
      outVals.Add vals(i, 1)
    Next j
  Next i

  With ThisWorkbook.Worksheets(1).Range("E2")
    .Resize(outVals.Count, 1).Value2 = WorksheetFunction.Transpose(outVals.ToArray)
  End With
End Sub

Ajoutez ce code dans un module et liez la macro Etiquettes à un bouton. Attention, le code suppose que les données sont sur la 1e feuille (la + à gauche) du classeur (Worksheets(1)).

Bonjour,

Voici une petite variante.

Sub traiteListe()
    Dim plg As Range
    Dim i As Long, j As Long, ligne As Long

    Set plg = Range("A1").CurrentRegion

    ligne = 2
    For i = 2 To plg.Count
        For j = 1 To plg.Cells(i, 2)
            Range("E" & ligne).Value = plg.Cells(i, 1)
            ligne = ligne + 1
        Next j
    Next

Cordialement

Merci à tous les deux, vos solutions fonctionnent parfaitement, je ne vois pas de différences en terme de temps de traitement.

Bonne journée,

Mav'

Merci pour votre retour, bonne journée à vous aussi.

… sur 50 000 lignes aucune différence ?? Surprenant.

Rechercher des sujets similaires à "vba creer liste double boucle"