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 sans doublons


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2017
    Messages
    47
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2017
    Messages : 47
    Par défaut ListBox sans doublons
    Bonjour, cela fait un moment que je laisse de côté ce problème. Je cherche à remplir une ListBox, j'y parviens sans souci.

    Le souci, c'est que je souhaite la remplir sans doublon j'ai donc créé une boucle pour supprimer les doublons. A l’exécution de la procédure, le module se met en erreur et le userform ne s'ouvre pas. Un message indique : "Incompatibilité de type"


    Je suis novice et l'erreur est peut être évidente ...

    Peut être existe-il un moyen plus simple de remplir une listBox sans doublon... ?


    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
    41
    42
    43
    44
    45
    46
     
     
    Sub remplir ListBox
     
    Dim i As Integer, Derlig As Integer
    ListBox1.Clear
      x = ActiveSheet.Name
    With Sheets(x)
    Derlig = .Cells(65536, 1).End(xlUp).Row
        For i = 12 To Derlig
            ListBox1.AddItem .Cells(i, 1).Value
        Next i
        End With
     
     
    SupDoubles ListBox1
     
     
    End sub 
     
     
    Private Sub SupDoubles(ListBox1 As ListBox)
    'Supprimer les doublons de la list box 1
     
         Dim iPos As Integer
     
         iPos = 0
         'Si la listbox est vide il quitte la fonction
         If ListBox1.ListCount < 1 Then Exit Sub
     
         Do While iPos < ListBox1.ListCount
         ListBox1.Text = ListBox1.List(iPos)
         'Verifie si le text existe deja
     
         If ListBox1.ListIndex <> iPos Then
         'Si c'est le cas il supprime et garde la position iPos...
         ListBox1.RemoveItem iPos
         Else
         'Si ce n'est pas le cas il change la position iPos...
         iPos = iPos + 1
         End If
         Loop
         'Utiliser pour désélectionner la dernière ligne
         ListBox1.Text = "-"
     
    End Sub

  2. #2
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Inscrit en
    Juillet 2007
    Messages
    14 684
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 684
    Par défaut
    Salut,

    Dans le ruban, onglet Donnees =>Supprimer les doublons

    Utilise l'enregistreur de macro pour voir le code genere.

    Ton processus global se deroulerait ainsi :
    - copie des donnees brut dans une nouvelle zone de cellules
    - supprimer doublons dans la nouvelle zone
    - utiliser les donnees pour alimenter (donc sans doublon) ta listbox
    Cycle de vie d'un bon programme :
    1/ ça fonctionne 2/ ça s'optimise 3/ ça se refactorise

    Pas de question technique par MP, je ne réponds pas

    Mes ouvrages :
    Migrer les applications VBA Access et VBA Excel vers la Power Platform
    Apprendre à programmer avec Access 2016, Access 2019 et 2021

    Apprendre à programmer avec VBA Excel (3e édition)
    Prise en main de Dynamics 365 Business Central

    Coffrets disponibles de mes ouvrages : https://www.editions-eni.fr/jean-philippe-andre
    Pensez à consulter la FAQ Excel et la FAQ Access

    Derniers tutos
    Excel et les paramètres régionaux
    Les fichiers Excel binaires : xlsb,

    Autres tutos

  3. #3
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    Une autre approche est d'alimenter ta listbox sans doublons dès ta première boucle

    Exemple en utilisant la formule NB.SI(A12:Axx;Axx) ou xx est le numéro de la ligne de notre boucle. Si =1 on ajoute, sinon, il est doublon et déjà ajouté

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Private Sub UserForm_Initialize()
    Dim DerLig As Long, i As Long
     
    With Worksheets("Feuil1")    'à adapter
        DerLig = .Cells(.Rows.Count, 1).End(xlUp).Row
        If DerLig >= 12 Then
            For i = 12 To DerLig
                If Evaluate("COUNTIF(A12:A" & i & ",A" & i & ")") = 1 Then Me.ListBox1.AddItem .Range("A" & i).Value
            Next i
        End If
    End With
    End Sub

  4. #4
    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,

    La méthode la + rapide

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    Private Sub UserForm_Initialize()
      Set f = Sheets("xxxx")
      Set mondico = CreateObject("Scripting.Dictionary")
      a = f.Range("A2:A" & f.[A65000].End(xlUp).Row) ' tableau a(n,1) pour rapidité
      For i = LBound(a) To UBound(a)
        If a(i, 1) <> "" Then mondico(a(i, 1)) = ""
      Next i
      Me.ListBox1.List = MonDico.keys
    End Sub
    Boisgontier

  5. #5
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2017
    Messages
    47
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2017
    Messages : 47
    Par défaut
    C'est génial merci beaucoup !!!

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

Discussions similaires

  1. [Débutant] Copie items sélectionnés listbox sans doublon
    Par RKYDA dans le forum VB.NET
    Réponses: 4
    Dernier message: 19/06/2012, 17h11
  2. [MySQL] listbox sans doublon avec disabled
    Par akara dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 23/03/2009, 16h17
  3. listbox sans doublons
    Par casefayere dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 26/02/2009, 23h14
  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