CommentRécupérer 1 liste de valeur sous excel

[Résolu/Fermé]
Signaler
-
Messages postés
1953
Date d'inscription
lundi 3 mai 2010
Statut
Membre
Dernière intervention
12 août 2021
-
Bonjour,

dans un tableau du type 5 colonnes et 3 lignes

1/ /2/1/ 3
/3/5/ /6
2/3/4/5/6

j'aimerais via une fonction ou macro récupérer la liste des valeurs distinctes

le résultat dans notre exemple :
1,2,3,4,5,6 sur le range A1:E3

avez vous une idée de comment faire simplmeent ?

Merci par avance
braguy13

5 réponses

Messages postés
10156
Date d'inscription
lundi 18 octobre 2010
Statut
Membre
Dernière intervention
21 octobre 2021
2 231
bonjour
un essai
- mettre un bouton sur la feuille (boite a outils controles)
- lui affecter ce code
- selectionner la plage a traiter
- clic

Private Sub CommandButton1_Click() 
Dim c As Range 
Dim liste As String 
liste = "" 
For Each c In Selection 
  If Not (InStr(1, liste, c.Value) > 0) Then 
    liste = liste & "," & c.Value 
  End If 
Next c 
liste = Right(liste, Len(liste) - 1) 
MsgBox (liste) 
End Sub


bonne suite
En fait ma plage est fixe du type A1:E3, comment dois-je adapter ton code de ce fait ?

Merci pour ton aide
Messages postés
10156
Date d'inscription
lundi 18 octobre 2010
Statut
Membre
Dernière intervention
21 octobre 2021
2 231
re
For Each c In Range("A1:E3")
bonne suite
en fait ta fonction me retourne une liste vide
Grace à un collègue j'ai trouvé la solution :

Private Function InCollection(col As Collection, sKey As String) As Boolean

Dim bTest As Boolean

On Error Resume Next

bTest = IsObject(col(sKey))
If (Err = 0) Then
InCollection = True
Else
Err.Clear
End If

End Function

Function uniquevalues(thecells As Range) As Collection
Dim values As New Collection

For Each thecell In thecells

If Not InCollection(values, thecell.Text) Then
values.Add Item:=thecell.Value, key:=thecell.Text
End If
Next

Set uniquevalues = values

End Function

Sub test()

Set col = uniquevalues(Range("K54: N84"))

End Sub
Messages postés
1953
Date d'inscription
lundi 3 mai 2010
Statut
Membre
Dernière intervention
12 août 2021
151
Il faut effectivement utiliser des Collections pour faire des listes sans doublons.
Merci d'indiquer le sujet comme "résolu".
Messages postés
16525
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
18 octobre 2021
3 231
Il n'a y a pas que les collections: Elles sont particulièrement lentes par les activations et désactivations incessantes du gestionnaire d'erreur...
Ca nivelle par le bas en ce début d'année sur CCM.
Messages postés
1953
Date d'inscription
lundi 3 mai 2010
Statut
Membre
Dernière intervention
12 août 2021
151
Soit... on peut utiliser des Collections. Pour le nivellement, on fait ce qu'on peut...
Messages postés
16525
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
18 octobre 2021
3 231
Bonjour

à essayer
Const lig As Byte = 1 'coordonnées de départ  
Const col As Byte = 1  
Const nbre_lig As Byte = 3 'surface du tableau  
Const nbre_col As Byte = 5  
Const adresse As String = "$B$10" 'restitution cellule B10  

Sub liste_()  
Dim dico As Object  
Dim cptr_lig As Byte, cptr_col As Byte  
  
Set dico = CreateObject("scripting.dictionary")  

For cptr_lig = lig To nbre_lig + lig  
    For cptr_col = col To nbre_col + col  
        ref = Cells(cptr_lig, cptr_col)  
        If Not IsEmpty(ref) And Not dico.exists(ref) Then  
            dico.Add ref, ref  
        End If  
    Next  
      
Next  
  
Range(adresse) = Join(dico.items, ", ")  
End Sub


si tu veux une réponse avec tri dans l'ordre tu dis...
Michel