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
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
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
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
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
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.
vous pouvez utiliser ceci:
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
sélection=sélection.les valeurs de
Cela fait les choses à une manière très rapide.