Répéter lignes selon nombre précis

Résolu
benoitnat -  
 benoitnat -
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
Configuration: Windows XP Internet Explorer 6.0

4 réponses

  1. Gord21 Messages postés 928 Statut Membre 289
     
    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
  2. benoitnat
     
    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
  3. Gord21 Messages postés 928 Statut Membre 289
     
    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
  4. benoitnat
     
    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