Les contrôles peuvent être utilisés en dehors des UserForms. Pour cet exemple, nous utiliserons les contrôles directement sur la feuille.
Notez tout d'abord que le "Mode Création" doit être activé pour modifier un contrôle placé sur une feuille (et désactivé pour utiliser le contrôle).
Pour les versions d'Excel inférieures à 2007 : bouton sur la barre "Boîte à outils Contrôles".
Avant de détailler cet exemple, en voici un aperçu :
L'objectif est de colorer et sélectionner une cellule grâce aux barres de défilement dans la zone définie de 30 lignes x 10 colonnes.
Les propriétés de la barre de défilement verticale :
Min : 1
Max : 30 (puisque 30 lignes)
Value : position de la barre (entre 1 et 30 ici)
Même chose avec la barre horizontale avec un Max à 10 ...
Voici le code qui sera appliqué à chaque changement de valeur (Value) de la barre verticale :
'Couleur grise sur
les cellules
Cells.Interior.Color
= RGB(240, 240, 240)
'Couleur
et sélection de la cellule
With
Cells(ScrollBar_verticale.Value, ActiveCell.Column)
'Cellule
par rapport à Value
.Interior.Color = RGB(255, 220, 100)
'Couleur
orange
.
Select
'Sélection
de la cellule
End
With
Ce code sera exécuté avec les événements Change et Scroll pour lancer les instructions quelle que soit la partie de la barre de défilement qui est cliquée.
Voici le code pour la barre verticale :
Private
Sub
barre_verticale()
'Couleur
grise sur les cellules
Cells.Interior.Color = RGB(240, 240, 240)
'Couleur
et sélection de la cellule
With
Cells(ScrollBar_verticale.Value, ActiveCell.Column)
.Interior.Color = RGB(255, 220, 100) 'Orange
.
Select
'Sélection
de la cellule
End
With
End
Sub
Private
Sub
ScrollBar_verticale_Change()
barre_verticale
End
Sub
Private
Sub
ScrollBar_verticale_Scroll()
barre_verticale
End
Sub
Et celui de la barre horizontale :
Private
Sub
barre_horizontale()
'Couleur
grise sur les cellules
Cells.Interior.Color = RGB(240, 240, 240)
'Couleur
et sélection de la cellule
With
Cells(ActiveCell.Row, ScrollBar_horizontale.Value)
.Interior.Color = RGB(255, 220, 100) 'Orange
.
Select
'Sélection
de la cellule
End
With
End
Sub
Private
Sub
ScrollBar_horizontale_Change()
barre_horizontale
End
Sub
Private
Sub
ScrollBar_horizontale_Scroll()
barre_horizontale
End
Sub
Le fichier : scrollbar.xls
Voici le point de départ de ce nouvel exemple :
Le fichier : userform4.xls
Au lancement de l'UserForm, nous voulons que les 4 pays soient chargés dans la liste déroulante (avec la méthode AddItem) :
Private
Sub
UserForm_Initialize()
For
i = 1
To
4
' => pour
lister les 4 pays
ComboBox_Pays.AddItem Cells(1, i)
'Ajoute
les valeurs des cellules A1 à A4 avec la boucle
Next
End
Sub
Au changement de valeur de la liste déroulante, nous voulons ajouter les villes correspondant au pays choisi avec une boucle semblable à celle ci-dessus.
Pour le faire, nous avons besoin du n° de colonne et du nombre de lignes.
La propriété ListIndex correspond au n° de la sélection dans la liste (contrairement à Value qui correspond à la valeur), à noter que ListIndex commence à 0.
Le n° de colonne est donc :
no_colonne = ComboBox_Pays.ListIndex + 1
Pour obtenir le nombre de lignes de la colonne du pays choisi, nous pouvons rechercher le n° de ligne de la dernière cellule d'un bloc de cellules non vides :
nb_lignes = Cells(1,
no_colonne).
End
(xlDown).Row
Grâce à ces informations, il est désormais possible de créer la boucle pour ajouter les villes dans la zone de liste :
Private
Sub
ComboBox_Pays_Change()
'Zone
de liste vidée (sinon les villes sont ajoutées à
la suite)
ListBox_Villes.Clear
Dim
no_colonne
As
Integer
,
nb_lignes
As
Integer
'Numéro
de la sélection (ListIndex commence à 0) :
no_colonne = ComboBox_Pays.ListIndex + 1
'Nombre de
lignes de la colonne du pays choisi :
nb_lignes = Cells(1, no_colonne).
End
(xlDown).Row
For
i = 2
To
nb_lignes
' =>
pour lister les villes
ListBox_Villes.AddItem Cells(i, no_colonne)
Next
End
Sub
Remarque : nous pourrions réduire le code ci-dessus, néanmoins cela rendrait sa lecture plus difficile :
Private
Sub
ComboBox_Pays_Change()
ListBox_Villes.Clear
For
i = 2
To
Cells(1, ComboBox_Pays.ListIndex + 1).
End
(xlDown).Row
ListBox_Villes.AddItem Cells(i,
ComboBox_Pays.ListIndex + 1)
Next
End
Sub
La ville choisie est ensuite entrée dans la zone de texte :
Private
Sub
ListBox_Villes_Click()
TextBox_Choix.Value =
ListBox_Villes.Value
End
Sub
Le fichier : userform4b.xls
N'oubliez pas qu'avec l'aide Excel vous pouvez obtenir des informations rapidement sur les différentes propriétés et événements des contrôles (entre autres).
En voici un aperçu avec la recherche du contrôle Label :
L'aide Excel est très riche en informations, n'hésitez pas à l'utiliser en cas de besoin …