XL 2013 [Résolu] VBA copier une cellule dans une range plusieurs fois à la suite

chacal33

XLDnaute Junior
Bonsoir à toutes et à tous,

je suis probablement fatigué... mais je bloque sur un code depuis quelques heures.

Je souhaite copier une cellule dans une range sur une autre feuille plusieurs fois à la suite.

Pour l'instant j'ai le code suivant:

VB:
Dim x As Long
Dim y As Long
Dim z As Long
Dim LastRPreTCD As Long
Dim LastCData As Long
LastRPreTCD = Sheets("PRETCD").Cells(Sheets("PRETCD").Rows.Count, "A").End(xlUp).Row
LastCData = Sheets("DATA").Cells(1, Sheets("DATA").Columns.Count).End(xlToLeft).Column
x = (LastCData - 1) * (LastRPreTCD - 1)

For z = 2 To LastCData
For y = 2 To x Step 21
Sheets("DATA").Cells(1, z).Copy Sheets("PRETCD").Range(Cells(y, 12), Cells(y + 22, 12))
Next
Next
Si quelqu'un avait la bonté d'éclairer ma route, je vous en serai reconnaissant.

A+

Matt
 

chacal33

XLDnaute Junior
C'est ce que je souhaiterais... Mais ce n'est pas le cas.
En résultat, je me retrouve avec la dernière occurence de z collée trop de fois...
 

dg62

XLDnaute Accro
re,
à tester
VB:
Sub TEST()

Dim x As Long
Dim y As Long
Dim z As Long
Dim LastRPreTCD As Long
Dim LastCData As Long
LastRPreTCD = Sheets("PRETCD").Cells(Sheets("PRETCD").Rows.Count, "A").End(xlUp).Row
LastCData = Sheets("DATA").Cells(1, Sheets("DATA").Columns.Count).End(xlToLeft).Column
x = (LastCData - 1) * (LastRPreTCD - 1)
n = 2
For z = 2 To LastCData

For y = n To x
Sheets("DATA").Cells(1, z).Copy Sheets("PRETCD").Range(Cells(y, 12), Cells(y + 22, 12))

Next
n = n + 21
Next

End Sub
 

chacal33

XLDnaute Junior
Re,

Bien vu le rajout d'une variable!!!

je viens d'essayer. Ca fonctionne mieux mais le collage continue au-delà de la dernière ligne...
Je ne comprends pas pourquoi.
 

dg62

XLDnaute Accro
Re,

Bien vu le rajout d'une variable!!!

je viens d'essayer. Ca fonctionne mieux mais le collage continue au-delà de la dernière ligne...
Je ne comprends pas pourquoi.
Comment êtes vous arrivé au calcul de la variable x ? Pour moi le problème vient de la.
 

dg62

XLDnaute Accro
bonjour
ça semble fonctionner

VB:
Sub TEST()

Dim x As Long
Dim y As Long
Dim z As Long
Dim LastRPreTCD As Long
Dim LastCData As Long
LastRPreTCD = Sheets("PRETCD").Cells(Sheets("PRETCD").Rows.Count, "A").End(xlUp).Row
LastCData = Sheets("DATA").Cells(1, Sheets("DATA").Columns.Count).End(xlToLeft).Column


n = 2
For z = 2 To LastCData

For y = n To LastRPreTCD
Sheets("DATA").Cells(1, z).Copy Sheets("PRETCD").Cells(y, 12)

Next
n = n + 21
Next

End Sub
 
Dernière édition:

Staple1600

XLDnaute Barbatruc
Bonjour le fil,

dg62
Juste de passage en mode dubitatif ;)
VB:
Sub Test()
Dim y&
y = 1600
MsgBox Range(Cells(y, 12), Cells(y, 12)).Address(0, 0) 'bizarre comme syntaxe, non ? ;-)
MsgBox Cells(y, 12).Address(0, 0)
MsgBox Cells(y, "L").Address(0, 0)
MsgBox Range("L" & y).Address(0, 0)
End Sub
 

dg62

XLDnaute Accro
Bonjour le fil,

dg62
Juste de passage en mode dubitatif ;)
VB:
Sub Test()
Dim y&
y = 1600
MsgBox Range(Cells(y, 12), Cells(y, 12)).Address(0, 0) 'bizarre comme syntaxe, non ? ;-)
MsgBox Cells(y, 12).Address(0, 0)
MsgBox Cells(y, "L").Address(0, 0)
MsgBox Range("L" & y).Address(0, 0)
End Sub
Bonjour Staple1600
effectivement, bien que cela fonctionne pas très orthodoxe

VB:
Sheets("DATA").Cells(1, z).Copy Sheets("PRETCD").Cells(y, 12)
Cordialement
 

chacal33

XLDnaute Junior
Bonjour à tous les 2

Le code de dg62 fonctionne.
La variable x semblait donc finalement de trop.

Ceci étant dit, je ne comprends tout de même pas pourquoi mon 1er code ne fonctionnait pas. Je le trouvais bien écrit.... Enfin, c'est la vie!

Merci
 
Haut Bas