6 votes

Copier et coller une plage définie dans la ligne vide suivante

Cela devrait être simple mais j'ai du mal à le faire Je veux copier les cellules A3 à E3, et les coller dans la prochaine ligne vide d'une autre feuille de calcul. J'ai déjà utilisé ce code dans des chaînes de code plus longues, mais j'ai dû le modifier et il ne fonctionne pas cette fois-ci. J'obtiens une "erreur définie par l'application ou par l'objet" lorsque j'exécute le code ci-dessous. Toute aide est la bienvenue.

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

14voto

joseph4tw Points 2371

Faites attention à l'utilisation de "Range(...)" sans qualifier au préalable une feuille de calcul, car il utilisera la feuille de calcul actuellement active pour effectuer la copie. Il est préférable de qualifier complètement les deux feuilles. Faites un essai (remplacez "Sheet1" par la feuille de travail à copier) :

EDIT : édité pour coller uniquement les valeurs basées sur les 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

6voto

Andy G Points 11241

La raison pour laquelle le code ne fonctionne pas est que la dernière ligne est mesurée à partir de la feuille actuellement active, et que "A:A500" (ou un autre nombre) 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

3voto

Charles Points 58

Vous pouvez également 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

3voto

Zahid Points 31

Le code ci-dessous fonctionne bien mais mes valeurs se chevauchent dans la feuille "Final" chaque fois que la condition de <=11 rencontre dans la feuille "Calculatrice

J'aimerais que vous m'aidiez à modifier le code afin que le curseur se déplace vers la prochaine cellule vide et que les valeurs continuent à s'additionner 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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X