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

Ajouter un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *