Excel VBA Copier Coller uniquement les Valeurs de(xlPasteValues)

j'essaie de copier la colonne entière de sheetA en feuille B. La Colonne de sheetA a des valeurs formées avec des formuls. Je ne copie les valeurs de la colonne SheetA qu'en utilisant xlPasteValues. Mais ce n'est pas coller les valeurs à une autre feuille. La colonne de sheetB est vide. Mon Code VBA

    Public Sub CopyrangeA()

    Dim firstrowDB As Long, lastrow As Long
    Dim arr1, arr2, i As Integer

    firstrowDB = 1
    arr1 = Array("BJ", "BK")
    arr2 = Array("A", "B")

         For i = LBound(arr1) To UBound(arr1)
        With Sheets("SheetA")
           lastrow = Application.Max(3, .Cells(.Rows.Count, arr1(i)).End(xlUp).Row)
           .Range(.Cells(1, arr1(i)), .Cells(lastrow, arr1(i))).Copy
           Sheets("SheetB").Range(arr2(i) & firstrowDB).PasteSpecial xlPasteValues
        End With
    Next
    Application.CutCopyMode = False

End Sub
23
demandé sur sam 2014-05-29 19:41:33

7 réponses

si vous voulez simplement copier la colonne entière, vous pouvez simplifier le code beaucoup en faisant quelque chose comme ceci:

Sub CopyCol()

    Sheets("Sheet1").Columns(1).Copy

    Sheets("Sheet2").Columns(2).PasteSpecial xlPasteValues

End Sub

Ou

Sub CopyCol()

    Sheets("Sheet1").Columns("A").Copy

    Sheets("Sheet2").Columns("B").PasteSpecial xlPasteValues

End Sub

Ou si vous voulez garder la boucle

Public Sub CopyrangeA()

    Dim firstrowDB As Long, lastrow As Long
    Dim arr1, arr2, i As Integer

    firstrowDB = 1
    arr1 = Array("BJ", "BK")
    arr2 = Array("A", "B")

    For i = LBound(arr1) To UBound(arr1)

        Sheets("Sheet1").Columns(arr1(i)).Copy

        Sheets("Sheet2").Columns(arr2(i)).PasteSpecial xlPasteValues

    Next
    Application.CutCopyMode = False

End Sub
30
répondu OSUZorba 2014-05-29 16:01:52

j'irais sans copier/coller

      Sheets("SheetB").Range(arr2(i) & firstrowDB).Resize(lastrow, 1).Value = .Range(.Cells(1, arr1(i)), .Cells(lastrow, arr1(i))).Value
8
répondu robotik 2015-01-22 23:08:59

Personnellement, je voudrais raccourcir un peu trop si vous avez besoin d'colonnes:

For i = LBound(arr1) To UBound(arr1)
    Sheets("SheetA").Columns(arr1(i)).Copy
    Sheets("SheetB").Columns(arr2(i)).PasteSpecial xlPasteValues
    Application.CutCopyMode = False
Next

a partir de cet extrait de code, il n'y a pas beaucoup de point dans lastrow ou firstrowDB

2
répondu bmgh1985 2014-05-29 16:02:13

Vous pouvez utiliser ce trop

Sub CopyPaste()
Sheet1.Range("A:A").Copy

Sheet2.Activate
col = 1
Do Until Sheet2.Cells(1, col) = ""
    col = col + 1
Loop

Sheet2.Cells(1, col).PasteSpecial xlPasteValues
End Sub
1
répondu nishit dey 2017-07-21 07:13:28

j'ai eu ce problème avant aussi et je pense que j'ai trouvé la réponse.

si vous utilisez un bouton pour exécuter la macro, il est probablement lié à une macro différente, peut-être une sauvegarde en version de ce dans quoi vous travaillez actuellement et vous pourriez même ne pas le réaliser. Essayez d'exécuter la macro directement à partir de VBA (F5) au lieu de l'exécuter avec le bouton. J'imagine que ça va fonctionner. Vous avez juste à réassigner la macro sur le bouton à celui que vous voulez réellement exécuter.

1
répondu Blake Turner 2018-07-30 23:22:53

vous pouvez utiliser ceci:

Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
0
répondu akallali 2016-02-19 05:11:57

sélection=sélection.les valeurs de

Cela fait les choses à une manière très rapide.

-1
répondu HARSHUL 2018-01-04 05:10:16