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
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
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 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
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.
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
vous pouvez utiliser ceci:
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False