Partager via


Guide pratique pour parcourir une liste de données sur une feuille de calcul à l’aide de 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 dans 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 rechercher les types de listes suivants :

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

Plus d’informations

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 dans la cellule A1 et les données qui commencent dans la cellule A2.

Pour rechercher une liste avec un nombre de lignes constant et connu

Ce code déplace la colonne A vers 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

Pour rechercher une liste dynamique ou une liste avec un nombre inconnu de lignes

Ce code déplace la colonne A vers 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

Note S’il existe des cellules vides dans la colonne A dans toutes les données, modifiez ce code pour tenir compte de cette condition. Assurez-vous que les cellules vides sont séparées de manière cohérente. Par exemple, si chaque autre cellule de la colonne A est vide (par exemple, cette situation peut se produire si chaque « enregistrement » utilise deux lignes, avec la deuxième ligne mise 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

Pour rechercher une liste pour un enregistrement spécifique

Ce code déplace la colonne A vers 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