Macro pr copier autant de ligne que la valeur d'une cellule

Résolu

Bonjour à tous :-)

Voici le fichier concerné (qui en réalité est bien plus lourd mais pour l'exemple cela suffira):

https://www.cjoint.com/c/MFnoFvgtekh

J'aimerai si possible savoir s'il existerait une macro qui permettrait de copier cet onglet mais en me copiant chaque ligne le nombre de fois que l'indique la colonne D.

Ce fichier va me permettra d'imprimer le bon nombre d'étiquettes par référence, et 70 000  références sont concernées, donc je cherche un moyen de faire plus simple que le faire à la mano :-)

J'espère que ma demande vous semble claire.

merci d'avance pour votre aide :-)

5 réponses

  1. Bonjour,

    Si tu utilises une version Excel supérieure ou égale à 2016, tu disposes nativement d'un outil très puissant "Power Query" (téléchargeable gratuitement pour les versions 2013 et 2010 Pro)

    Regarde ce que cela pourrait donner, sachant qu'on peut ensuite supprimer des colonnes, modifier l'ordre des colonnes....

    J'ai modifié ta plage de données en Tableau Structuré (TS), nommé "Tableau1"

    Et dans l'onglet "PQ", le résultat de la requête. Pour mettre à jour, clic droit dans une cellule de cette requête, "Actualiser", ou dans le ruban "Données", "Actualiser tout"

    Bonne apm

    https://www.cjoint.com/c/MFnpn31XaiC


    0
    1. 1000 mercis pour votre aide !!

        est-il possible d'avoir le script stp ? "sécurité" oblige au boulot, de ce fait je ne peux qu'ouvrir le fichier sans pouvoir activer les macros, et de ce fait je n'ai pas accès au script.

      Merci beaucoup d'avance :-)

      0
      1. Bonjour

        Option Explicit
        
        Const FS = "Feuil1"
        Const FB = "Feuil2"
        
        Const lideb = 2
        Const costo = 4
        Const cofin = 8
        
        Public Sub ok()
        Dim liFS As Long, lifinFS As Long, n As Long, k As Long, plage As Range
        Dim liFB As Long
        Application.ScreenUpdating = False
        liFB = lideb
        With Sheets(FS)
          lifinFS = .Cells(Rows.Count, 1).End(xlUp).Row
          For liFS = lideb To lifinFS
            Set plage = .Range(.Cells(liFS, 1), .Cells(liFS, cofin))
            n = .Cells(liFS, costo).Value
            For k = 1 To n
               plage.Copy Sheets(FB).Cells(liFB, 1)
               liFB = liFB + 1
            Next k
          Next liFS
        End With

        à mettre dans un module général (Module 1 par exemple)

        Cdlmnt

        0
        1. Bonjour

          merci beaucoup   cela fonctionne parfaitement, je peux passer a un autre dossier maintenant :-)

          0
      2. merci beaucoup je teste de suite :-)

        0