Répéter lignes selon nombre précis

Résolu/Fermé
benoitnat - 1 déc. 2009 à 15:16
 benoitnat - 2 déc. 2009 à 13:26
Bonjour,

Je n'y connais rien en VBA, j'ai donc beaucoup de mal à adapter les exemples trouvés dans ce forum à ce que je veux faire.
Voilà l'idée :
Je souhaite répéter les lignes de mon classeur un certain nombre de fois (ce nombre est précisé dans une cellule)
exemple :
nombre défini en cellule G1 : 30, en cellule G2 : 20...
Je souhaite donc dupliquer ma ligne 1 30 fois, ma ligne 2 20 fois...

Si quelqu'un connait un truc je suis preneuse mais j'ai besoin de toute la procédure détaillée car comme je l'ai dit, je n'y connais rien !

Par avance merci

4 réponses

Gord21 Messages postés 918 Date d'inscription samedi 21 novembre 2009 Statut Membre Dernière intervention 20 mars 2013 289
2 déc. 2009 à 12:47
Bonjour,
Dans le principe, c'est possible mais j'ai deux questions.
Est-ce que toutes tes cellules G sont remplies ou est-ce qu'il peut y avoir G5=10, G6 vide, G7=15 ?
J'imagine que suivant ton exemple, tu copies 29 fois la ligne 1 entre les lignes 1 et 2, puis 19 lignes entre les lignes 31 et 32 (lignes 2 et 3 d'origine), ...
0
Bonjour et merci d'avoir répondu.

Je confirme que toutes les lignes de ma colonne G sont remplies, certaines sont avec le nombre 0.
Sinon c'est ça, je voulais copier 29 fois la ligne 1 entre les lignes 1 et 2, puis 19 lignes entre les lignes 31 et 32 (lignes 2 et 3 d'origine), ...
Pour le cas sur lequel je travaille, je l'ai fait manuellement car je devais le terminer hier, donc si tu n'as pas le temps de te pencher sur le problème ce n'est pas grave, mais si tu as la solution rapidement, ça m'intéresse de la connaître pour une prochaine fois

Merci
0
Gord21 Messages postés 918 Date d'inscription samedi 21 novembre 2009 Statut Membre Dernière intervention 20 mars 2013 289
2 déc. 2009 à 13:16
Voici le texte de la macro

Sub Copies_lignes()
'
Dim nb_copies As Integer
Dim ligne_traitee As Integer
'
ligne_traitee = 1
'
While Range("G" & ligne_traitee).Value <> ""
nb_copies = Range("G" & ligne_traitee).Value
If nb_copies > 1 Then
Rows(ligne_traitee).Copy
Rows((ligne_traitee + 1) & ":" & (ligne_traitee + nb_copies - 1)).Insert Shift:=xlDown
ligne_traitee = ligne_traitee + nb_copies
Else
ligne_traitee = ligne_traitee + 1
End If
Wend

Application.CutCopyMode = False

End Sub
0
Merci beaucoup ça fonctionne, c'est magique !

Il va vraiment falloir que j'apprenne le langage VBA car c'est extraordinaire les possibilités que ça ouvre.

Merci encore et bonne journée
0