2017-10-20 23 views
0

J'essaie de copier une plage de cellules d'un fichier de données (sh1 en tant que Worksheet) à un autre (sho as Worksheet). Les cellules doivent être collées sous les données existantes. Depuis le nombre de cellules à copier et la quantité de données existantes varie. J'ai créé ce code:VBA Excel Copier les valeurs au lieu de la fonction sans .PasteSpecial

Dim sh1 As Worksheet, sho As Worksheet, lr As Long, rng1 As Range 
    lr = sh1.Cells(Rows.Count, 1).End(xlUp).Row 
    Set rng1 = sh1.Range("A3:B" & lr) 
    rng1.Copy sho.Cells(Rows.Count, 1).End(xlUp)(2) 

Cela fonctionne parfaitement bien - mais il copie les fonctions dans la feuille SH1 à la sho de la feuille de travail et non pas les valeurs. Je sais que le code pour ceci est ".PasteSpecial" mais je ne suis pas capable de le faire correspondre dans mon code, sans détruire les autres prérequis.

Répondre

0

Si vous avez Sheet1 et Sheet2 s'il vous plaît essayez ci-dessous:

Option Explicit 


Sub test() 

    Dim sh1 As Worksheet, sho As Worksheet, lr As Long, rng1 As Range 

    Set sh1 = Sheet1 
    Set sho = Sheet2 

    lr = sh1.Cells(Rows.Count, 1).End(xlUp).Row 
    Set rng1 = sh1.Range("A3:B" & lr) 
    rng1.Copy 
    sho.Cells(Rows.Count, 1).End(xlUp)(2).PasteSpecial xlPasteValues 



End Sub 
+0

Wow, merci! Ce code fonctionne parfaitement et semble élégant :-) Merci beaucoup de m'avoir sauvé! – Annegret

+0

vous êtes les bienvenus !! :) –

0

Au lieu de:

rng1.Copy sho.Cells(Rows.Count, 1).End(xlUp)(2) 

affecter les valeurs directement. Il évite le clipbaord et il est donc plus rapide:

sho.Cells(sho.Rows.Count, 1).End(xlUp).Offset(2).Resize(rng1.rows,rng1.columns).Value = rng1.Value 
+0

Nous vous remercions de votre réponse rapide! Malheureusement, cette ligne de code ne fonctionne pas pour moi. Je suis envoyé au débogueur Menue lors de son démarrage, mais ne trouve pas l'erreur, car il semble bien de mon point de vue (naïf) ... – Annegret

0

Vous pouvez utiliser ce code pour copier la valeur de A1 à B1 (si A1 est une formule)

Range("B1").Formula = Range("A1")