Aller au menu - Aller au contenu

Icône La sélection

Avatar
Avatar
Avatar
Mise à jour : 05/09/2011
Difficulté : Facile Facile Creative Commons BY-NC-SA
9 728 visites depuis 7 jours, dont 444 sur ce chapitre classé 26/786
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 ? ;)
Sommaire du chapitre :
Icône du chapitre
Chapitre précédent Sommaire Chapitre suivant

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 :

Code : VB.NET
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 :

Code : VB.NET
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 :

Code : VB.NET
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
Code : VB.NET
1
Range("E3").Select
Code : VB.NET
1
Cells(3, 5).Select

La syntaxe pour sélectionner une cellule avec Cells est la suivante :

Code : VB.NET
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 » :

Image utilisateur


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 :

Code : VB.NET
 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 :

Code : VB.NET
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 place de lignes contiguës :

Code : VB.NET
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 :

Code : VB.NET
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...

Code : VB.NET
1
2
3
'Sélection de la colonne C :

Columns("C").Select

Vous pouvez aussi sélectionner une plage de colonnes :

Code : VB.NET
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 :

Code : VB.NET
1
2
3
'Sélection des colonnes A, C et G :

Range("A:A, C:C, G:G").Select
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 ! :pirate:
Chapitre précédent Sommaire Chapitre suivant

Partager

2 commentaires pour "La sélection"
Note moyenne : 3.67 / 4 (100 votes)
Pseudo Commentaire
Hors ligne thefone # Posté le 22/02/2011 à 00:58:45

bonjour

je cherche à selectionner les 4 cellules qui sont à la droite d'une cellule selectionné, et je connais la colonne mais pas la ligne de la cellule.

auriez vous des idées?
Hors ligne gwiiix # Posté le 14/03/2012 à 16:06:16

Avis : Très bon

Bonjour

merci pour ces explications claires comme de l'eau de roche

Voir tous les commentaires