Info - Remplir un ListBox en passant par l'objet Dictionary.
3 réponses
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
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
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
merci Clément
--
Misange migrateuse http://www.excelabo.net
==Disciplus a migré chez excelabo !======= mail : http://cerbermail.com/?k5Q8Dh2mta
"Clément Marcotte" <clement.marcotte@sympatico.ca> a écrit dans le message
de news: Oi9AyL8WDHA.1280@tk2msftngp13.phx.gbl...
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
-- 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
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.
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" <clement.marcotte@sympatico.ca> wrote in message
news:Oi9AyL8WDHA.1280@tk2msftngp13.phx.gbl...
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.
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.
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
Bonjour à tous
Je me demandais à quoi pouvait bien servir cette librairie ;-)
Bien Pratique ! C'est un bon tips ça.