Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Apprendre Navigation dans les Feuilles de Calcul | Travail Avec Les Données Excel
VBA Excel Pour l'Automatisation des Entreprises

Navigation dans les Feuilles de Calcul

Glissez pour afficher le menu

Les données réelles ne comportent pas d'étiquette indiquant où elles se terminent. Coder en dur Range("A1:I5") pose problème dès qu'une sixième commande est ajoutée — il faut donc demander à la feuille où se termine ses données.

Recherche de la dernière ligne

La ligne de code la plus utilisée dans tout ce cours :

Dim lastRow As Long
lastRow = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row

À lire de droite à gauche : commencer tout en bas de la colonne A (ws.Rows.Count), remonter (End(xlUp)) jusqu'à la première cellule occupée, puis retourner son numéro de ligne. Cette méthode fonctionne quel que soit le nombre de commandes existantes.

Figure 3.2

Recherche de la dernière colonne

Fonctionne de la même manière, mais horizontalement :

Dim lastCol As Long
lastCol = ws.Cells(1, ws.Columns.Count).End(xlToLeft).Column

UsedRange

Indique la zone rectangulaire complète de la feuille qui a déjà contenu des données — utile pour une vérification rapide, mais à utiliser avec prudence : il se souvient des cellules qui contenaient des données même après suppression de leur contenu, ce qui peut surestimer la plage de données réelle.

Debug.Print ws.UsedRange.Address        ' e.g. $A$1:$I$6
Debug.Print ws.UsedRange.Rows.Count     ' 6

CurrentRegion

Généralement l’outil le plus adapté : il s’étend à partir d’une seule cellule vers le bloc de données contigu autour d’elle, s’arrêtant à la première ligne ou colonne vide — correspondant exactement à une table propre comme Orders :

Dim tableRange As Range
Set tableRange = ws.Range("A1").CurrentRegion
Debug.Print tableRange.Address           ' $A$1:$I$6
Debug.Print tableRange.Rows.Count - 1    ' 5 — subtract 1 to exclude the header

Exercice

  1. Écrire une Sub qui trouve la dernière ligne en utilisant la méthode End(xlUp) et l’affiche dans la fenêtre Exécution.
  2. Dans la même Sub, trouver la dernière ligne d’une seconde manière avec CurrentRegion.Rows.Count, et l’afficher également — vérifier qu’elles correspondent.
  3. Ajouter manuellement une sixième commande à la ligne 7 de la feuille, relancer la macro, et confirmer que les deux méthodes indiquent maintenant 7 sans modification du code :
Indice
expand arrow

1. Recherche de la dernière ligne avec End(xlUp)

  • Départ depuis le bas de la colonne A et remontée — le même schéma que dans la section « Recherche de la dernière ligne » du chapitre 3.
  • Debug.Print du résultat pour l’afficher dans la fenêtre Exécution immédiate (Ctrl+G).

2. Deuxième méthode avec CurrentRegion

  • CurrentRegion s’étend à partir d’une seule cellule de départ (essayez Range("A1")) jusqu’au bloc contigu complet.
  • .Rows.Count sur cette région inclut la ligne d’en-tête — se référer à la remarque du chapitre concernant la soustraction de 1 si seules les lignes de données sont souhaitées. Comme cette tâche demande simplement de comparer les deux méthodes, affichez d’abord le nombre brut puis raisonnez sur l’en-tête ensuite.

3. Ajouter une sixième ligne et relancer

  • Aucun changement de code nécessaire — il suffit de saisir une nouvelle commande directement à la ligne 7 de la feuille, puis d’exécuter exactement la même Sub à nouveau.
Solution
expand arrow
Sub CompareLastRowMethods()
    Dim ws As Worksheet
    Set ws = ThisWorkbook.Worksheets("Orders")

    Dim lastRowMethod1 As Long
    lastRowMethod1 = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row
    Debug.Print "End(xlUp): " & lastRowMethod1

    Dim lastRowMethod2 As Long
    lastRowMethod2 = ws.Range("A1").CurrentRegion.Rows.Count
    Debug.Print "CurrentRegion: " & lastRowMethod2
End Sub
Tout était clair ?

Comment pouvons-nous l'améliorer ?

Merci pour vos commentaires !

Section 3. Chapitre 2

Demandez à l'IA

expand

Demandez à l'IA

ChatGPT

Posez n'importe quelle question ou essayez l'une des questions suggérées pour commencer notre discussion

Navigation dans les Feuilles de Calcul

Les données réelles ne comportent pas d'étiquette indiquant où elles se terminent. Coder en dur Range("A1:I5") pose problème dès qu'une sixième commande est ajoutée — il faut donc demander à la feuille où se termine ses données.

Recherche de la dernière ligne

La ligne de code la plus utilisée dans tout ce cours :

Dim lastRow As Long
lastRow = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row

À lire de droite à gauche : commencer tout en bas de la colonne A (ws.Rows.Count), remonter (End(xlUp)) jusqu'à la première cellule occupée, puis retourner son numéro de ligne. Cette méthode fonctionne quel que soit le nombre de commandes existantes.

Figure 3.2

Recherche de la dernière colonne

Fonctionne de la même manière, mais horizontalement :

Dim lastCol As Long
lastCol = ws.Cells(1, ws.Columns.Count).End(xlToLeft).Column

UsedRange

Indique la zone rectangulaire complète de la feuille qui a déjà contenu des données — utile pour une vérification rapide, mais à utiliser avec prudence : il se souvient des cellules qui contenaient des données même après suppression de leur contenu, ce qui peut surestimer la plage de données réelle.

Debug.Print ws.UsedRange.Address        ' e.g. $A$1:$I$6
Debug.Print ws.UsedRange.Rows.Count     ' 6

CurrentRegion

Généralement l’outil le plus adapté : il s’étend à partir d’une seule cellule vers le bloc de données contigu autour d’elle, s’arrêtant à la première ligne ou colonne vide — correspondant exactement à une table propre comme Orders :

Dim tableRange As Range
Set tableRange = ws.Range("A1").CurrentRegion
Debug.Print tableRange.Address           ' $A$1:$I$6
Debug.Print tableRange.Rows.Count - 1    ' 5 — subtract 1 to exclude the header

Exercice

  1. Écrire une Sub qui trouve la dernière ligne en utilisant la méthode End(xlUp) et l’affiche dans la fenêtre Exécution.
  2. Dans la même Sub, trouver la dernière ligne d’une seconde manière avec CurrentRegion.Rows.Count, et l’afficher également — vérifier qu’elles correspondent.
  3. Ajouter manuellement une sixième commande à la ligne 7 de la feuille, relancer la macro, et confirmer que les deux méthodes indiquent maintenant 7 sans modification du code :
Indice
expand arrow

1. Recherche de la dernière ligne avec End(xlUp)

  • Départ depuis le bas de la colonne A et remontée — le même schéma que dans la section « Recherche de la dernière ligne » du chapitre 3.
  • Debug.Print du résultat pour l’afficher dans la fenêtre Exécution immédiate (Ctrl+G).

2. Deuxième méthode avec CurrentRegion

  • CurrentRegion s’étend à partir d’une seule cellule de départ (essayez Range("A1")) jusqu’au bloc contigu complet.
  • .Rows.Count sur cette région inclut la ligne d’en-tête — se référer à la remarque du chapitre concernant la soustraction de 1 si seules les lignes de données sont souhaitées. Comme cette tâche demande simplement de comparer les deux méthodes, affichez d’abord le nombre brut puis raisonnez sur l’en-tête ensuite.

3. Ajouter une sixième ligne et relancer

  • Aucun changement de code nécessaire — il suffit de saisir une nouvelle commande directement à la ligne 7 de la feuille, puis d’exécuter exactement la même Sub à nouveau.
Solution
expand arrow
Sub CompareLastRowMethods()
    Dim ws As Worksheet
    Set ws = ThisWorkbook.Worksheets("Orders")

    Dim lastRowMethod1 As Long
    lastRowMethod1 = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row
    Debug.Print "End(xlUp): " & lastRowMethod1

    Dim lastRowMethod2 As Long
    lastRowMethod2 = ws.Range("A1").CurrentRegion.Rows.Count
    Debug.Print "CurrentRegion: " & lastRowMethod2
End Sub
Tout était clair ?

Comment pouvons-nous l'améliorer ?

Merci pour vos commentaires !

Section 3. Chapitre 2
some-alt