CommentRécupérer 1 liste de valeur sous excel

Résolu
braguy13 -  
Zoul67 Messages postés 1959 Date d'inscription   Statut Membre Dernière intervention   -
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
A voir également:

5 réponses

ccm81 Messages postés 10909 Date d'inscription   Statut Membre Dernière intervention   2 433
 
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
0
braguy13
 
En fait ma plage est fixe du type A1:E3, comment dois-je adapter ton code de ce fait ?

Merci pour ton aide
0
ccm81 Messages postés 10909 Date d'inscription   Statut Membre Dernière intervention   2 433
 
re
For Each c In Range("A1:E3")
bonne suite
0
braguy13
 
en fait ta fonction me retourne une liste vide
0
braguy13
 
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
0
Zoul67 Messages postés 1959 Date d'inscription   Statut Membre Dernière intervention   149
 
Il faut effectivement utiliser des Collections pour faire des listes sans doublons.
Merci d'indiquer le sujet comme "résolu".
0
michel_m Messages postés 16602 Date d'inscription   Statut Contributeur Dernière intervention   3 314
 
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.
0
Zoul67 Messages postés 1959 Date d'inscription   Statut Membre Dernière intervention   149
 
Soit... on peut utiliser des Collections. Pour le nivellement, on fait ce qu'on peut...
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
michel_m Messages postés 16602 Date d'inscription   Statut Contributeur Dernière intervention   3 314
 
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
0