Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

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
248
Réponses
7
Affichages
434
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…