IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

listbox multicolonne sans doublon [XL-2007]


Sujet :

Macros et VBA Excel

  1. #21
    Membre Expert Avatar de Thautheme
    Homme Profil pro
    salarié
    Inscrit en
    Août 2014
    Messages
    1 373
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : salarié

    Informations forums :
    Inscription : Août 2014
    Messages : 1 373
    Par défaut
    Bonjour le fil, bonjour le forum,

    Peut-être comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    Private Sub UserForm_Initialize() 'à l'initialisation de l'userForm
    Dim O As Worksheet 'déclare la variable O (Onglet)
    Dim TC As Variant 'déclare la variable TC (Tableau de Cellules)
    Dim D As Object 'déclare la variable D (Dictionnaire)
    Dim I As Integer 'déclare la variable I (Incrément)
    Dim TMP As Variant 'déclare la variable TMP (tableau TeMPoraire)
     
    Me.ListBox1.ColumnCount = 2 'définit le nombre de colonnes de la Listbox1
    Set O = Sheets("Feuil1") 'définit l'onglet O (à adaper)
    TC = O.Range("A1").CurrentRegion 'définit le tableau de cellules TC
    Set D = CreateObject("Scripting.Dictionary")
    For I = 2 To UBound(TC, 1) 'boucle sut toutes les lignes I du tableau de cellules TC (en partant de la seconde)
        D(TC(I, 1) & "/" & TC(I, 2)) = "" 'alimente le dicionnaire D avec la donnée colonne 1 séparée de "/" de la donnée de la colonne 2
    Next I 'prochaine ligne de la boucle
    TMP = D.keys 'récupere dans le tableau temporaire TMP la liste du dictionnaire D sans doublon
    Call tri(TMP, LBound(TMP, 1), UBound(TMP, 1)) 'tri alphabétique (par rapport à la colonne 1 du tableau TMP)
    For I = 0 To UBound(TMP, 1) 'boucle sur toutes les données (triées et sans doublon) du tableau temporaire TMP
        With Me.ListBox1 'prend en compte la ListBox1
            .AddItem 'ajoute l'élément
            .Column(0, .ListCount - 1) = Split(TMP(I), "/")(0) 'récupère dans la colonne 0 de la ListBox1 la donnée de la première colonne du tableau TC
            .Column(1, .ListCount - 1) = Split(TMP(I), "/")(1) 'récupère dans la colonne 1 de la ListBox1 la donnée de la seconde colonne du tableau TC
        End With 'fin de la prise en compte de la ListBox1
    Next I 'prochaine donnée de la boucle
    End Sub
     
     
    Sub tri(a, gauc, droi) ' Quick sort tiré du site de Jacques BOISGONTIER : http://boisgontierjacques.free.fr/pages_site/Dictionnaire.htm
    ref = a((gauc + droi) \ 2)
    g = gauc: D = droi
    Do
        Do While a(g) < ref: g = g + 1: Loop
        Do While ref < a(D): D = D - 1: Loop
        If g <= D Then
            temp = a(g): a(g) = a(D): a(D) = temp
        g = g + 1: D = D - 1
        End If
    Loop While g <= D
    If g < droi Then Call tri(a, g, droi)
    If gauc < D Then Call tri(a, gauc, D)
    End Sub

  2. #22
    Membre confirmé
    Femme Profil pro
    controleur de gestion
    Inscrit en
    Novembre 2012
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : controleur de gestion
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2012
    Messages : 53
    Par défaut
    Bon le tri c pas encore cela mais c'etait la cerise sur le gateau

    c'est drole j'etais sur meme site mais mon decodeur n'a pas marche

    Par contre, j'ai du definir les variables de la sub tri en variant ( je sais pas si c'est le bon choix mais cela passe)

    Merci a tous

    (Je marquerai resolu quand mon decodeur aura viree au vert pour le tri)
    edit: resolu, c'est le format de ma liste que la function tri ne comprend pas

  3. #23
    Membre extrêmement actif
    Homme Profil pro
    Inscrit en
    Septembre 2013
    Messages
    1 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2013
    Messages : 1 369
    Par défaut
    Bonjour,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
     
    Dim f, a()
    Private Sub UserForm_Initialize()
      Set f = Sheets("bd")
      a = f.Range("A2:D" & f.[B65000].End(xlUp).Row).Value
      Set d = CreateObject("Scripting.Dictionary")
      Dim Tbl(1 To 2)
      For i = 1 To UBound(a)
        Tbl(1) = a(i, 1)
        Tbl(2) = a(i, 2)
        d(a(i, 1) & a(i, 2)) = Tbl
      Next i
      Dim b(): ReDim b(1 To 2, 1 To d.Count)
      i = 0
      For Each c In d.keys
        i = i + 1
        b(1, i) = d(c)(1)
        b(2, i) = d(c)(2)
      Next c
      Me.ListBox1.List = Application.Transpose(b)
    End Sub

    Compatible MAC avec Collection au lieu de Dictionary


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
     
    Private Sub UserForm_Initialize()
      Set f = Sheets("bd")
      a = f.Range("A2:D" & f.[A65000].End(xlUp).Row).Value
      Dim collect As New Collection
      Dim Tbl(1 To 2)
      On Error Resume Next
      For i = 1 To UBound(a)
        Tbl(1) = a(i, 1)
        Tbl(2) = a(i, 2)
        collect.Add Tbl, Key:=a(i, 1) & a(i, 2)
      Next i
      On Error GoTo 0
      Dim b(): ReDim b(1 To 2, 1 To collect.Count)
      For i = 1 To collect.Count
          b(1, i) = collect(i)(1)
          b(2, i) = collect(i)(2)
      Next i
      Me.ListBox1.List = Application.Transpose(b)
    End Sub

    Version triée PC


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
     
    Dim f, a()
    Private Sub UserForm_Initialize()
      Set f = Sheets("bd")
      a = f.Range("A2:D" & f.[B65000].End(xlUp).Row).Value
      Set d = CreateObject("Scripting.Dictionary")
      Dim Tbl(1 To 2)
      For i = 1 To UBound(a)
        Tbl(1) = a(i, 1)
        Tbl(2) = a(i, 2)
        d(a(i, 1) & a(i, 2)) = Tbl
      Next i
      Dim b(): ReDim b(1 To 2, 1 To d.Count)
      i = 0
      For Each c In d.keys
          i = i + 1
          b(1, i) = d(c)(1)
          b(2, i) = d(c)(2)
      Next c
      Dim temp(): temp = Application.Transpose(b)
      Call Tri(temp, 1, LBound(temp), UBound(temp))
      Me.ListBox1.List = temp
    End Sub
     
    Sub Tri(a(), ColTri, gauc, droi) ' Quick sort multi-colonnes
      ref = a((gauc + droi) \ 2, ColTri)
      g = gauc: d = droi
      Do
        Do While a(g, ColTri) < ref: g = g + 1: Loop
        Do While ref < a(d, ColTri): d = d - 1: Loop
        If g <= d Then
           For k = LBound(a, 2) To UBound(a, 2)
             temp = a(g, k): a(g, k) = a(d, k): a(d, k) = temp
           Next k
           g = g + 1: d = d - 1
        End If
      Loop While g <= d
      If g < droi Then Call Tri(a, ColTri, g, droi)
      If gauc < d Then Call Tri(a, ColTri, gauc, d)
    End Sub


    Jacques Boisgontier
    Fichiers attachés Fichiers attachés

  4. #24
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut re pas sur du resultat
    Bonjour Jacques
    je n'en suis pas sur MAIS:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    d(a(i, 1) & a(i, 2)) = Tbl
    tbl représentant un tableau de 1 ligne sur 2 colonnes contenant les deux cellules de la ligne ide la plage en paramètre
    ne risque t il pas d'y avoir de doublons inter colonne???????
    a moins que le dico fasse son travail et annule cet item de son count tout seul ???????
    au quel cas des items seraient manquant ??????????
    exemple : une liste de prénoms
    jacques -Patrick
    Patrick -tautheme
    scoulibri -jacques
    si le dico considère qu'une valeur dans un item qui est égal a une valeur qui est dans un key est un doublons alors il le supprime
    cela voudrait dire que nous nous retrouverions avec un dico de 1 ligne

    si ca n'est pas le cas
    nous aurions des doublons inter colonnes
    exemple jacques en (1,1) et jacques en (2,3)
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. [XL-2007] Remplir une liste multicolonne sans doublon
    Par LeForestier dans le forum Contribuez
    Réponses: 0
    Dernier message: 15/08/2009, 11h40
  2. listbox sans doublons
    Par casefayere dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 26/02/2009, 23h14
  3. Réponses: 0
    Dernier message: 15/01/2009, 13h00
  4. listbox sans doublons
    Par abouhossam dans le forum Macros et VBA Excel
    Réponses: 18
    Dernier message: 22/10/2008, 19h13
  5. ListBox sans Doublons
    Par pobrouwers dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 20/02/2007, 18h41

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo