Microsoft 365 Supprimer doublons après recherche dans la ListBox

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

Jems85

XLDnaute Nouveau
Bonjour à tous,

Je suis nouveau sur le forum, donc si je fais quelques erreure lors de mon post, désolé d'avance 🙂

Alors j'explique mon problème :
J'ai alimenté une ListBox et créer un TextBox de recherche (recherche la valeur sur 2 colonnes), sans souci jusqu'à la.
Le problème c'est lorsque la valeur est dans les 2 colonnes, il m'affiche à double et je n'arrive toujours pas à trouver de solution malgrès que j'ai essayé d'adapter plusieurs code différent trouvé sur le net.

Voici mon bout de code de la ListBox :

VB:
Private Sub tbRecherche_Change()
Dim DerLigne&, Ligne&
ListBox1.Clear
 
With Worksheets("MaFeuille")
    DerLigne = .Cells(Rows.Count, 2).End(xlUp).Row
    For Ligne = 4 To [B65000].End(xlUp).Row

        With .Cells(Ligne, 2) 'recherche sur la 2ème colonne
            If .Value <> 0 Then
                If InStr(LCase$(.Value), LCase$(tbRecherche)) > 0 Then
                    ListBox1.AddItem .Value
                    ListBox1.List(ListBox1.ListCount - 1, 1) = .Offset(0, 2).Value
                    ListBox1.List(ListBox1.ListCount - 1, 2) = .Offset(0, 5).Value
                    'ListBox1.ColumnWidths = "250pt;60pt;60pt"
                End If
            End If
        End With
        With .Cells(Ligne, 3) 'recherche sur la 3ème colonne
            If .Value <> 0 Then
                If InStr(LCase$(.Value), LCase$(tbRecherche)) > 0 Then
                    ListBox1.AddItem .Value
                    ListBox1.List(ListBox1.ListCount - 1, 0) = .Offset(0, -1).Value
                    ListBox1.List(ListBox1.ListCount - 1, 1) = .Offset(0, 1).Value
                    ListBox1.List(ListBox1.ListCount - 1, 2) = .Offset(0, 4).Value
                    'ListBox1.ColumnWidths = "250pt;60pt;60pt"
                End If

            End If
        End With
    Next Ligne
End With
If Me.tbRecherche = "" Then Call test
End Sub

Après avoir alimenté la ma ListBox faudrait que je fasse un check et supprimer les doublons.

Merci pour votre aide.
Bonne journée
Jems
 
Bonjour
L'examen de ta boucle me laisse quelque peu dubitatif en ce qui concerne l'abondement même de ta listbox.
Pourquoi ne pas utiliser bien plus simplement l'outil de suppression de doublons qu'offre Excel ?
Méthode :
- copier la plage à traiter vers une plage P d'une feuille TREMPLIN
- appliquer la suppression de doublons à cette plage P
- abonder d'un seul coup ta listbox à partir de cette plage P

C'est ce que je ferais personnellement.
 
Dernière édition:
Bonjour,

Merci pour votre retour, mais je peux pas modifier le fichier de base à part une colonne que j'ai mis en modifiable pour l'introduction de la quantité à commander sur chaque article.

Après avoir effectué la recherche, je sélectionne l'article et la quantité, ensuite je clique sur le bouton Ajouter l'article au panier, ça doit juste remplir la colonne de la quantité d'article sur la bonne ligne d'article.

Sans la fonctionne recherche, tout fonctionne mais lorsque j'ajoute la fonctionne de recherche, le problème est qu'il ajoute l'article sur la ligne de l'index qu'il trouve dans la ListBox et pas dans la vrai ligne qui correspond avec l'article sélectionné.

Voici mon code qui arrive a trouver l'article mais qui n'ajoute pas la quantité sur la bonne ligne.

Merci pour votre aide.

VB:
Private Sub tbRecherche_Change()
If Me.tbRecherche <> "" Then
mots = Split(Trim(Me.tbRecherche), " ")
Tbl = choix
For i = LBound(mots) To UBound(mots)
    Tbl = Filter(Tbl, mots(i), True, vbTextCompare)
Next i

If UBound(Tbl) > -1 Then
    Dim b(): ReDim Preserve b(1 To UBound(Tbl) + 1, 1 To Ncol)
    For i = LBound(Tbl) To UBound(Tbl)
        TblProv = Split(Tbl(i), "*")
        For k = 1 To Ncol: b(i + 1, k) = TblProv(k - 1): Next k
    Next i
Me.ListBox1.List = b
' Me.Label1.Caption = UBound(Tbl) + 1
End If
Else
UserForm_Initialize
End If
End Sub
 
Bonjour,

Désolé, voici le fichier en question.

J'ai avancé un peu en mettant une ListView au lieu de la ListBox.
J'ai réussi à lui assigner un numéro de ligne en ajoutant une colonne qui garde la valeur.

Le seul problème que j'ai, j'aimerais que la recherche se fasse sur la colonne B et C et pas uniquement B comme maintenant (et cela sans que ça double les lignes si il trouve dans les 2 colonnes).

Merci de votre aide.

Bonne journée
 

Pièces jointes

Désolé de ne pouvoir t'aider. Ton code plante chez moi à cause de la Listview.
En effet, le mscomctl s'enregistre convenablement sur ma machine (excel 2010).
Mais, j'ai toujours un message "classefactory ne peut pas ouvrir....."
Je n'utilise que la listbox.
 
Est-ce que sur une listBox on peut mettre le numéro de ligne du fichier excel et que ce numéro reste le même après recherche? C'est ce que j'ai réussi à faire avec la listView.
Car l'index d'une listBox change après avoir filtre. Faudrait que je puisse ajouter une colonne et la mettre en largeur 0 pour qu'elle soit invisible mais que ce numéro ne change pas après filtre.

Merci
 
Oui c'est possible exemple:
VB:
ReDim Preserve Tb(1 To UBound(Tb), 1 To UBound(Tb, 2) + 1)
   For i = 1 To UBound(Tb, 1)
      Tb(i, 11) = i + 5   '5=nombre de ligne au dessus du tableau
    '11--> Tb a 10 colonnes + 1 qui recevra n° de ligne
   Next i
 
bonjour
Perso je pige rien a ce fichier
ajouter au panier renvoie le code vers une listbox1 qui n'existe pas dans le userform
en autres choses
si je comprends bien le but
c'est une interface de commande remplissant une fiche(feuille de commande) +mail outlook + envoie+piece jointe PDF
c'est bien ca ?
et ben ca en fait du ramdam pour si peu 😉
pour commencer il faudrait commencer par me dire ou est passée la listbox1😛😉
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
10
Affichages
281
Réponses
4
Affichages
177
Réponses
5
Affichages
235
  • Question Question
Microsoft 365 worksheet_change
Réponses
29
Affichages
479
Réponses
10
Affichages
799
Retour