Dupliquer une plage (ligne) X fois

bonjour

cela ne dois pas être très complexe mais j'avoue saturer un peu

je cherche a copier X fois une ligne ( enfin une plage de ligne )

donc la case Q2 est mon X

je souhaite copier la ligne de A2: P2 autant de fois que X ( case q2 me l'indique )

voici le code que j'ai ecris il manque un truc mais quoi ?

destination a3 :p3

puis a4:p4

ect autant de fois que q2 me le demande

sub duplicata()

F06.Select

  'Dim I As Integer

    For I = 1 To Range("q2").Value

       ???  copy Range("A2:p2" & I + 1)

    Next I

End Sub

Bonjour, bonjour !

Pas besoin de boucle !

Normalement en une seule ligne de code en consultant l'aide VBA de la méthode Range.Copy

en précisant son paramètre Destination

Ou encore en activant le Générateur de macros puis en effectuant la manipulation, une base de code est livrée sur un plateau !

merci pour la réponse

Pour l’enregistreur oui il sait faire sauf qu'il ne prend pas du tout en compte la valeur de ma case Q2

si par exemple q2 =10

si j'enregistre avec l'enregistreur de macro 10 fois ma ligne ( a2: p2 ) en a3:p3 ; en a4:p4 , en a5:p5 , ....

il va toujours me faire ca 10 fois ma copie ( comme il a appris ) alors que mon Q2 sera égale a 20

et que j'ai besoin de 20 copie

c'est pourquoi j''utilise une boucle pour définir le nb de copie que l'on doit faire > Q2

(mais il y a peut être d'autre façon de faire ( on peux faire plusieurs fois les mêmes choses avec des méthodes différentes )

Marc L a écrit :

[…] une base de code […]

Comme je l'ai annoncé, une base de code donc évidemment à adapter !

Et en utilisant la propriété Resize sur la première cellule - ou ligne - de destination pour dimensionner la plage …

Et ce, sans boucle, en une seule ligne de code grâce à la consultation de l'aide de la méthode Copy avec sa Destination

parfois ce qui parait évident pour certain n 'es pas forcement pour l'autre !

https://msdn.microsoft.com/fr-fr/library/office/ff837760.aspx

Range("A2:p2").copy _
    Destination: .Range ("a2:p4")

erreur reference incorecte

https://msdn.microsoft.com/fr-fr/library/office/ff193274.aspx

cet exemple suppose que Sheet1 contient un tableau comprenant une ligne d'en-tête. L'exemple sélectionne le tableau, sans la ligne d'en-tête. Avant d'exécuter l'exemple, la cellule active doit figurer quelque part dans le tableau.

tableau ???

Dim UnePlage As Range
 Set UnePlage = Range("A1:p2")
 UnePlage.Name = "Plage"
 UnePlage.Resize(q2).Name = "Plage" ' 5 lignes de +
 MsgBox Names("Plage").RefersTo 'A1:B7

https://forum.excel-pratique.com/excel/vba-syntaxe-copier-coller-t13550.html

enregistreur macro

 Range("A2:P2").Select
    Selection.copy
    Range("A3").Select
    ActiveSheet.Paste
    Range("A4").Select
    ActiveSheet.Paste
    Range("A5").Select
    ActiveSheet.Paste
    Range("A6").Select
    ActiveSheet.Paste
    Range("A7").Select
    ActiveSheet.Paste
    Range("A8").Select
    ActiveSheet.Paste
    Range("A9").Select
    ActiveSheet.Paste
    Range("A10").Select
    ActiveSheet.Paste
    Range("A11").Select
    ActiveSheet.Paste
    Range("A12").Select
    ActiveSheet.Paste
    Range("A13").Select
    ActiveSheet.Paste
    Range("A14").Select
    ActiveSheet.Paste
    Range("A15").Select
    ActiveSheet.Paste
    Range("A16").Select
    ActiveSheet.Paste
    Application.CutCopyMode = False

je ne dit pas que je ne trouverais pas demain mais aujourd’hui je n'ai pas trouve et a n'as ete une évidence pour moi

Bonjour,

Un exemple à adapter :

Public Sub Demo()
[A2:P2].Offset(1).Resize([Q2]) = [A2:P2].Value
End Sub

merci ,

j’étais encore loin du résultat, et resize je ne connaissais pas avant hier

La démo de Jean-Eric est l'autre manière pour ne copier que les valeurs.

S'il faut aussi conserver le format des cellules, utiliser alors la méthode Copy

j'ajoute une petit code pour ceux qui ont besoin de faire un copie incrémenter

ici on copie la case T2 , incrémente ( autofill ) en T3, T4 ,T5,... et je resize me donne la longueur de mon incrémentation

[T2].AutoFill [T2].Resize([max])
Rechercher des sujets similaires à "dupliquer plage ligne fois"