web-dev-qa-db-fra.com

Copier les valeurs de collage VBA Excel uniquement (xlPasteValues)

J'essaie de copier la colonne entière de la feuille A dans la feuille B. La feuille d'une colonne a des valeurs formées avec des formules. Je copie des valeurs de colonne SheetA uniquement à l'aide de xlPasteValues ​​. Mais ce n'est pas coller les valeurs dans une autre feuilleB. La colonne de la feuille B 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
26
sam

Si vous souhaitez simplement copier la colonne entière, vous pouvez beaucoup simplifier le code en procédant comme suit:

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
36
OSUZorba

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
robotik

Personnellement, je raccourcirais un peu aussi si tout ce dont vous avez besoin sont les 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

à partir de cet extrait de code, il n'y a pas beaucoup d'intérêt dans lastrow ou firstrowDB

2
bmgh1985

J'ai déjà eu ce problème aussi et je pense avoir trouvé la réponse.

Si vous utilisez un bouton pour exécuter la macro, il est probablement lié à une autre macro, peut-être une version de sauvegarde de ce sur quoi vous travaillez actuellement et vous pourriez même ne pas vous en rendre compte. Essayez d’exécuter la macro directement à partir de VBA (F5) au lieu de l’exécuter avec le bouton. Je suppose que cela fonctionnera. Il vous suffit de réaffecter la macro du bouton à celle que vous souhaitez réellement exécuter.

1
Blake Turner

Vous pouvez aussi utiliser ceci

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
nishit dey

vous pouvez utiliser ceci:

Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
0
akallali