Comment parcourir en boucle une liste de données sur une feuille de calcul en utilisant des macros dans Excel

Résumé

Lorsque vous écrivez une macro Microsoft Visual Basic pour applications (VBA), vous devrez peut-être parcourir une liste de données sur une feuille de calcul. Il existe plusieurs méthodes pour effectuer cette tâche. La section « Plus d’informations » de cet article contient des informations sur les méthodes que vous pouvez utiliser pour parcourir les types de listes suivants :

  • Une liste qui contient un nombre connu et constant de lignes.
  • Une liste dynamique, ou une liste avec un nombre inconnu de lignes.
  • Une liste qui contient un enregistrement spécifique.

Informations supplémentaires

Microsoft fournit des exemples de programmation à titre d’illustration uniquement, sans garantie expresse ou implicite. Cela inclut, sans y être limité, les garanties implicites de commercialisation et d’adaptation à un but en particulier. Cet article considère que vous connaissez le langage de programmation présenté et les outils utilisés pour créer et déboguer des procédures. Les techniciens du Support technique Microsoft peuvent vous expliquer les fonctionnalités d’une procédure particulière, mais ils ne peuvent pas modifier les exemples en vue de vous fournir des fonctionnalités supplémentaires ou de créer des procédures répondant à vos besoins spécifiques. Les exemples de code suivants supposent que la liste a une ligne d’en-tête qui commence à la cellule A1 et des données qui commencent à la cellule A2.

Parcourir une liste avec un nombre constant et connu de lignes

Ce code descend la colonne A jusqu’à la fin de la liste :

   Sub Test1()
      Dim x As Integer
      ' Set numrows = number of rows of data.
      NumRows = Range("A2", Range("A2").End(xldown)).Rows.Count
      ' Select cell a1.
      Range("A2").Select
      ' Establish "For" loop to loop "numrows" number of times.
      For x = 1 To NumRows
         ' Insert your code here.
         ' Selects cell down 1 row from active cell.
         ActiveCell.Offset(1, 0).Select
      Next
   End Sub

Parcourir une liste dynamique ou une liste avec un nombre inconnu de lignes

Ce code descend la colonne A jusqu’à la fin de la liste. (Ce code suppose que chaque cellule de la colonne A contient une entrée jusqu’à la fin.)

   Sub Test2()
      ' Select cell A2, *first line of data*.
      Range("A2").Select
      ' Set Do loop to stop when an empty cell is reached.
      Do Until IsEmpty(ActiveCell)
         ' Insert your code here.
         ' Step down 1 row from present location.
         ActiveCell.Offset(1, 0).Select
      Loop
   End Sub

              Remarque : s’il y a des cellules vides dans la colonne A tout au long des données, modifiez ce code pour tenir compte de cette condition. Assurez-vous que les cellules vides sont à une distance constante l’une de l’autre. Par exemple, si une cellule sur deux de la colonne A est vide (par exemple, cette situation peut se produire si chaque « enregistrement » utilise deux lignes, avec la deuxième rangée en retrait d’une cellule), cette boucle peut être modifiée comme suit :

     ' Set Do loop to stop when two consecutive empty cells are reached.
     Do Until IsEmpty(ActiveCell) and IsEmpty(ActiveCell.Offset(1, 0))
        ' Insert your code here.
        '
       ' Step down 2 rows from present location.
       ActiveCell.Offset(2, 0).Select
     Loop

Parcourir une liste pour y trouver un enregistrement spécifique

Ce code descend la colonne A jusqu’à la fin de la liste :

   Sub Test3()
      Dim x As String
      Dim found As Boolean
      ' Select first line of data.
      Range("A2").Select
      ' Set search variable value.
      x = "test"
      ' Set Boolean variable "found" to false.
      found = False
      ' Set Do loop to stop at empty cell.
      Do Until IsEmpty(ActiveCell)
         ' Check active cell for search value.
         If ActiveCell.Value = x Then
            found = TRUE
            Exit Do
         End If
         ' Step down 1 row from present location.
         ActiveCell.Offset(1, 0).Select
      Loop
   ' Check for found.
      If found = True Then
         Msgbox "Value found in cell " & ActiveCell.Address
      Else
         Msgbox "Value not found"
      End If
   End Sub