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 :

Modifier listBox multicolonne sans Doublon [XL-2016]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Décembre 2010
    Messages
    129
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Drôme (Rhône Alpes)

    Informations forums :
    Inscription : Décembre 2010
    Messages : 129
    Par défaut Modifier listBox multicolonne sans Doublon
    Bonjour
    J'alimente une listbox dans un userform sans doublon grâce à ce code.
    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
     
    Me.Lst_Personnel.list = Fo_SansDoublonsTrié(shF20.Range("B2:B" & shF20.Range("B2").End(xlDown).Row))
     
    Function Fo_SansDoublonsTrié(champ As Range)
    Dim i As Integer, j As Integer
    Dim témoin As Boolean
    Dim temp() As Variant
       j = 1
       ReDim temp(1 To j)
       For i = 1 To champ.Count
          témoin = Not IsError(Application.Match(champ(i), temp, 0))
          If Not témoin And champ(i) <> "" Then
          'If Not témoin And champ(i) <> "" And champ(i).EntireRow.Hidden = False Then
            ReDim Preserve temp(1 To j)
            temp(j) = champ(i)
           j = j + 1
          End If
       Next i
       Call Tri(temp, 1, j - 1)
       Fo_SansDoublonsTrié = Application.Transpose(temp)
    End Function
     
    Sub Tri(a, gauc, droi)          ' Quick sort
    Dim g As Integer, d As Integer
    Dim ref As Variant, temp As Variant
     
    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
    Ma listBox "Lst_Personnel" est définie avec sa propriété ColumnCount=2
    J'aimerai au besoin pouvoir rajouter des valeurs dans la colonne 2 mais je sèche, le code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
     
    Dim x As Integer
    Dim donne As String
        For x = 0 To me.Lst_Personnel.ListCount - 1
            donne = "toto"
            me.Lst_Personnel.Column(1, x) = donne
        Next x
    Me renvoie l'erreur impossible de finir la propriété column
    et le code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    Dim x As Integer
    Dim donne As String
        For x = 0 To me.Lst_Personnel.ListCount - 1
            donne = "toto"
            me.Lst_Personnel.list(1, x) = donne
        Next x
    Me renvoie l'erreur impossible de finir la propriété list.

    Merci de votre aide

  2. #2
    barpasc
    Invité(e)
    Par défaut
    Sans reproduire votre code, je pense que vous devez dire qu'il y a 2 colonnes dans la liste avant d'écrire dans la 2ème colonne. Je pense que cette instruction devrait faire ça:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    me.Lst_Personnel.ColumnCount = 2
    avant d'entrer dans la boucle For

    Pascal
    http://info2gestion.net

  3. #3
    Expert confirmé
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    4 128
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 4 128
    Par défaut
    Salut

    Citation Envoyé par stdonat Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
     
    Dim x As Integer
    Dim donne As String
        For x = 0 To me.Lst_Personnel.ListCount - 1
            donne = "toto"
            me.Lst_Personnel.Column(1, x) = donne
        Next x
    Me renvoie l'erreur impossible de finir la propriété column
    C'est pourtant la bonne écriture me semble-t-il.
    Tu n'aurais pas mis la propriété Locked à true ou enabled à false?

    Si tu mets un point d'arrêt F9 sur une ligne (donne = "toto" par exemple), puis que tu fais du pas à pas avec F8. Quelle est la valeur de x lors de l'apparition du message d'erreur?

    J'ai testé avec ce code, ça fonctionne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Private Sub UserForm_Click()
    ListBox1.AddItem "Essai1"
    ListBox1.AddItem "Essai2"
    ListBox1.AddItem "Essai3"
     
    Dim x As Integer
    Dim donne As String
        For x = 0 To ListBox1.ListCount - 1
            donne = "toto"
            ListBox1.Column(1, x) = donne
        Next x
     
     
    End Sub
    ++
    Qwaz

    MagicQwaz := Harry Potter la baguette en moins
    Le monde dans lequel on vit
    Ma page perso DVP
    Dernier et Seul Tutoriel : VBA & Internet Explorer
    Dernière contribution : Lien Tableau Structuré et UserForm
    L'utilisation de l’éditeur de message

  4. #4
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Décembre 2010
    Messages
    129
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Drôme (Rhône Alpes)

    Informations forums :
    Inscription : Décembre 2010
    Messages : 129
    Par défaut
    Bonjour
    Merci pour vos solutions même si elles ne marchent pas(dans mon cas) mais elles m'ont permis de comprendre mon erreur.

    En effet lorsque je charge ma listebox avec ma fonction:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Me.Lst_Personnel.list = Fo_SansDoublonsTrié(shF20.Range("B2:B" & shF20.Range("B2").End(xlDown).Row))
    ...
     
    Fo_SansDoublonsTrié = Application.Transpose(temp)
    Ma listbox se trouve attribuée avec un variant (temp)à une seule dimension...et dans ce cas il est impossible de rajouter une deuxième dimension

    la solution transposer mon tableau(trié) à une dimension dans un tableau à 2 dimensions mais c'est un peu long car obligé de passer par une boucle
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
       Dim temp2()
       ReDim temp2(1 To UBound(temp), 0 To 1)
       For i = 1 To UBound(temp)
            temp2(i, 0) = temp(i)
       Next i
     
       Fo_SansDoublonsTrié = temp2
    ensuite le code initial fonctionne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
     
    Dim x As Integer
    Dim donne As String
        For x = 0 To me.Lst_Personnel.ListCount - 1
            donne = "toto"
            me.Lst_Personnel.list(1, x) = donne
        Next x

  5. #5
    Expert confirmé
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    4 128
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 4 128
    Par défaut
    Salut

    J'ignoré cette subtilité.

    As-tu essayé comme le suggère BarPasc, de forcer de nouveau le nombre de colonne à 2 après avoir attribué ton tableau de variant? Dans les faits, peut-être que le fait d'attribué un tableau 1 dim réinitialise la dimension globale de la liste...

    ++
    Qwaz

    MagicQwaz := Harry Potter la baguette en moins
    Le monde dans lequel on vit
    Ma page perso DVP
    Dernier et Seul Tutoriel : VBA & Internet Explorer
    Dernière contribution : Lien Tableau Structuré et UserForm
    L'utilisation de l’éditeur de message

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

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

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