[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
236
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
14007
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
80
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
236
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
236
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