par , 18/07/2017 à 11h28 (4516 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.
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
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
1 2 3
| Sub Macro1()
Range("A1:G7").Copy Destination:=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
1 2 3 4 5
| Sub Macro1()
With ThisWorkbook.Worksheets("Feuil1")
.Range("A1:E10").Copy Destination:=.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
Copie la plage A1:E10 de la feuille nommée Feuil1 vers la cellule J1 de la feuille nommée Feuil2
1 2 3 4 5
| Sub Macro1()
With ThisWorkbook
.Worksheets("Feuil1").Range("A1:E10").Copy Destination:=.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
La plage Source est la plage de cellule A1:E10 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
1 2 3 4 5
| Sub Macro1()
With ThisWorkbook
.Worksheets("Feuil1").Range("A1:E10").Copy Destination:=Workbooks("Ventes.xlsx").Worksheets("Export").Range("A1")
End With
End Sub |