OVH Cloud OVH Cloud

copy paste ...

13 réponses
Avatar
Kamel
Bonsoir,

Il y a une question que je me pose depuis un moment sur le copier coller en
vba. Ce code fonctionne:
Worksheets("Feuil1").Select
Range("A1:C3").Select
Selection.Copy
Worksheets("Feuil2").Select
Range("B4").Select
ActiveSheet.Paste

Ou est l'erreur dans celui-ci ? (des fois il fonctionne des fois non ????? )
dim ws1, ws2 as worksheet
set ws1=worksheets("Feuil1")
set ws2=worksheets("Feuil2")
ws1.Range("A1:C3").Copy
ws2.Range("B4").Select
ws2.Paste

Merci !

3 réponses

1 2
Avatar
Clément Marcotte
Bonjour,

Je suis porté à croire que cela reste quand même "moins pire" que des
copier-coller. Le copier-coller demande le passage par le
presse-papier et d'utiliser soit DDE, soit OLE, je ne sais plus trop.
Cette opération demande beaucoup de ressources. AMHA, la copie de
feuille à feuille ne demande que quelques modifications d'adresses en
mémoire.


"Kamel" a écrit dans le message de
news:
Merci Clément,
Ta procédure ne devient elle pas lourde quand les zones à copier
sont très

grands ?

"Clément Marcotte" a écrit dans le
message

de news:
Bonjour,

Si j'ai bien compris ta passe, tu n'as même pas besoin de
copier-coller.


Sub DeUnADeux()
k = 1
For i = 4 To 7
For j = 2 To 5
Sheets("Feuil2").Cells(i, j).Value = Sheets("Feuil1").Cells(i - 3,
k).Value
k = k + 1
Next
k = 1
Next
End Sub



"Kamel" a écrit dans le message de
news:
En fait, en faisant ws2.Range("B4").Select, je cherche à
selectionner une

cellule d'une feuille non active.
Mais est-on obligé de sélctionner une feuille pour y coller des
valeurs ??

Kamel

"jps" a écrit dans le message de news:

de toutes façons, kamel, si tu as un code qui va bien,
utilise-le




car tu
sais que le mieux est l'ennemi du bien...
jps

"Kamel" a écrit dans le message de
news:
message: La méthode select de la classe Range a échoué.


au niveau: ws2.Range("B4").Select

"jps" a écrit dans le message de news:

et quand ça ne fonctionne pas, kamel, tu as quoi en un joli
jaune




flashy
dans VBE?
jps

"Kamel" a écrit dans le message de
news:
Bonsoir,

Il y a une question que je me pose depuis un moment sur le
copier





coller
en
vba. Ce code fonctionne:
Worksheets("Feuil1").Select
Range("A1:C3").Select
Selection.Copy
Worksheets("Feuil2").Select
Range("B4").Select
ActiveSheet.Paste

Ou est l'erreur dans celui-ci ? (des fois il fonctionne des
fois non





????? )
dim ws1, ws2 as worksheet
set ws1=worksheets("Feuil1")
set ws2=worksheets("Feuil2")
ws1.Range("A1:C3").Copy
ws2.Range("B4").Select
ws2.Paste

Merci !

























Avatar
Clément Marcotte
Ouais ! J'ai testé sur une plage 500 lignes et une douzaines de
colonnes. Le copier-coller est pas mal plus vite. Honte à moi. Morale
de l'histoire : Tester avant de dire n'importe quoi.


Balayer la plage:

Sub TestDeUnADeux1()
Dim i As Integer, j As Integer
With Sheets("Feuil1")
Cells(502, 1).Value = "Heure début : "
Cells(503, 1).Value = "Heure fin : "
Cells(504, 1).Value = "Temps total : "
Cells(502, 2).Value = Time
Cells(502, 3).Value = Timer
End With
For i = 1 To 500
For j = 1 To 12
Sheets("Feuil1").Cells(i, j).Value = Sheets("Données").Cells(i,
j).Value
Next
Next
Sheets("Feuil1").Cells(503, 2).Value = Time
Sheets("Feuil1").Cells(503, 3).Value = Timer
Sheets("Feuil1").Cells(504, 3).Value = (Cells(503, 3).Value -
Cells(502, 3).Value)
End Sub

Heure début : 1:30:09 PM 48609.10938
Heure fin : 1:30:22 PM 48622.35156
Temps total : 13.2421875 secondes

Copier-Coller:

Sub TestDeUnADeux2()
Dim i As Integer, j As Integer
With Sheets("Feuil2")
Cells(502, 1).Value = "Heure début : "
Cells(503, 1).Value = "Heure fin : "
Cells(504, 1).Value = "Temps total : "
Cells(502, 2).Value = Time
Cells(502, 3).Value = Timer
End With
Sheets("Données").Range("a1:l500").Copy
Sheets("Feuil2").Select
Range("a1").Select
ActiveSheet.Paste Destination:=Worksheets("Feuil2").Range("a1:l500")
Sheets("Feuil2").Cells(503, 2).Value = Time
Sheets("Feuil2").Cells(503, 3).Value = Timer
Sheets("Feuil2").Cells(504, 3).Value = (Cells(503, 3).Value -
Cells(502, 3).Value)
End Sub

Heure début : 1:46:14 PM 49574.26172
Heure fin : 1:46:14 PM 49574.32031
Temps total : 0.05859375
Avatar
Kamel
C'est bien ce que je pensais merci pour ce test tres instructif ;)

"Clément Marcotte" a écrit dans le message
de news:
Ouais ! J'ai testé sur une plage 500 lignes et une douzaines de
colonnes. Le copier-coller est pas mal plus vite. Honte à moi. Morale
de l'histoire : Tester avant de dire n'importe quoi.


Balayer la plage:

Sub TestDeUnADeux1()
Dim i As Integer, j As Integer
With Sheets("Feuil1")
Cells(502, 1).Value = "Heure début : "
Cells(503, 1).Value = "Heure fin : "
Cells(504, 1).Value = "Temps total : "
Cells(502, 2).Value = Time
Cells(502, 3).Value = Timer
End With
For i = 1 To 500
For j = 1 To 12
Sheets("Feuil1").Cells(i, j).Value = Sheets("Données").Cells(i,
j).Value
Next
Next
Sheets("Feuil1").Cells(503, 2).Value = Time
Sheets("Feuil1").Cells(503, 3).Value = Timer
Sheets("Feuil1").Cells(504, 3).Value = (Cells(503, 3).Value -
Cells(502, 3).Value)
End Sub

Heure début : 1:30:09 PM 48609.10938
Heure fin : 1:30:22 PM 48622.35156
Temps total : 13.2421875 secondes

Copier-Coller:

Sub TestDeUnADeux2()
Dim i As Integer, j As Integer
With Sheets("Feuil2")
Cells(502, 1).Value = "Heure début : "
Cells(503, 1).Value = "Heure fin : "
Cells(504, 1).Value = "Temps total : "
Cells(502, 2).Value = Time
Cells(502, 3).Value = Timer
End With
Sheets("Données").Range("a1:l500").Copy
Sheets("Feuil2").Select
Range("a1").Select
ActiveSheet.Paste Destination:=Worksheets("Feuil2").Range("a1:l500")
Sheets("Feuil2").Cells(503, 2).Value = Time
Sheets("Feuil2").Cells(503, 3).Value = Timer
Sheets("Feuil2").Cells(504, 3).Value = (Cells(503, 3).Value -
Cells(502, 3).Value)
End Sub

Heure début : 1:46:14 PM 49574.26172
Heure fin : 1:46:14 PM 49574.32031
Temps total : 0.05859375




1 2