TOP

VBA-Leçon 12.3. Contrôles (Controls)

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).


Barre de défilement (ScrollBar)

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 :

  • Min : 1
  • Max : 30 (30 lignes)
  • Value : position du curseur (dans ce cas, entre 1 et 30)
  • 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
    

    Liste déroulante et ListBox (ComboBox et ListBox)

    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