Sélection de cellules

Soit le tableau suivant :

Il peut être fort pratique de connaître d'un seul coup d'un seul : la première ligne qui compose le tableau, la dernière cellule, la dernière colonne, etc. Voici quelques "recettes de cuisine".

Tout d'abord, il faut savoir ou le tableau commence. En l'occurence, il commence en C2, pas en A1. Pour sélectionner le tableau, on écrit :

ActiveSheet.UsedRange.Select

Ce qui aura pour effet de sélectionner C2:E7. Attention : UsedRange prend en compte TOUTES les cellules utilisées. Le tableau suivant :

va poser problème. En effet

ActiveSheet.UsedRange.Select

Va sélectionner B2:F20. Vous avez compris la nuance ? Pour pouvoir sélectionner le premier tableau dans ce cas-ci, on aurait recours à CurrentRegion, mais il faut connaître au moins une cellule faisant partie du tableau.

ActiveSheet.Range("E12").CurrentRegion.Select

Sélectionnerait D10:F14. Selon la cellule spécifiée, le CurrentRegion sélectionne tel ou tel tableau de la feuille.

Pour le bien-être de la démonstration, nous allons admettre que notre feuille active ne contient que le tableau décrit au début de la page, ce qui nous permettre d'utiliser UsedRange en toute quiétude.

Voici toutes les sélections intéressantes en rapport avec ce tableau :

Toutes les sélections commencent avec ActiveSheet.UsedRange, c'est pourquoi je les ai mises en petit.

Sélection de tout le tableau (C2:E7):

ActiveSheet.UsedRange.Select

Tout le tableau sauf la ligne de titre (C3:E7). Tout l'astuce consiste à commencer à la ligne 2 du tableau (Ligne3 en fait), jusqu'au nombre de Lignes (Rows.Count):

ActiveSheet.UsedRange.Rows("2:" & ActiveSheet.UsedRange.Rows.Count).Select

Ligne de titre (C2:E2). On sélectionne simplement la première ligne de notre UsedRange ::

ActiveSheet.UsedRange.Rows(1).Select

Ligne de titre complète (Ligne 2) La propriété EntireRow permet ce tour de force ::

ActiveSheet.UsedRange.Rows(1).EntireRow.Select

Toutes les lignes complètes composant le tableau (Ligne 2 jusqu'à la ligne 7):

ActiveSheet.UsedRange.EntireRow.Select

Toutes les colonnes complètes composant le tableau (Colonne C jusqu'à la E). EntireColumn est le pendant de EntireRow, on l'aura compris :

ActiveSheet.UsedRange.EntireColumn.Select

Toutes les lignes complètes composant le tableau, sauf la ligne de titre (Ligne 3 jusqu'à la ligne 7). Voir la sélection de tout le tableau sauf la première ligne.

ActiveSheet.UsedRange.Rows("2:" & ActiveSheet.UsedRange.Rows.Count).EntireRow.Select

La première colonne complète (Colonne C). On prend l'EntireColumn de la première cellule en haut à gauche de notre UsedRange.

ActiveSheet.UsedRange.Cells(1, 1).EntireColumn.Select

La dernière colonne complète (Colonne E). Même chose, mais on prend la cellule tout en haut de la colonne N° Columns.Count

ActiveSheet.UsedRange.Cells(1, ActiveSheet.UsedRange.Columns.Count).EntireColumn.Select

Dernière ligne : Pas toute la ligne, mais uniquement C7:E7 (dans la limite du UsedRange donc)

ActiveSheet.UsedRange.Rows(ActiveSheet.UsedRange.Rows.Count).Select

Dernière ligne complète. Cette fois grace à EntireRow, on peut sélectionner toute la ligne 7

ActiveSheet.UsedRange.Rows(ActiveSheet.UsedRange.Rows.Count).EntireRow.Select

Nouvelle ligne : (C8:E8) C'est comme la sélection de la dernière ligne, mais on ajoute + 1

ActiveSheet.UsedRange.Rows(ActiveSheet.UsedRange.Rows.Count + 1).Select

Nouvelle ligne complète : Idem, mais avec EntireRow (Ligne 8)

ActiveSheet.UsedRange.Rows(ActiveSheet.UsedRange.Rows.Count + 1).EntireRow.Select

Cellule en haut à gauche : (C2)

ActiveSheet.UsedRange.Cells(1, 1).Select

Cellule en haut à droite : (E2) Encore une histoire du Columns.Count

ActiveSheet.UsedRange.Cells(1, ActiveSheet.UsedRange.Columns.Count).Select

Cellule en Bas à gauche (Dernier nom : C7): Cette fois, c'est le comptage des lignes avec Rows.Count

ActiveSheet.UsedRange.Cells(ActiveSheet.UsedRange.Rows.Count, 1).Select

Cellule en bas à droite (Dernière ville : E7) : Combinaison possible de Rows et Columns.Count. Ne vous laissez pas troubler par l'apparente complexité du Cells().

ActiveSheet.UsedRange.Cells(ActiveSheet.UsedRange.Rows.Count, ActiveSheet.UsedRange.Columns.Count).Select

Premier nom (Colonne de gauche): (C3). Cells(2,1) = Cells(Ligne, Colonne). Il s'agit bien de la 2ème ligne du UsedRange, et pas de la feuille complète, ce qui explique pourquoi nous sommes sur la ligne 3 et pas la 2.

ActiveSheet.UsedRange.Cells(2, 1).Select

Premier prénom : Même principe, mais le 2ème 2 signifie 2ème colonne, toujours du UsedRange, donc.

ActiveSheet.UsedRange.Cells(2, 2).Select

Première Ville (première valeur de la dernière colonne). 2ème ligne, on a compris, et "Columns.Countième" colonne.

ActiveSheet.UsedRange.Cells(2, ActiveSheet.UsedRange.Columns.Count).Select

Cellule une ligne plus bas, colonne la plus a gauche (Nouveau nom : C8) : Cette fois, c'est le nombre de lignes + 1 qui nous intéresse.

ActiveSheet.UsedRange.Cells(ActiveSheet.UsedRange.Rows.Count + 1, 1).Select

Cellule une ligne plus bas, colonne la plus a droite (Nouvelle ville : E8) : Le nombre de colonnes et le nombre de lignes + 1 nous intéresse.

ActiveSheet.UsedRange.Cells(ActiveSheet.UsedRange.Rows.Count + 1, ActiveSheet.UsedRange.Columns.Count).Select

Nouveau prénom (juste en dessous du dernier prénom - 2ème colonne : D8). Le ",2" considère la combientième colonne nous intéresse. Si on avait mis ",18", il aurait sélectionné la 18ème colonne de notre UsedRange, et malgré que la 18ème colonne est bien trop à droite, il l'aurait quand même sélectionnée sans faire d'erreur.

ActiveSheet.UsedRange.Cells(ActiveSheet.UsedRange.Rows.Count + 1, 2).Select

A vous d'expérimenter maintenant !

Vous pourriez, à titre d'exercice, essayer de sélectionner tout le tableau sauf la denière colonne, ou tout le tableau sauf la première ni la dernière ligne, ou que la 4ème ligne...

---