Voir le flux RSS

Philippe Tulliez

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

Note : 2 votes pour une moyenne de 3,00.
par , 18/07/2017 à 12h28 (918 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 à 13h52 par Philippe Tulliez

Catégories
VBA Excel

Commentaires

  1. Avatar de MarcelG
    • |
    • permalink
    Salut Philippe,

    C'est utile en effet de rappeler l'importance du rattachement des objets.
    Je m'attache à le faire bien souvent sur le Forum.

    Autre point: la précision des paramètres.
    Même s'ils sont tacites, il est utile, surtout pour les débutants, de s'affecter cette obligation.
    Pour le cas présent, Autre exemple, pour l'instruction MsgBox , préciser Prompt:=.
    On sait ainsi de quoi on parle.

    Au plaisir.
    (Je viens de consulter ton blog sur Magic Office)

    Marcel
  2. Avatar de Philippe Tulliez
    • |
    • permalink
    Bonjour Marcel,
    Merci pour ton commentaire.
    Tu as raison, je devrais plus souvent nommer les arguments
    Philippe
    Citation Envoyé par MarcelG
    Salut Philippe,

    C'est utile en effet de rappeler l'importance du rattachement des objets.
    Je m'attache à le faire bien souvent sur le Forum.

    Autre point: la précision des paramètres.
    Même s'ils sont tacites, il est utile, surtout pour les débutants, de s'affecter cette obligation.
    Pour le cas présent, Autre exemple, pour l'instruction MsgBox , préciser Prompt:=.
    On sait ainsi de quoi on parle.

    Au plaisir.
    (Je viens de consulter ton blog sur Magic Office)

    Marcel