web-dev-qa-db-fra.com

Copier et coller une plage dans la rangée vide suivante

Cela devrait être simple, mais je vis un moment difficile. Je veux copier les cellules A3 à E3 et les coller dans la ligne suivante de la feuille de calcul. J'ai utilisé ce code auparavant dans de plus longues chaînes de code .. mais je devais le modifier et il ne fonctionne pas cette fois. Je reçois une "erreur définie par l'application ou par l'objet" lorsque j'exécute le code présenté ci-dessous. Toute aide est appréciée.

Private Sub CommandButton1_Click()
Dim lastrow As Long

lastrow = Range("A65536").End(xlUp).row
   Range("A3:E3").Copy Destination:=Sheets("Summary Info").Range("A:A" & lastrow)
End Sub
5
Mike

Faites attention avec "Range (...)" sans d'abord qualifier une feuille de calcul, car elle utilisera la feuille de calcul actuellement active pour en faire la copie. Il est préférable de qualifier pleinement les deux feuilles. S'il vous plaît donner à cela une chance (s'il vous plaît changer "Sheet1" avec la feuille de calcul):

EDIT: édité pour coller des valeurs uniquement en fonction des commentaires ci-dessous.

Private Sub CommandButton1_Click()
  Application.ScreenUpdating = False
  Dim copySheet As Worksheet
  Dim pasteSheet As Worksheet

  Set copySheet = Worksheets("Sheet1")
  Set pasteSheet = Worksheets("Sheet2")

  copySheet.Range("A3:E3").Copy
  pasteSheet.Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).PasteSpecial xlPasteValues
  Application.CutCopyMode = False
  Application.ScreenUpdating = True
End Sub
10
Joseph

La raison pour laquelle le code ne fonctionne pas, c'est parce que lastrow est mesuré à partir de la feuille active, et que "A: A500" (ou un autre numéro) n'est pas une référence de plage valide.

Private Sub CommandButton1_Click()
    Dim lastrow As Long

    lastrow = Sheets("Summary Info").Range("A65536").End(xlUp).Row    ' or + 1
    Range("A3:E3").Copy Destination:=Sheets("Summary Info").Range("A" & lastrow)
End Sub
5
Andy G

Ci-dessous, le code qui fonctionne bien, mais mes valeurs se chevauchent dans la feuille "Final" à chaque fois que la condition de <=11 se rencontre dans la feuille "Calculatrice"

Je voudrais que vous me aidiez à modifier le code pour que le curseur passe à la cellule vide suivante et que les valeurs s’ajoutent comme une liste.

Dim i As Integer
Dim ws1 As Worksheet: Set ws1 = ThisWorkbook.Sheets("Calculator")
Dim ws2 As Worksheet: Set ws2 = ThisWorkbook.Sheets("Final")

For i = 2 To ws1.Range("A65536").End(xlUp).Row

    If ws1.Cells(i, 4) <= 11 Then

        ws2.Cells(i, 1).Value = Left(Worksheets("Calculator").Cells(i, 1).Value, Len(Worksheets("Calculator").Cells(i, 1).Value) - 0)
        ws2.Cells(i, 2) = Application.VLookup(Cells(i, 1), Worksheets("Calculator").Columns("A:D"), 4, False)
        ws2.Cells(i, 3) = Application.VLookup(Cells(i, 1), Worksheets("Calculator").Columns("A:E"), 5, False)
        ws2.Cells(i, 4) = Application.VLookup(Cells(i, 1), Worksheets("Calculator").Columns("A:B"), 2, False)
        ws2.Cells(i, 5) = Application.VLookup(Cells(i, 1), Worksheets("Calculator").Columns("A:C"), 3, False)

    End If
Next i
2
Zahid

Vous pouvez aussi essayer ceci

Private Sub CommandButton1_Click()

Sheets("Sheet1").Range("A3:E3").Copy

Dim lastrow As Long
lastrow = Range("A65536").End(xlUp).Row

Sheets("Summary Info").Activate
Cells(lastrow + 1, 1).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False

End Sub
2
Charles-Emeric