VBA : copier des lignes dans une autre feuille en fonction de critères
Vous pouvez utiliser la syntaxe suivante dans VBA pour copier chaque ligne d’une feuille qui répond à des critères spécifiques dans une autre feuille :
Sub CopyToAnotherSheet()
Dim LastRow As Long
'Find last used row in a Column A of Sheet1
With Worksheets("Sheet1")
LastRow = .Cells(.Rows.Count, "A").End(xlUp).Row
End With
'Find first row where values should be posted in Sheet2
With Worksheets("Sheet2")
j = .Cells(.Rows.Count, "A").End(xlUp).Row + 1
End With
'Paste each row that contains "Mavs" in column A of Sheet1 into Sheet2
For i = 1 To LastRow
With Worksheets("Sheet1")
If .Cells(i, 1).Value = "Mavs" Then
.Rows(i).Copy Destination:=Worksheets("Sheet2").Range("A" & j)
j = j + 1
End If
End With
Next i
End Sub
Cette macro particulière copiera chaque ligne de Sheet1 où la colonne A est égale à « Mavs » et collera chacune de ces lignes dans les prochaines lignes disponibles de Sheet2 .
L’exemple suivant montre comment utiliser cette syntaxe dans la pratique.
Exemple : copier des lignes vers une autre feuille en fonction de critères à l’aide de VBA
Supposons que nous ayons l’ensemble de données suivant dans la feuille 1 qui contient des informations sur divers joueurs de basket-ball :
Et supposons que nous ayons l’ensemble de données suivant dans Sheet2 :
Notez que Sheet2 contient uniquement des données sur les joueurs de l’équipe Warriors.
Supposons que nous souhaitions copier chaque ligne de Sheet1 où la colonne Team est égale à Mavs et coller chacune de ces lignes dans les prochaines lignes disponibles de Sheet2 .
Nous pouvons créer la macro suivante pour ce faire :
Sub CopyToAnotherSheet()
Dim LastRow As Long
'Find last used row in a Column A of Sheet1
With Worksheets("Sheet1")
LastRow = .Cells(.Rows.Count, "A").End(xlUp).Row
End With
'Find first row where values should be posted in Sheet2
With Worksheets("Sheet2")
j = .Cells(.Rows.Count, "A").End(xlUp).Row + 1
End With
'Paste each row that contains "Mavs" in column A of Sheet1 into Sheet2
For i = 1 To LastRow
With Worksheets("Sheet1")
If .Cells(i, 1).Value = "Mavs" Then
.Rows(i).Copy Destination:=Worksheets("Sheet2").Range("A" & j)
j = j + 1
End If
End With
Next i
End Sub
Lorsque nous exécutons cette macro, nous recevons le résultat suivant dans Sheet2 :
Notez que chaque ligne de Sheet1 où le nom de l’équipe était égal à Mavs a été collée dans les lignes disponibles suivantes dans Sheet2 .
Remarque : Vous pouvez trouver la documentation complète de la méthode VBA Copy ici .
Ressources additionnelles
Les didacticiels suivants expliquent comment effectuer d’autres tâches courantes dans VBA :
VBA : Comment trouver la dernière ligne utilisée
VBA : Comment compter le nombre de lignes dans la plage
VBA : Comment compter le nombre de colonnes utilisées