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
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 !
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" <kamel@bogoss.com> a écrit dans le message de
news:eFWq47CNFHA.2704@TK2MSFTNGP15.phx.gbl...
Merci Clément,
Ta procédure ne devient elle pas lourde quand les zones à copier
sont très
grands ?
"Clément Marcotte" <clement.marcotte@sympatico.ca> a écrit dans le
message
de news: OO9smaxMFHA.2736@TK2MSFTNGP09.phx.gbl...
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" <kamel@bogoss.com> a écrit dans le message de
news:eEjw9AxMFHA.3512@TK2MSFTNGP15.phx.gbl...
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" <pensez@liege.be> a écrit dans le message de news:
eISU38wMFHA.3960@TK2MSFTNGP12.phx.gbl...
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" <kamel@bogoss.com> a écrit dans le message de
news:Onx8J1wMFHA.1948@TK2MSFTNGP14.phx.gbl...
message: La méthode select de la classe Range a échoué.
au niveau: ws2.Range("B4").Select
"jps" <pensez@liege.be> a écrit dans le message de news:
uI2CSwwMFHA.3788@tk2msftngp13.phx.gbl...
et quand ça ne fonctionne pas, kamel, tu as quoi en un joli
jaune
flashy
dans VBE?
jps
"Kamel" <kamel@bogoss.com> a écrit dans le message de
news:OCMzfnwMFHA.3788@tk2msftngp13.phx.gbl...
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
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 !
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
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
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
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
C'est bien ce que je pensais merci pour ce test tres instructif ;)
"Clément Marcotte" <clement.marcotte@sympatico.ca> a écrit dans le message
de news: eZYtYDJNFHA.1396@TK2MSFTNGP10.phx.gbl...
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
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