CommentRécupérer 1 liste de valeur sous excel

Résolu
braguy13 -  
Zoul67 Messages postés 2001 Statut Membre -
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

  1. ccm81 Messages postés 11033 Statut Membre 2 434
     
    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
  2. 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
    1. ccm81 Messages postés 11033 Statut Membre 2 434
       
      re
      For Each c In Range("A1:E3")
      bonne suite
      0
  3. braguy13
     
    en fait ta fonction me retourne une liste vide
    0
  4. 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
    1. Zoul67 Messages postés 2001 Statut Membre 149
       
      Il faut effectivement utiliser des Collections pour faire des listes sans doublons.
      Merci d'indiquer le sujet comme "résolu".
      0
    2. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
       
      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
    3. Zoul67 Messages postés 2001 Statut Membre 149
       
      Soit... on peut utiliser des Collections. Pour le nivellement, on fait ce qu'on peut...
      0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
     
    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