Voir le flux RSS

Philippe Tulliez

VBA Excel - L'argument Destination de la méthode Copy

Noter ce billet
par , 18/07/2017 à 11h28 (750 Affichages)
Lorsque l'on veut effectuer un copier/coller d'une plage de cellules en VBA et que pour en connaître le code on utilise l'enregistreur de macros, voici le code que l'on reçoit pour la copie de la plage A1:G7 d'une feuille vers la cellule J1 de la même feuille.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
Sub Macro1()
'
' Macro1 Macro
'
 Range("A1:D10").Select
 Selection.Copy
 Range("J1").Select
 ActiveSheet.Paste
End Sub
La première chose à faire est de corriger ce code en supprimant la méthode Select et l'objet Selection. Ce qui donne
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
Sub Macro1()
 Range("A1:D10").Copy
 Range("J1").Select
 ActiveSheet.Paste
End Sub
La méthode Paste n'étant une méthode de l'objet Range nous ne pouvons pas faire abstraction du Select de la cellule J1.
Les méthodes Select comme l'objet Selection sont à proscrire. Comment faire pour s'en affranchir ?
C'est oublier qu'il existe un argument nommé Destination à la méthode Copy

Utilisons l'argument Destination de la méthode Copy
Ce qui donne
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
Sub Macro1()
 Range("A1:G7").Copy Range("J1")
End Sub
Rappel
Ce code fonctionne sur n'importe quelle feuille active ce qui peut s'avérer dangereux si ce n'est pas ce que l'on cherche, il y a donc lieu de préciser la feuille et le classeur.

Scénario 1 La feuille source et la feuille cible est la même et est dans le classeur où se trouve le code VBA
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
Sub Macro1()
 With ThisWorkbook.Worksheets("Feuil1")
  .Range("A1:D10").Copy .Range("J1")
 End With
End Sub
Scénario 2 La feuille source et la feuille cible sont différentes et sont dans le classeur où se trouve le code VBA
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
Sub Macro1()
 ' Copie la plage A1:D10 de la feuille nommée Feuil1 vers la cellule J1 de la feuille nommée Feuil2
 With ThisWorkbook
 .Worksheets("Feuil1").Range("A1:D10").Copy .Worksheets("Feuil2").Range("J1")
 End With
End Sub
Scénario 3 La feuille source et la feuille cible sont différentes et sont dans des classeurs différents (le classeur de la plage source est dans celui où se trouve le code VBA
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
Sub Macro1()
 ' La plage Source est A1:D10 de la feuille nommée Feuil1 vers la cellule A1 de la feuille nommée Export
 ' La cellule cible est A1 de la feuille nommée Export du classeur nommé Ventes.xlsx
 With ThisWorkbook
 .Worksheets("Feuil1").Range("A1:D10").Copy Workbooks("Ventes.xlsx").Worksheets("Export").Range("A1")
 End With
End Sub

Envoyer le billet « VBA Excel - L'argument Destination de la méthode Copy » dans le blog Viadeo Envoyer le billet « VBA Excel - L'argument Destination de la méthode Copy » dans le blog Twitter Envoyer le billet « VBA Excel - L'argument Destination de la méthode Copy » dans le blog Google Envoyer le billet « VBA Excel - L'argument Destination de la méthode Copy » dans le blog Facebook Envoyer le billet « VBA Excel - L'argument Destination de la méthode Copy » dans le blog Digg Envoyer le billet « VBA Excel - L'argument Destination de la méthode Copy » dans le blog Delicious Envoyer le billet « VBA Excel - L'argument Destination de la méthode Copy » dans le blog MySpace Envoyer le billet « VBA Excel - L'argument Destination de la méthode Copy » dans le blog Yahoo

Mis à jour 04/09/2017 à 12h52 par Philippe Tulliez

Catégories
VBA Excel

Commentaires