Remplir une zone de liste avec des valeurs uniques à partir d’une feuille de calcul en utilisant VBA dans Microsoft Excel
Dans cet article, nous allons créer une zone de liste dans le formulaire utilisateur et la charger avec des valeurs après avoir supprimé les valeurs en double.
Les données brutes que nous insérerons dans la zone de liste sont constituées de noms. Ces données brutes contiennent de la duplicité dans les noms définis.
Dans cet exemple, nous avons créé un formulaire utilisateur composé de List Box.
Cette zone de liste affichera les noms uniques des exemples de données. Pour activer le formulaire utilisateur, cliquez sur le bouton Soumettre.
Ce formulaire utilisateur renverra le nom sélectionné par l’utilisateur comme sortie dans une boîte de message.
Explication logique
Avant d’ajouter des noms dans la zone de liste, nous avons utilisé un objet de collection pour supprimer les noms en double.
Nous avons effectué les étapes suivantes pour supprimer les entrées en double: -. Ajout de noms de la plage définie dans la feuille Excel à l’objet de collection. Dans l’objet de collection, nous ne pouvons pas insérer de valeurs en double. Ainsi, l’objet Collection génère une erreur en rencontrant des valeurs en double. Pour gérer les erreurs, nous avons utilisé l’instruction d’erreur «On Error Resume Next».
-
Après avoir préparé la collection, ajoutez tous les éléments de la collection au tableau.
-
Ensuite, insérez tous les éléments du tableau dans la zone de liste.
Veuillez suivre ci-dessous pour le code
Option Explicit Sub running() UserForm1.Show End Sub 'Add below code in userform Option Explicit Private Sub CommandButton1_Click() Dim var1 As String Dim i As Integer 'Looping through all the values present in the list box 'Assigning the selected value to variable var1 For i = 0 To ListBox1.ListCount - 1 If ListBox1.Selected(i) Then var1 = ListBox1.List(i) Exit For End If Next 'Unload the userform. Unload Me 'Displaying the selected value MsgBox "You have selected following name in the List Box : " & var1 End Sub Private Sub UserForm_Initialize() Dim MyUniqueList As Variant, i As Long 'Calling UniqueItemList function 'Assigning the range as input parameter MyUniqueList = UniqueItemList(Range("A12:A100"), True) With Me.ListBox1 'Clearing the List Box content .Clear 'Adding values in the List Box For i = 1 To UBound(MyUniqueList) .AddItem MyUniqueList(i) Next i 'Selecting the first item .ListIndex = 0 End With End Sub Private Function UniqueItemList(InputRange As Range, _ HorizontalList As Boolean) As Variant Dim cl As Range, cUnique As New Collection, i As Long 'Declaring a dynamic array Dim uList() As Variant 'Declaring this function as volatile 'Means function will be recalculated whenever calculation occurs in any cell Application.Volatile On Error Resume Next 'Adding items to collection 'Only unique item will be inserted 'Inserting duplicate item will through an error For Each cl In InputRange If cl.Value <> "" Then 'Adding values in collection cUnique.Add cl.Value, CStr(cl.Value) End If Next cl 'Initializing value return by the function UniqueItemList = "" If cUnique.Count > 0 Then 'Resizing the array size ReDim uList(1 To cUnique.Count) 'Inserting values from collection to array For i = 1 To cUnique.Count uList(i) = cUnique(i) Next i UniqueItemList = uList 'Checking the value of HorizontalList 'If value is true then transposing value of UniqueItemList If Not HorizontalList Then UniqueItemList = _ Application.WorksheetFunction.Transpose(UniqueItemList) End If End If On Error GoTo 0 End Function
Si vous avez aimé ce blog, partagez-le avec vos amis sur Facebook et Facebook.
Nous serions ravis de vous entendre, faites-nous savoir comment nous pouvons améliorer notre travail et le rendre meilleur pour vous. Écrivez-nous à [email protected]