web-dev-qa-db-fra.com

VBA copie les lignes qui répondent aux critères dans une autre feuille

Je suis nouveau sur VBA ... Je souhaite copier une ligne de Sheet2 vers Sheet1 si la première cellule de cette ligne indique X, puis le faire pour toutes les lignes qui répondent à ce critère. J'ai une erreur dans la condition If ... Je ne sais pas comment y remédier.

Sub LastRowInOneColumn()
'Find the last used row in a Column: column A in this example
    Worksheets("Sheet2").Activate
    Dim LastRow As Long
    With ActiveSheet
        LastRow = .Cells(.Rows.Count, "A").End(xlUp).Row
    End With
    MsgBox (LastRow)
    For i = 1 To LastRow
    If Worksheet.Cells(i, 1).Value = "X" Then
    ActiveSheet.Row.Value.Copy _
    Destination:=Hoja1
    End If
    Next i
 End Sub
6
Anca

Vous devez spécifier workseet. Changer de ligne

If Worksheet.Cells(i, 1).Value = "X" Then

à

If Worksheets("Sheet2").Cells(i, 1).Value = "X" Then

UPD:

Essayez d'utiliser le code suivant (mais ce n'est pas la meilleure approche. Comme l'a suggéré @SiddharthRout, pensez à utiliser Autofilter ):

Sub LastRowInOneColumn()
   Dim LastRow As Long
   Dim i As Long, j As Long

   'Find the last used row in a Column: column A in this example
   With Worksheets("Sheet2")
      LastRow = .Cells(.Rows.Count, "A").End(xlUp).Row
   End With

   MsgBox (LastRow)
   'first row number where you need to paste values in Sheet1'
   With Worksheets("Sheet1")
      j = .Cells(.Rows.Count, "A").End(xlUp).Row + 1
   End With 

   For i = 1 To LastRow
       With Worksheets("Sheet2")
           If .Cells(i, 1).Value = "X" Then
               .Rows(i).Copy Destination:=Worksheets("Sheet1").Range("A" & j)
               j = j + 1
           End If
       End With
   Next i
End Sub
10
Dmitry Pavliv

Après avoir formaté la réponse précédente à mon propre code, j'ai trouvé un moyen efficace de copier toutes les données nécessaires si vous essayez de coller les valeurs renvoyées via AutoFilter sur une feuille séparée.

With .Range("A1:A" & LastRow)
    .Autofilter Field:=1, Criteria1:="=*" & strSearch & "*"
    .Offset(1,0).SpecialCells(xlCellTypeVisible).Cells.Copy
    Sheets("Sheet2").activate
    DestinationRange.PasteSpecial
End With

Dans ce bloc, AutoFilter recherche toutes les lignes qui contiennent la valeur de strSearch et filtre toutes les autres valeurs. Il copie ensuite les cellules (en utilisant l'offset en cas d'en-tête), ouvre la feuille de destination et colle les valeurs dans la plage spécifiée sur la feuille de destination.

0
Munkeeface