Petite question VBA sur Copier-Coller

Bonjour le Forum !

Tout d'abord tous mes voeux à tous, que 2017 vous apporte le meilleur

J'ai une toute petite question VBA pour commencer l'année ^^

Voici mon bout de code, qui copie une plage de ma feuille A pour la coller sur ma feuille B :

MaFeuilleA.Range(Cells(b, 37), Cells(b, 120)).Copy MaFeuilleB.Cells(a, 3)

Il marche super bien.

Ce que j'aimerai c'est ajouter la notion de "coller valeur"; soit dans ce code si c'est possible, soit dans un autre code mais mon but c'est de conserver un code aussi court que ça.

Je sais que la version longue de ce code c'est

MaFeuilleA.Range(Cells(b, 37), Cells(b, 120)).Copy destination:=MaFeuilleB.Cells(a, 3)

Du coup je me dis que peut-être il y a d'autres attributs que "destination", liés au collage spécial ?

Si jamais quelqu'un a une idée, merci d'avance !

Bonjour,

il y a bien une manière mais je sais la mettre en oeuvre en utilisant 2 lignes de code, comme suit :

MaFeuilleA.Range(Cells(b, 37), Cells(b, 120)).Copy
MaFeuilleB.Cells(a, 3).PasteSpecial xlPasteValues

A toi de voir !

a plus !

Bonjour,

Dès lors qu'il s'agit d'affecter des valeurs, tu peux te dispenser de copier :

MaFeuilleB.Cells(a, 3).Resize(, 84).Value = MaFeuilleA.Cells(b, 37).Resize(, 84).Value

Ton code :

MaFeuilleA.Range(Cells(b, 37), Cells(b, 120)).Copy destination:=MaFeuilleB.Cells(a, 3)

n'est pas ce qu'on pourrait appeler la "version longue".

La version longue serait plutôt :

MaFeuilleA.Range(Cells(b, 37), Cells(b, 120)).Copy 
MaFeuilleB.Paste destination:=MaFeuilleB.Cells(a, 3)

Soit, ce que fournit l'enregistreur avec des Select et Selection en plus...

La différence avec ta version initiale réside seulement dans le passage d'arguments de la méthode. Il y a deux façons de les passer :

-par position, méthode que je qualifierais de normale, où les arguments sont listés dans l'ordre où ils sont définis par la procédure, sans en sauter et en laissant vide les paramètres inutilisés.

Exemple :

MsgBox "Message", ,"Titre"

-ou par nom, méthode utilisée systématiquement par l'enregistreur, qui permet éventuellement de les passer dans le désordre et d'ignorer les paramètres non utilisés.

Exemple :

Worksheets.Add after:=Worksheets(1)

Je considère que la première est préférable, plus rapide, dans le cas général, mais la seconde a un intérêt lorsqu'il y a beaucoup d'aguments, surtout quand on n'en utilise que quelques-uns non situés au début, ou bien comme dans le dernier exemple où la présence du nom d'argument : after ou before renseigne plus vite sur la position qu'on a donné à la feuille que chercher s'il y a une virgule devant...

Mais on peut mixer les deux méthodes :

ActiveSheet.Protect "MotPass", True, True, True, True, AllowFiltering:=True

Là les 5 premiers sont dans l'ordre, le dernier est nommé (entre le 5e et celui-ci, il y en a une floppée et égrener le nombre de virgules nécessaires comporte un risque d'erreur...

Cordialement.

Re !

Merci beaucoup messieurs pour vos réponses !

Braters merci pour ta solution, elle est tout à fait valable ! Mais, pour utiliser souvent cette méthode, il faut souvent ajouter une ligne supplémentaire de "Application.CutCopyMode" pour éviter les messages d'enregistrement du presse-papier. c'est pour ça que je n'utilise délibérément pas cette méthode ici car ma procédure est assez lourde et je ne veut pas ajouter trop de lignes.

MFerrand merci beaucoup pour tes explications, quand je parle de "version longue", en effet ^^ je n'ai pas appris le VBA de façon académique du coup ce que je dis dans mes explications l'est rarement (académique )

J'ai testé ta ligne de code et elle fonctionne ! Merci donc pour cette solution et pour les explications sur les arguments !

Rechercher des sujets similaires à "petite question vba copier coller"