[Déplacé .NET -> VBA]Macro pour Copier une zone d'une feuille de calcule X fois

Résolu
aouaoua Messages postés 27 Date d'inscription lundi 19 février 2007 Statut Membre Dernière intervention 3 août 2014 - 13 sept. 2011 à 16:03
aouaoua Messages postés 27 Date d'inscription lundi 19 février 2007 Statut Membre Dernière intervention 3 août 2014 - 14 sept. 2011 à 11:18
Bonjour le Forum
actuellement je suis sur un travaille qui consiste a reproduire une zone qui comporte un formulaire qui devrait étre reproduit X fois selon le nombre de clients, j'utlise actuellemnt un code qui me permis de réaliser cette opération le hic c'est qu'il copier la zone mais dans la meme place sans avancer en quelque sorte il écrase.
Voici le code :

Sub copiercoller()
On Error Resume Next
Dim repeats As Long, ctrl As Long
    repeats = Application.InputBox(prompt:="Entrez le nombre de fois à copier", Type:=1)
    repeats = repeats * 17
    Range("A2: G63").Select
    Selection.Copy
    For ctrl = 17 To repeats Step 17
    Range("A2").Offset(ctrl, 0).Insert Shift:=xlDown     'PasteSpecial
    Range("A65").Select
    Next
End Sub

Merci de votre aide
FOU DE clientS CODES

7 réponses

ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
13 sept. 2011 à 21:44
et si, pour plus de clarté, tu veux en plus insérer une ligne supplémentaire entre ces plages ===>>
Dim ma_plage_a_copier As Range
  Set ma_plage_a_copier = Range("A2:G4") ' ici la plage à copier (la tienne, c'est A2:G63)
  For i = 1 To 4 ' pour copier 4 fois (toi, c'est 17)
     ma_plage_a_copier.Copy Destination:=Range("A" & ma_plage_a_copier.Row + i + i * ma_plage_a_copier.Rows.Count)
  Next


T'as presque tout, là, non ?

____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
3
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
13 sept. 2011 à 20:29
Salut

A quoi te sert ta boucle avec ctrl puisque tu n'utilises pas cette variable ?
Tu as créé un code pour copier des cellules.
Mais quelle destination voudrais-tu atteindre ?
D'autres feuilles ?
Existent-elles ?
Où se trouve le code pour les créer ?
Voir ce simple code + l'aide :
    Dim oNewSheet As Worksheet
    Set oNewSheet = Sheets.Add
    oNewSheet.Name = "Toto " & Sheets.Count
    Set oNewSheet = Nothing

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
0
cs_GG72 Messages postés 94 Date d'inscription vendredi 13 mai 2005 Statut Membre Dernière intervention 30 octobre 2011
13 sept. 2011 à 21:14
Bonsoir tous,

aouaoua, dans ton code, où se trouve l'instruction qui permet de coller ton
Range("A2: G63")?

2 opérations sont nécessaires pour un copier/coller.
1) copier par l'instruction Copy
2) coller par l'instruction Paste ou PasteSpecial

jack, la variable ctrl est bien utilisée:
Range("A2").Offset(ctrl, 0).Insert Shift:=xlDown
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
13 sept. 2011 à 21:16
Bonjour,

- il te faut t'intéresser à la méthode copy (ton aide VBA sur ce mot) avec son paramètre destination
- évite ces select qui n'apportent que lourdeurs.
- je ne comprends pas trop ce que tu fais dans ta boucle actuelle, car elle a un pas (step) de 17 (donc ctrl = multiple de 17===>> et ton offset sur ctrl également), alors que ce que tu sembles vouloir copier (la plage A2: G63) concerne 62 lignes !
- et ton select de la cellule A65, on se demande bien pourquoi tu le fais !

Tu voudras bien comprendre toutes les interrogations que cela suscite !
____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_GG72 Messages postés 94 Date d'inscription vendredi 13 mai 2005 Statut Membre Dernière intervention 30 octobre 2011
13 sept. 2011 à 21:19
Oups!!!

aouaoua, fatigué ce soir. Ne pas tenir compte de mon précédent message.

Excuses
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
13 sept. 2011 à 21:29
Bon...
un petit exemple (presque du tout cuit) :

Dim ma_plage_a_copier As Range
  Set ma_plage_a_copier = Range("A2:G4") ' ici la plage à copier (la tienne, c'est A2:G63)
  For i = 1 To 4 ' pour copier 4 fois (toi, c'est 17)
     ma_plage_a_copier.Copy Destination:=Range("A" & ma_plage_a_copier.Row + i * ma_plage_a_copier.Rows.Count)
  Next




____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
0
aouaoua Messages postés 27 Date d'inscription lundi 19 février 2007 Statut Membre Dernière intervention 3 août 2014
14 sept. 2011 à 11:18
Bonjour le Forum
je remercié tous le monde pour les suggestions et les remarques qui ont été formulées a ce sujet et le temps précieux accordé donc pour finir je vous dis 1000 merci a vous tous et finalement j'ai opté pour la réponse ucfoutu.
merci mes amis

FOU DES CODES
0
Rejoignez-nous