Les contrôles (Controls) peuvent également être utilisés en dehors des formulaires. Dans l'exemple suivant, nous utiliserons les contrôles directement sur la feuille de calcul.
Notez que le "Mode Concepteur" ("Design mode") doit être activé pour modifier un contrôle particulier situé sur la feuille de calcul (et doit également être désactivé pour utiliser ce contrôle).
Avant de regarder l'exemple suivant, regardons ceci :
Maintenant, nous souhaitons ajouter une couleur d'arrière-plan aux cellules et les sélectionner en fonction de la position du curseur dans une zone définie de 30 lignes sur 10 colonnes.
Les propriétés du curseur vertical pour faire défiler l'écran sont les suivantes :
Le curseur horizontal est le même, sauf Max : 10.
Voici le code qui s'exécutera chaque fois que la valeur du curseur vertical (Value) change :
'Fond gris dans les cellules Cells.Interior.Color = RGB(240, 240, 240) 'Nous appliquons la couleur et sélectionnons une cellule With Cells(ScrollBar_vertical.Value, ActiveCell.Column) 'Définir la cellule en utilisant Value (Value) .Interior.Color = RGB(255, 220, 100) 'Nous utilisons la couleur orange .Select 'Nous sélectionnons une cellule End With
Ce code est déclenché lorsque les événements Change et Scroll se produisent et exécute les instructions quelle que soit la partie du curseur sur laquelle nous avons cliqué.
Voici le code du curseur vertical :
Private Sub vertical_bar() 'Appliquer un fond gris aux cellules Cells.Interior.Color = RGB(240, 240, 240) 'Appliquer l'arrière-plan et sélectionner la cellule With Cells(ScrollBar_vertical.Value, ActiveCell.Column) .Interior.Color = RGB(255, 220, 100) 'Orange .Select 'Nous sélectionnons une cellule End With End Sub Private Sub ScrollBar_vertical_Change() vertical_bar End Sub Private Sub ScrollBar_vertical_Scroll() vertical_bar End Sub
Et voici, à son tour, le code du curseur horizontal :
Private Sub horizontal_bar() 'Appliquer un fond gris aux cellules Cells.Interior.Color = RGB(240, 240, 240) 'Appliquer l'arrière-plan et sélectionner la cellule With Cells(ActiveCell.Row, ScrollBar_horizontal.Value) .Interior.Color = RGB(255, 220, 100) 'Orange .Select 'Nous sélectionnons une cellule End With End Sub Private Sub ScrollBar_horizontal_Change() horizontal_bar End Sub Private Sub ScrollBar_horizontal_Scroll() horizontal_bar End Sub
C'est le point de départ de notre prochain exemple :
Vous pouvez télécharger le fichier d'exemple Excel : userform4.xls
Lors de l'exécution du formulaire, nous souhaitons que les 4 pays soient chargés dans la liste déroulante (en utilisant la méthode AddItem) :
Private Sub UserForm_Initialize() For i = 1 To 4 '=> pour remplir 4 pays ComboBox_Country.AddItem Cells(1, i) 'On additionne les valeurs des cellules de A1 à A4 à l'aide d'une boucle Next End Sub
Lorsque la valeur de la liste déroulante change, nous souhaitons ajouter les villes du pays sélectionné en utilisant une boucle similaire à la précédente.
Pour ce faire, nous devons connaître le numéro de la colonne, ainsi que le nombre de villes (lignes) dans cette colonne.
La propriété ListIndex contient le numéro de séquence de l'élément sélectionné dans la liste déroulante (contrairement à Value, qui contient la valeur de l'élément de liste). Notez que ListIndex commence par le chiffre 0.
Le numéro de colonne est obtenu par :
column_number = ComboBox_Country.ListIndex + 1
Pour obtenir le nombre de lignes dans la colonne sélectionnée pour un pays spécifique, on peut trouver le numéro de la dernière cellule non vide :
rows_number = Cells(1, column_number).End(xlDown).Row
A partir de ces informations, il est désormais possible de créer une boucle pour ajouter les villes à la liste :
Private Sub ComboBox_Country_Change() 'Effacer la liste (sinon, les villes seront ajoutées immédiatement) ListBox_Cities.Clear Dim column_number As Integer, rows_number As Integer 'Le numéro de séquence de l'élément sélectionné (ListIndex commence par 0) : column_number = ComboBox_Country.ListIndex + 1 'Nombre de lignes dans la colonne sélectionnée avec les pays : rows_number = Cells(1, column_number).End(xlDown).Row For i = 2 To rows_number '=> remplir la liste des villes ListBox_Cities.AddItem Cells(i, column_number) Next End Sub
Remarque : Nous pourrions raccourcir le code, mais cela le rendrait moins lisible :
Private Sub ComboBox_Country_Change() ListBox_Cities.Clear For i = 2 To Cells(1, ComboBox_Country.ListIndex + 1).End(xlDown).Row ListBox_Cities.AddItem Cells(i, ComboBox_Country.ListIndex + 1) Next End Sub
La ville que nous choisirons sera saisie dans le champ de texte « Choix » (« Choice ») :
Private Sub ListBox_Cities_Click() TextBox_Choice.Value = ListBox_Cities.Value End Sub
Vous pouvez voir un exemple terminé dans ce fichier Excel : userform4b.xls