Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Info - Remplir un ListBox en passant par l'objet Dictionary.

3 réponses
Avatar
Clément Marcotte
Bonjour,

Au bureau, j'ai eu besoin d'extraire, pour un filtre élaboré avec une
macro, une liste unique de noms répétés dans une colonne de feuille de
calcul Excel. J'avais bien une vieille affaire à la maison, qui aurait
pu faire l'affaire, mais je ne me souviens plus où je l'avais mise, et
je n'avais pas envie d'attendre.

J'ai eu l'idée, d'utiliser l'objet Dictionnary de l'environnement des
scripts pour récupérer la liste de noms sans doublons, pour nourrir le
ListBox.

Cela donne ceci:

Il faut également établir une référence à Microsoft Scripting Runtime
dans Outils-Références.


Private Sub UserForm_Initialize()
Set Table = New Scripting.Dictionary
'Nom de la feuille à adapter
Sheets("Janvier-Juillet2003").Select
derniereligne = [a1].End(xlDown).Row
j = 0
For i = 2 To derniereligne
a = Cells(i, 2).Value
'Vérifie si le nom n'a pas déjà
'été récupéré, et enlève tout ce qui contient "contrepasser"
If Not Table.Exists(a) And _
Not InStr(LCase(Cells(i, 2).Value), "contrepasser") > 0 Then
Table.Add Cells(i, 2).Value, j
j = j + 1
End If
Next
'Récupère la liste de noms dans un tableau
a = Table.Keys
'Copie le tableau dans le ListBox
For i = 0 To Table.Count - 1
ListBox1.AddItem (a(i))
Next
End Sub

3 réponses

Avatar
Misange
merci Clément

--
Misange migrateuse http://www.excelabo.net
==Disciplus a migré chez excelabo !======= mail : http://cerbermail.com/?k5Q8Dh2mta




"Clément Marcotte" a écrit dans le message
de news:
Bonjour,

Au bureau, j'ai eu besoin d'extraire, pour un filtre élaboré avec une
macro, une liste unique de noms répétés dans une colonne de feuille de
calcul Excel. J'avais bien une vieille affaire à la maison, qui aurait
pu faire l'affaire, mais je ne me souviens plus où je l'avais mise, et
je n'avais pas envie d'attendre.

J'ai eu l'idée, d'utiliser l'objet Dictionnary de l'environnement des
scripts pour récupérer la liste de noms sans doublons, pour nourrir le
ListBox.

Cela donne ceci:

Il faut également établir une référence à Microsoft Scripting Runtime
dans Outils-Références.


Private Sub UserForm_Initialize()
Set Table = New Scripting.Dictionary
'Nom de la feuille à adapter
Sheets("Janvier-Juillet2003").Select
derniereligne = [a1].End(xlDown).Row
j = 0
For i = 2 To derniereligne
a = Cells(i, 2).Value
'Vérifie si le nom n'a pas déjà
'été récupéré, et enlève tout ce qui contient "contrepasser"
If Not Table.Exists(a) And _
Not InStr(LCase(Cells(i, 2).Value), "contrepasser") > 0 Then
Table.Add Cells(i, 2).Value, j
j = j + 1
End If
Next
'Récupère la liste de noms dans un tableau
a = Table.Keys
'Copie le tableau dans le ListBox
For i = 0 To Table.Count - 1
ListBox1.AddItem (a(i))
Next
End Sub



Avatar
Daniel.M
Salut Clément,

Merci de partager ton enthousiasme pour cette librairie trop souvent
ignorée. :-)

J'ai adapté la routine pour qu'elle ignore les cellules vides et les valeurs
d'erreur.

Je la publie ici en cas d'intérêt.

' *******************
Private Sub UserForm_Initialize()
Dim Table As Scripting.Dictionary
Dim i&, j&, Valide As Boolean, A As Variant

Set Table = New Scripting.Dictionary
j = 0

With Sheets("Janvier-Juillet2003") ' À adapter
For Each A In .Range("B2:B" & .Range("A1").End(xlDown).Row)

'Vérifie si le nom n'est pas une erreur, n'est pas vide
'n'a pas déjà été récupéré, ne contient pas "contrepasser"
Valide = True
If IsError(A) Then
Valide = False ' on n'y met pas les valeurs d'erreur
ElseIf Len(A) = 0 Then
Valide = False
ElseIf Table.Exists(A.Value) Then
Valide = False
Else ' test spécial
If InStr(LCase(A), "contrepasser") > 0 Then Valide = False
End If

If Valide Then Table.Add A.Value, j: j = j + 1 'rajoute
Next
End With

For i = 0 To Table.Count - 1
Debug.Print Table.Keys(i)
ListBox1.AddItem (Table.Keys(i))
Next i
Set Table = Nothing ' Nettoyage
End Sub
' *******************

Salutations,

Daniel M.

"Clément Marcotte" wrote in message
news:
Bonjour,

Au bureau, j'ai eu besoin d'extraire, pour un filtre élaboré avec une
macro, une liste unique de noms répétés dans une colonne de feuille de
calcul Excel. J'avais bien une vieille affaire à la maison, qui aurait
pu faire l'affaire, mais je ne me souviens plus où je l'avais mise, et
je n'avais pas envie d'attendre.

J'ai eu l'idée, d'utiliser l'objet Dictionnary de l'environnement des
scripts pour récupérer la liste de noms sans doublons, pour nourrir le
ListBox.


Avatar
Stephane Royer
Bonjour à tous


Je me demandais à quoi pouvait bien servir cette librairie ;-)
Bien Pratique ! C'est un bon tips ça.


Bon après-midi

STéphane