XL 2019 [VBA] Simplifier Copy Paste

Anthonymctm

XLDnaute Occasionnel
Bonjoru le forum,

J'ai la facheuse habitude de faire mes copier coller en vba en passant par la selection.
J'ai cru comprendre que ça pouvait grandement ralentir le code. Sauf que j'ai du mal à faire des copier coller sur une seul ligne.
Notament quand c'est des colalge spéciaux.

Voici un de mes codes en question
VB:
    Range("A19").Select
    ActiveSheet.Paste
    Range("AA22:AL22").Select 'permet de remettre en forme les cellule et d'enlever les fusions
    Application.CutCopyMode = False
    Selection.Copy
    Range("A29:L115").Select
    Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _
        SkipBlanks:=False, Transpose:=False
    Application.CutCopyMode = False
    Range("A27:L27").Copy ' copie colle les données de l'onglet recap général
    Range("A29:L115").Select
    Selection.PasteSpecial Paste:=xlPasteFormulas, Operation:=xlNone, _
        SkipBlanks:=False, Transpose:=False
    Application.CutCopyMode = False
    Selection.Copy 'copie colle le tout pour le mettre en tant que valeur, pour pouvoir le modifier au dernier moment
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
 

_Thierry

XLDnaute Barbatruc
Repose en paix
Bonjour @Anthonymctm , le Forum

Le mieux pour éviter des select est de définir proprement les Variables et faire les Set d'Objets en début de la procédure comme suit :

VB:
Option Explicit

Sub CopyPasteValueOnly()
Dim WSsource As Worksheet, WScible As Worksheet
Dim RangeSource As Range
Dim RangeCible As Range

Set WSsource = ThisWorkbook.Worksheets("Sheet1")
Set WScible = ThisWorkbook.Worksheets("Sheet2")

Set RangeSource = WSsource.Range("A1:A" & WSsource.Range("A500").End(xlUp).Row)
Set RangeCible = WScible.Range("D8")


RangeSource.Copy
RangeCible.PasteSpecial Paste:=xlPasteValues

Application.CutCopyMode = False

End Sub

Ensuite dans la même sub tu pourras toujours faire appel aux WSsource et WScible et les range aussi pour autant de copiés/collés que tu veux...

Bien à toi, à vous
@+Thierry
 

patricktoulon

XLDnaute Barbatruc
bonsoir
@_Thierry
VB:
RangeSource.Copy
RangeCible.PasteSpecial Paste:=xlPasteValues

a quoi ca sert de copier et paster pour du xlvalue

Set RangeSource = WSsource.Range("A1:A" & WSsource.Range("A500").End(xlUp).Row)
Set RangeCible = WScible.Range("D8").resize(RangeSource.rows.count)
RangeCible.value=RangeSource .value ' c'est tout
 

Discussions similaires

Réponses
2
Affichages
80
Réponses
5
Affichages
54
Réponses
3
Affichages
550