XL 2016 Macro pour dupliquer x fois une ligne selon un variable

dieydy

XLDnaute Nouveau
https://drive.google.com/file/d/1s9sgQhu7qAJ9BCVYkwhhqKmZtEXpfXen/view?usp=sharing

Bonjour à tous,

Je cherche à réaliser une macro qui ferait en sorte que pour N demande de duplicatas, N ligne soit créées à la suite. Il faudrait donc que toutes les données de la ligne soient dupliquées et qu'à la place de N dans la colonne Nb Dupilatas, on ait 1 à chaque fois.

Merci d'avance pour votre aide.
 
Solution
Bonjour Dieydy,
En PJ un essai sous XL, avec :
VB:
Sub Duplication()
Application.ScreenUpdating = False
DL = Range("N65500").End(xlUp).Row          ' Dernière ligne
For L = DL To 2 Step -1                     ' Pour toutes les lignes
    If Cells(L, "N") > 1 Then               ' Si nombre de lignes désirées >1
        NbDupliq = Cells(L, "N")            ' Mémoriser nombre de lignes à dupliquer
        Cells(L, "N") = 1                   ' Mettre Nb lignes à 1
        For N = 1 To NbDupliq - 1           ' Pour dupliquer N-1 fois
            Cells(L, 1).Select              ' Selection ligne
            Selection.EntireRow.Copy        ' Copie de la ligne
            Selection.Insert Shift:=xlDown  ' Insertion ligne en dessous...

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonjour Dieydy,
En PJ un essai sous XL, avec :
VB:
Sub Duplication()
Application.ScreenUpdating = False
DL = Range("N65500").End(xlUp).Row          ' Dernière ligne
For L = DL To 2 Step -1                     ' Pour toutes les lignes
    If Cells(L, "N") > 1 Then               ' Si nombre de lignes désirées >1
        NbDupliq = Cells(L, "N")            ' Mémoriser nombre de lignes à dupliquer
        Cells(L, "N") = 1                   ' Mettre Nb lignes à 1
        For N = 1 To NbDupliq - 1           ' Pour dupliquer N-1 fois
            Cells(L, 1).Select              ' Selection ligne
            Selection.EntireRow.Copy        ' Copie de la ligne
            Selection.Insert Shift:=xlDown  ' Insertion ligne en dessous
            Application.CutCopyMode = False ' Copie des infos
        Next N
    End If
Next L
End Sub
J'ai supposé que le Nb duplicata était le nombre de ligne à obtenir et non le nombre de duplicata à fornir.
( sinon changer le NbDupliq - 1 en NbDupliq )
 

Pièces jointes

  • Rapport-duplicatafacture-2020-09-mobile-papier.xlsm
    31.1 KB · Affichages: 64

dieydy

XLDnaute Nouveau
Sylvanu, vous êtes incroyable. Votre méthode marche parfaitement dans mon cas. Merci beaucoup.

Au passage, si je veux intégrer une colonne supplémentaire pour que la première ligne corresponde à un code (ex : ABCD) et que toutes les suivantes, ayant la même référence client, aient un code différent (ex : AABB) et ce pour client, quelle formule/lignes de macro ajouter ?

Pour être plus clair : on aurait client 12121212 qui demande 5 duplicatas. Donc le premier avec le code ABCD, les 4 autres avec le code AABB dans une nouvelle colonne. Le client 12121213 en demande 9, donc la première ligne avec ABCD, les 8 suivants avec AABB.

https://drive.google.com/file/d/1s9sgQhu7qAJ9BCVYkwhhqKmZtEXpfXen/view?usp=sharing (même tableau avec des ref client différentes)

🤔
 
Dernière édition:

PAT83500

XLDnaute Nouveau
Bonjour,

Je suis débutante et j'ai essayé ce code (excel 2013) et ca ne fonctionne pas.
Ci dessous les infos si vous pouvez m'aider

la dernière colonne F est le nombre de lignes dupliquées souhaitées donc 5 dans ce cas (ce tableau se trouve ligne 91 de l'onglet rapport)
Ville Code Postal Adresse Observations N° Batexpert
Enghein les bains 95800 rue des pavillons 1 5

J'ai bien remplacé le N par le F.

Merci d'avance pour votre aide.
 

PAT83500

XLDnaute Nouveau
Re Bonjour,

Le bug se trouverait sur la ligne :

Sub Duplication()
Application.ScreenUpdating = False
DL = Range("F105").End(xlUp).Row ' Dernière ligne
For L = DL To 2 Step -1 ' Pour toutes les lignes
If Cells(L, "F") > 1 Then ' Si nombre de lignes désirées >1
NbDupliq = Cells(L, "F") ' Mémoriser nombre de lignes à dupliquer
Cells(L, "F") = 1 ' Mettre Nb lignes à 1
For F = 1 To NbDupliq - 1 ' Pour dupliquer N-1 fois
Cells(L, 92).Select ' Selection ligne
Selection.EntireRow.Copy ' Copie de la ligne
Selection.Insert Shift:=xlDown ' Insertion ligne en dessous
Application.CutCopyMode = False ' Copie des infos
Next F
End If
Next L
End Sub
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonjour Pat et bienvenu sur XLD,
Utilisez les balises </> pour le code c'est plus lisible ( à droite de l'icone GIF)
Essayez :
VB:
For F = 1 To NbDupliq - 1 ' Pour dupliquer N-1 fois
    Rows(L).Select
    Selection.EntireRow.Copy ' Copie de la ligne
    Selection.Insert Shift:=xlDown ' Insertion ligne en dessous
    Application.CutCopyMode = False ' Copie des infos
Next F
 

PAT83500

XLDnaute Nouveau
Bonjour,

Merci pour votre réactivité, ca fonctionne par contre il me transforme les formules présentes dans la première ligne du tableau (qui va chercher les infos dans la feuille info), comment garder les formules présentes dans la ligne 92 copier ?

Merci encore.

Sub Duplication()
Application.ScreenUpdating = False
DL = Range("F105").End(xlUp).Row ' Dernière ligne
For L = DL To 92 Step -1 ' Pour toutes les lignes
If Cells(L, "F") > 1 Then ' Si nombre de lignes désirées >1
NbDupliq = Cells(L, "F") ' Mémoriser nombre de lignes à dupliquer
Cells(L, "F") = 1 ' Mettre Nb lignes à 1
For F = 1 To NbDupliq - 1 ' Pour dupliquer N-1 fois
Rows(L).Select
Selection.EntireRow.Copy ' Copie de la ligne
Selection.Insert Shift:=xlDown ' Insertion ligne en dessous
Application.CutCopyMode = False ' Copie des infos
Next F
End If
Next L
End Sub
 

Pièces jointes

  • Affaire.xlsm
    838.3 KB · Affichages: 3

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonjour ,
Avez vous essayez ce que je préconise ?
Donc pour dupliquer les valeurs mettez en A92 : =Info!A$9, ainsi la ligne ne changera pas.
Par ex : Ville : =Info!$A$9, CodPost : =Info!$B$9 etc ...
vous obtenez ceci :
1698656975283.png
 

Pièces jointes

  • Affaire (1).xlsm
    835.3 KB · Affichages: 5

Discussions similaires

Statistiques des forums

Discussions
315 087
Messages
2 116 086
Membres
112 656
dernier inscrit
VNVT