XL 2016 Plusieurs recherche sur une listbox

  • Initiateur de la discussion Initiateur de la discussion dgeo27
  • Date de début Date de début

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 !

dgeo27

XLDnaute Junior
Bonjour,

J'ai actuellement une Listbox qui m'affiche des informations d'articles liée à Textbox1 (pour la recherche de base) pour rechercher uniquement par l'intitulé de l'article.

VB:
Private Sub TextBox1_Change()
  Dim DerLigne&, Ligne&
  ListBox1.Clear
  With Worksheets("Tarification")
    DerLigne = .Cells(Rows.Count, 2).End(xlUp).Row
    For Ligne = DerLigne To 4 Step -1
      With .Cells(Ligne, 2)
        If .Value <> 0 Then
          If InStr(LCase$(.Value), LCase$(TextBox1)) > 0 Then
            ListBox1.AddItem                                          '      colonne
            ListBox1.List(ListBox1.ListCount - 1, 0) = .Value
            ListBox1.List(ListBox1.ListCount - 1, 1) = .Offset(, 1)
'            ListBox1.List(ListBox1.ListCount - 1, 2) = .Offset(, 2)

          End If
        End If
      End With
    Next Ligne
  End With
End Sub

J'aimerais modifier mon code (sans savoir comment ...) pour recherche via plusieurs Textbox...
Textbox1 pour les intitulés
Textbox2 pour les fournisseurs
Textbox3 pour les groupes

Sans titre-1.jpg


merci pour votre aide 🙂
 
Bonjour dgeo27,

Suivant ce que vous voulez faire utilisez Or ou And avec le code :
VB:
If InStr(LCase(.Value), LCase(TextBox1)) Or InStr(LCase(.Offset(, 1)), LCase(TextBox2)) Or InStr(LCase(.Offset(, 2)), LCase(TextBox3)) Then
ou :
VB:
If InStr(LCase(.Value), LCase(TextBox1)) And InStr(LCase(.Offset(, 1)), LCase(TextBox2)) And InStr(LCase(.Offset(, 2)), LCase(TextBox3)) Then
A placer dans TextBox1_Change et pour TextBox2_Change, TextBox3_Change :
VB:
Private Sub TextBox2_Change()
TextBox1_Change
End Sub
A+
 
Bonjour,

Exemple de recherche multi-colonnes et multi-mots avec un seul TextBox.

Sans titre.png


VB:
Option Compare Text
Dim TblBD(), Choix(), NomTableau, NbCol
Private Sub UserForm_Initialize()
  NomTableau = "tableau1"                             ' adapter
  TblBD = Range(NomTableau).Value
  ReDim Choix(1 To UBound(TblBD))
  For i = LBound(TblBD) To UBound(TblBD)
     NbCol = Range(NomTableau).Columns.Count
     For k = 1 To NbCol: Choix(i) = Choix(i) & TblBD(i, k) & "|": Next k
  Next i
  Me.ListBox1.List = TblBD
  EnteteListBox
End Sub

Private Sub TextBox1_Change()
  If Me.TextBox1 <> "" Then
     mots = Split(Me.TextBox1, " ")
     Tbl = Choix
     For i = LBound(mots) To UBound(mots)
       Tbl = Filter(Tbl, mots(i), True, vbTextCompare)
     Next i
     n = UBound(Tbl) + 1
     If n > 0 Then
       ReDim Tbl2(LBound(Tbl) To n + 1, 1 To NbCol)
       For j = LBound(Tbl) To UBound(Tbl)
         a = Split(Tbl(j), "|")
         For k = 0 To 3: Tbl2(j, k + 1) = a(k): Next k
       Next j
       Me.ListBox1.List = Tbl2
      Else
       Me.ListBox1.Clear
      End If
    Else
      Me.ListBox1.List = TblBD
    End If
End Sub

Boisgontier
 

Pièces jointes

Dernière édition:
Il faut transformer la BD en tableau dynamique et que le nom du tableau soit Tableau1 (mettre sous forme de tableau).

(Vous pouvez faire un essai en copiant/collant votre BD sur mon fichier).

Boisgontier
 

Pièces jointes

Je vais essayer cela 🙂
Ensuite si je réussis à faire cela, sa sera toujours possible que je cherche pour compléter mon USF pour avoir un bouton pour rajouter des articles ? ou le fait que sa soit en tableau bloque tout ajouts ?
En gros idéalement mon USF doit pouvoir me montrer tous mes articles, que je puisse aussi en rajouter et au besoin modifier
 
Bonsoir,


Ce programme générique fonctionne pour toute BD. Il permet d'ajouter, de modifier et de supprimer.
Il suffit de copier BD /coller sur la BD existante.


Les colonnes à afficher dans la ListBox se spécifient dans:

ColCombo = Array(1, 2, 3) ' A adapter (1 à 6 colonnes maxi)
colVisu = Array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14) ' Colonnes ListBox (à adapter)
colInterro = Array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14) ' colonnes à interroger (adapter)


Boisgontier
 
Dernière édition:
Bon j'ai fait le plus simple donc copier coller les deux feuilles excels dans mon classeur et copier coller la présentation + codage sur un nouvel USF dans mon fichier
quelques adaptations et ok je valide sa fonctionne 😉

reste à modifier l'ensemble à ma guise pour que le tout me convienne ^^

Merci mille fois si j'ai des erreurs je revient ne partez pas mdr
 
- 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
  • Question Question
Microsoft 365 worksheet_change
Réponses
29
Affichages
479
Réponses
10
Affichages
799
Réponses
4
Affichages
177
Réponses
4
Affichages
505
Retour