Après une mise en bouche à la POO, nous allons faire une pause. Vous avez quand même ingurgité pas mal de notions dans les deux chapitres précédents. Nous n'allons pas pour autant glander. Ici, pause est synonyme de… pratique ! En effet, la théorie, c'est bien, mais il faut bien mettre les mains dans le cambouis à un moment où à un autre. Nous n'allons donc pas étudier de nouvelles notions propres à la POO mais tout simplement mélanger classes, objets et méthodes plus ou moins nouvelles afin de vous faire travailler la sélection.
Si vous avez suivi la première partie de ce cours, vous avez sans doute compris à quel point l'accent a été mis très tôt sur la sélection. C'est une notion importante et même en VBA. Gardons à l'esprit que VBA peut permettre d'échanger avec un utilisateur du tableur. Il faut donc bien pouvoir s'y repérer, non ?
- Sélectionner des cellules
- Sélectionner des lignes
- Sélectionner des colonnes
- Exercice : faciliter la lecture dans une longue liste de données
Sélectionner des cellules
Comme nous l'avons très rapidement vu au chapitre précédent, toutes les cellules du tableur sont des instances de la classe Range. Pour effectuer la sélection, il suffit d'appliquer à votre objet la méthode Select. Jusque-là, pas de surprise. La sélection de la cellule C5 peut donc se faire comme suit :
1 2 3 4 5 | Sub tests_selection() Range("C5").Select End Sub |
On peut aussi sélectionner plusieurs cellules les séparant par des virgules :
1 2 3 | 'Sélection des cellules C5, D4 et F8 : Range("C5, D4, F8").Select |
Votre objet peut aussi être une plage de cellules. Par exemple, le code ci-dessous sélectionne une plage de B2 à E8 :
1 | Range("B2:E8").Select |
Cells, une autre classe pour les cellules…
Les cellules sont des instances de Range, mais aussi de la classe Cells. Voyez plutôt ces deux codes comparatifs qui exécutent exactement la même chose :
Avec Range |
Avec Cells |
---|---|
|
|
La syntaxe pour sélectionner une cellule avec Cells est la suivante :
1 | Cells(ligne, colonne).Select |
C'est exactement l'inverse de l'adressage que nous connaissons dans le tableur. D'abord la ligne, ensuite la colonne. Attention ! Ces deux valeurs doivent être numériques ! C'est-à-dire que vous devez récupérer le numéro de la colonne souhaitée.
Mais comment je fais pour connaître le numéro de la colonne ?
Cliquez sur le gros bouton Office en haut à gauche puis sur « Option Excel ». Dans la fenêtre qui s'ouvre cliquez à gauche sur « Formules » et dans la rubrique « Manipulation de formules », cochez la case « Style de référence L1C1 » :
Vos références de colonnes sont maintenant des chiffres, et non des lettres
Décaler une sélection
Vous avez été traumatisés par les translations en maths ? Aïe pour vous. On va apprendre une technique qui sert à décaler une sélection à partir de la cellule active. La cellule active est gérée par la classe ActiveCell. La classe nouvelle qui effectuera le décalage est Offset. Offset attend deux arguments : le nombre de lignes puis le nombre de colonnes du décalage. Il ne faut pas se tromper dans le signe. Des exemples ? En voici :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | Sub decalages() 'La cellule active ne bouge pas : ActiveCell.Offset(0, 0).Select 'Décalage d'une ligne vers le bas et d'une colonne vers la droite : ActiveCell.Offset(1, 1).Select 'Décalage d'une ligne vers le haut et de trois colonnes vers la gauche : ActiveCell.Offset(-1, -3).Select End Sub |
Sélectionner des lignes
Les lignes du tableur sont des objets de la classe Rows. La sélection de la deuxième ligne du classeur actif peut se faire comme ceci :
1 | Rows("2").Select |
On utilise toujours la même méthode (Select). C'est juste la classe qui change
Tout comme pour les cellules, on peut aussi sélectionner une plage de lignes contiguës :
1 2 3 | ' Sélection des lignes 2 à 5 incluses : Rows("2:5").Select |
Les lignes peuvent aussi être discontinues. Dans ce cas, la syntaxe est la suivante :
1 | Range("2:2, 5:5, 6:8").Select |
Les lignes 2, 5 et la plage des lignes 6 à 8 seront sélectionnées.
Hein ?? Mais tu avais dit que les lignes étaient gérées par Rows ! Pourquoi tu nous ressors Range ?
Lorsqu'on cherche à faire des sélections d'objets discontinus en VBA, on retourne vers la classe Range. C'est comme ça. On indique les plages que l'on souhaite sélectionner séparées par des virgules.
Sélectionner des colonnes
La méthode pour sélectionner des colonnes est la même que pour sélectionner des lignes. Nous allons juste utiliser la classe Columns qui s'occupe des colonnes du tableur Je pense que vous savez désormais sélectionner une colonne…
1 2 3 | 'Sélection de la colonne C : Columns("C").Select |
Vous pouvez aussi sélectionner une plage de colonnes :
1 2 3 | 'Sélection des colonnes C, D, E et F : Columns("C:F").Select |
Et comme pour les lignes, on se tourne vers la classe Range pour la sélection d'objets discontinus :
1 2 3 | 'Sélection des colonnes A, C et G : Range("A:A, C:C, G:G").Select |
Exercice : faciliter la lecture dans une longue liste de données
.
Le repos est terminé, on retourne dans les zones sombres du VBA ! Au programme : deux chapitres sur une notion fondamentale de tout langage de programmation qui se respecte : les variables !