XL 2010 Copier / Coller d'une feuille à l'autre en VBA...

Yvan1

XLDnaute Occasionnel
Bonjour,

La formule VBA suivante colle une sélection de la page "Coll N" sur la page "Anc Coll" :

b = 0

For i = 2 To 10
Sheets("Coll N").Range(Cells(i, 1), Cells(i, 19)).Select
Selection.Copy
b = b + 1
With Worksheets("Anc Coll")
.Cells(b, 1).Select
.Selection.Paste
End With
Next i

En théorie, car la ligne .Cells(b, 1).Select plante !!!

Est-ce que quelqu'un a une idée ?

Merci d'avance,

Yvan
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonjour Yvan,
Je pense que vous avez un problème de feuille active pour la sélection.
Mais il y a plus simple, vous pouvez essayer :
VB:
Sub Essai()
    Sheets("Coll N").Range(Cells(2, 1), Cells(10, 19)).Copy _
    Destination:=Sheets("Anc Coll").Cells(1, 1).End(xlUp).Offset(0, 0)
End Sub
Ce qui fait la même chose, et vous évitez les Select.
 

_Thierry

XLDnaute Barbatruc
Repose en paix
Bonjour @Yvan1 , @sylvanu , le Forum

Deux autres méthodes en plus de celle de Sylvanu, la première en essayant de respecter cette "gymnastique tordue, pire que du yoga" que tu as postée... ;)

Et sinon oui ca plantait à cause des Select sans être dans la feuille active !

VB:
Option Explicit

Sub Test_Ivan_1()
Dim WSsource As Worksheet, WScible As Worksheet
Dim RngSource As Range
Dim b As Integer, i As Integer

Set WSsource = ThisWorkbook.Worksheets("Coll N")
Set WScible = ThisWorkbook.Worksheets("Anc Coll")

For i = 2 To 10
        Set RngSource = WSsource.Range(WSsource.Cells(i, 1), WSsource.Cells(i, 19))
        b = b + 1
        RngSource.Copy WScible.Cells(b, 1)
Next i

Application.CutCopyMode = False

End Sub

'=============================================================

Sub Test_Ivan_2()
Dim WSsource As Worksheet, WScible As Worksheet
Dim RngSource As Range

Set WSsource = ThisWorkbook.Worksheets("Coll N")
Set WScible = ThisWorkbook.Worksheets("Anc Coll")

Set RngSource = WSsource.Range("S2:S" & WSsource.Range("S1000").End(xlUp).Row) 'Ajuste dynamiquement le nombre de lignes

WScible.Range("A1").Resize(RngSource.Rows.Count, 1).Value = RngSource.Value

End Sub

La seconde est la plus "académique" et rapide et ne copie que la Valeur (Pas les Formules ou les mises en forme)

Bonne soirée
@+Thierry
 

Discussions similaires

Réponses
6
Affichages
227
Réponses
7
Affichages
419

Membres actuellement en ligne

Statistiques des forums

Discussions
312 084
Messages
2 085 192
Membres
102 809
dernier inscrit
Sandrine83