Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Microsoft 365 Supprimer doublons après recherche dans la ListBox

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
 

jmfmarques

XLDnaute Accro
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:

Jems85

XLDnaute Nouveau
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
 

Jems85

XLDnaute Nouveau
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

  • Q23 V2.5.xlsm
    93.7 KB · Affichages: 11

cp4

XLDnaute Barbatruc
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.
 

cp4

XLDnaute Barbatruc

Jems85

XLDnaute Nouveau
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
 

cp4

XLDnaute Barbatruc
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
 

patricktoulon

XLDnaute Barbatruc
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
 

ChTi160

XLDnaute Barbatruc
Bonjour jems85
Bonjour le Fil cp4 ,Patrick
Bonjour le Forum
Une approche perfectible Lol
je passe par le Tableau des Données , pour la recherche plutôt que par La méthode "Find"
Jean marie
 

Pièces jointes

  • Q23 V2.5.xlsm Chti160 1.xlsm
    75.9 KB · Affichages: 10

Discussions similaires

Réponses
4
Affichages
418
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…