XL 2016 Comment filtrer une listbox a mesure qu'on saisie dans textbox (2 colonnes)

NolwennR

XLDnaute Nouveau
Bonjour à tous,
Comme vous vous en doutez avec le sujet ci-dessus, j'ai besoin de votre aide.
Je sais que le sujet a déjà été traité mainte et mainte fois, mais je n'arrive pas à adapter les différents codes trouvés à ma situation.
Mon projet, ce que j'ai déjà fait : pour créer une gestion de stock simple, j'ai créé un userform qui apparait en cliquant sur le bouton "nouvelle saisie" (dans la feuille "mouvements_stocks"). Dans ce userform, je saisie des données qui s'ajoutent à mon tableau "journal des entrées et des sorties (dans la feuille "mouvements_stocks"), quand je clique sur le bouton "ajouter". Jusque là, cela fonctionne.
Ce que je n'arrive pas à faire :
1. je voudrais filtrer la listbox au fur et a mesure que j'écris ma recherche dans la textbox2. Par exemple, si je commence à écrire dans la textbox2 "la", il faudrait que dans ma listbox s'affichent tous les items contenant "la" (ici : lampe, balais, calculatrice). De même, si je commence à écrire "1", il faudrait que ma listbox affiche les items contenant "1".
2. ce qui serait top, c'est que ensuite, lorsque je clic sur l'article que j'ai choisi, sa référence (colA de "BASE_ARTICLES) s'affiche dans la textbox3 "REFERENCE", et que le libellé (colB de "BASE_ARTICLES) s'affiche dans textbox4 "ARTICLE".
3. et si en plus vous me trouviez la solution pour que mon tableau "etat des stocks" s'adapte automatiquement à celui de "base articles" (c'est à dire, si j'ajoute une ligne ou que j'en supprime une, ça le fasse automatiquement dans l'autre tableau) ce serait parfait, mais je ne voudrais pas abuser non plus 😇. ce serait juste la cerise sur le gâteau.
Le code que j'ai trouvé qui se rapproche le plus de ce que je souhaite est je crois celui de Boisgontier (cf : fichier joint "formrecherchemodifajoutsup3"), mais je crois que je ne comprends pas encore suffisamment VBA pour l'adapter car même quand j'essaye de remplacer les noms de feuille ou d'objet dans le code, il y a toujours quelque chose qui ne va pas. (Il m'est même arrivé que le code le plus simple "userform.show" ne fonctionne plus😢.) Je vous joins donc mon fichier de base avec uniquement ce qui fonctionne, et mon fichier que j'ai vainement tenté de modifier avec le code pour filtrer.
Voilà, j'ai énormément besoin de votre aide. J'espère que ma demande est assez claire. Si ce n'est pas le cas, n'hésitez pas à me demander, je vais scruter mes mails pour voir vos réponses. Car même si je suis en congés, je n'aime pas rester sur un problème sans trouver la solution.
Donc merci d'avance,
Nolwenn
 

Pièces jointes

  • formrecherchemodifajoutsup3.zip
    105 KB · Affichages: 19
  • GESTION_STOCK_AVEC_CODE_AUTRE.xlsm
    49.4 KB · Affichages: 14
  • GESTION_STOCK_BASE.xlsm
    48.8 KB · Affichages: 11

GALOUGALOU

XLDnaute Accro
RE NolwennR bonjour le forum

Difficile d'expliquer les codes que je n'ai pas conçu, mais il me semble que votre formulaire n'est pas initialisé.
pour l'exemple, J'ai par le passé, eu comme vous, recourt au code de M boisgontier, ce qui m'avait permis de mettre au point un formulaire avec listbox, que j'ai adapté à votre classeur.

Dans la feuille base_articles, un bouton ouvre un formulaire.
Vous avez la possibilité de filtrer sur la colonne 1, 2, ou3. vous pouvez filtrer grâce à une textbox de recherche.
Vous pouvez trier sur n'importe quelle colonne. Vous pouvez imprimer les données visibles sur la listbox.
Vous pouvez, ajouter, modifier, supprimer, une ligne
Avec cet exemple très adaptable à votre formulaire, vous devriez pouvoir faire évoluer votre projet
cdt
galougalou
 

Pièces jointes

  • TEST LISTBOX.xlsm
    88.8 KB · Affichages: 13

NolwennR

XLDnaute Nouveau
RE NolwennR bonjour le forum

Difficile d'expliquer les codes que je n'ai pas conçu, mais il me semble que votre formulaire n'est pas initialisé.
pour l'exemple, J'ai par le passé, eu comme vous, recourt au code de M boisgontier, ce qui m'avait permis de mettre au point un formulaire avec listbox, que j'ai adapté à votre classeur.

Dans la feuille base_articles, un bouton ouvre un formulaire.
Vous avez la possibilité de filtrer sur la colonne 1, 2, ou3. vous pouvez filtrer grâce à une textbox de recherche.
Vous pouvez trier sur n'importe quelle colonne. Vous pouvez imprimer les données visibles sur la listbox.
Vous pouvez, ajouter, modifier, supprimer, une ligne
Avec cet exemple très adaptable à votre formulaire, vous devriez pouvoir faire évoluer votre projet
cdt
galougalou
Bonjour,
Tout d'abord, merci beaucoup de votre réponse. Mais ma demande n'était peut-être pas assez explicite, donc ça ne répond pas tout à fait à mes besoins.
En fait, ce dont j'ai besoin, c'est que la personne qui gère le stock puisse saisir dans le formulaire "nouvelle saisie" une entrée ou une sortie de stock et que, en cliquant sur ajouter, cela ajoute le mouvement de stock au tableau.
Il faudrait donc que la recherche se fasse dans ce même formulaire si c'est possible, pour pas avoir à naviguer entre les formulaires, car le but est que même quelqu'un qui ne maîtrise pas l'informatique puisse le faire.
Est-il possible donc de faire la recherche dans la textbox2 du formulaire "nouvelle saisie"?
Merci d'avance,
Cdt,
Nolwenn
 

GALOUGALOU

XLDnaute Accro
re nolwen
Tout est possible à partir du formulaire fourni fil2 (ce n'est qu'un exemple) même une nouvelle saisie, le bouton valider vérifie si la référence existe, si oui elle modifie, si non elle ajoute une nouvelle référence.
il suffit d'adapter les codes à la feuille souhaitée .
j'essaierai de vous présenter cela un peu plus tard.
cdt
galougalou
 

ChTi160

XLDnaute Barbatruc
Bonsoir NolwennR
Bonsoir le Fil

Histoire de vous saluer Lol
J'ai ajouté la selection , si qu'une Ligne dans ListBox1
VB:
Sub ConcordanceAvec(modèle)
   'dans ListBox1, on ne conserve que les lignes répondant au modèle (TextBox2)
   LectureArticle    '(on lit le tableau des produits)
   TextBox3 = "": TextBox4 = ""   'raz
  With ListBox1
        .List = tArt    'on affecte l'ensemble des articles à ListBox1
   'on va retirer de la liste, les lignes qui ne sont pas en concordance avec le modèle
   For i = .ListCount - 1 To 0 Step -1     'on parcourt les lignes de Listbox1 en commençant par le bas
      'si la ligne ne correspond au modèle, on l'efface
      If Not (.List(i, 0)) Like LCase("*" & modèle & "*") Then .RemoveItem i
'**************************************'
  If .ListCount = 1 Then .Selected(0) = True 'On sélectionne si qu'une Ligne
                             .Selected(0) = False ' On désélectionne (visuel)
'**************************************'
   Next i
  End With
End Sub
À voir !
Jean marie
 

NolwennR

XLDnaute Nouveau
Bonsoir @NolwennR, @GALOUGALOU, @juvaxe :)

Voir un exemple d'adaptation du contenu de ListBox1 au modèle contenu dans la zone Recherche.
  • Le code est dans le module du userform.
  • J'ai ôté tout le reste pour l'exemple.
  • J'ai mis quelques commentaires.
Bonjour @mapomme ,
Désolée, j'ai mis un peu de temps à vous répondre (débutante en forums donc je n'ai peut-être pas mis les bonnes notifications, et je n'avais pas vu la réponse plus tôt:().
En tous cas, merci beaucoup, c'est super ce que vous m'avez envoyé, cela correspond bien à ma demande🤩 et cela va me permettre de bien avancer.
Si je peux encore un peu abuser, savez-vous s'il est possible de faire la recherche sur plusieurs colonne? Par exemple, pour le nom de l'article, laisser comme tel, mais si on connait la référence, pouvoir la taper dans la zone de recherche, et l'article correspondant s'affiche (ou les articles avec le même principe que le nom : on tape une partie de la référence et ça filtre).
Ça ressemblerait à ça:
1635937105642.png

Merci d'avance,
Et encore merci pour le code déjà envoyé, et les commentaires sont super clairs.
Nolwenn
 

NolwennR

XLDnaute Nouveau
Bonsoir NolwennR
Bonsoir le Fil

Histoire de vous saluer Lol
J'ai ajouté la selection , si qu'une Ligne dans ListBox1
VB:
Sub ConcordanceAvec(modèle)
   'dans ListBox1, on ne conserve que les lignes répondant au modèle (TextBox2)
   LectureArticle    '(on lit le tableau des produits)
   TextBox3 = "": TextBox4 = ""   'raz
  With ListBox1
        .List = tArt    'on affecte l'ensemble des articles à ListBox1
   'on va retirer de la liste, les lignes qui ne sont pas en concordance avec le modèle
   For i = .ListCount - 1 To 0 Step -1     'on parcourt les lignes de Listbox1 en commençant par le bas
      'si la ligne ne correspond au modèle, on l'efface
      If Not (.List(i, 0)) Like LCase("*" & modèle & "*") Then .RemoveItem i
'**************************************'
  If .ListCount = 1 Then .Selected(0) = True 'On sélectionne si qu'une Ligne
                             .Selected(0) = False ' On désélectionne (visuel)
'**************************************'
   Next i
  End With
End Sub
À voir !
Jean marie
Bonjour @ChTi160,
Merci pour l'ajout, cela est très pratique en effet.
Bonne journée,
Nolwenn
 

NolwennR

XLDnaute Nouveau
Bonjour Nolwenn
Bonjour le Fil ,le Forum
Tu as beaucoup de références ?
Peux-tu mettre le fichier sur lequel tu travailles ?
Bonne Journée
Jean marie
Re Bonjour Jean Marie,
J'ai pas mal de référence en effet, pour le moment juste un peu plus de 300, mais il y en aura plus plus tard. Normalement pas plus de 1000 quand même.
Mon fichier en PJ (un peu modifié sur les noms mais pas dans sa structure).
Merci,
nolwenn
 

Pièces jointes

  • GESTION_DE_STOCK_MAGASIN_BASE.xlsm
    77.1 KB · Affichages: 13

ChTi160

XLDnaute Barbatruc
Re
Merci
Autres questions :
1° Combien de Fournisseur ?
2° Combien de Catégories ?
Ne pourrait-on pas faire pour aboutir à une désignation ou à une référence, faire une recherche en Cascade,
depuis ces éléments ?

Ex : Choisir un Fournisseur ou Une Catégorie et selon, affiner !

Question qui peut te semble bête Lol
Peux-tu m'expliquer la Procédure à suivre ?
Tu fais une Recherche, sur quelle feuille ?
Pour quel Résultat attendu ?
Pour Quelle Action au final?

Bonne fin de Journée
Jean marie
 
Dernière édition:

NolwennR

XLDnaute Nouveau
Re
Merci
Autres questions :
1° Combien de Fournisseur ?
2° Combien de Catégories ?
Ne pourrait-on pas faire pour aboutir à une désignation ou à une référence, faire une recherche en Cascade,
depuis ces éléments ?

Ex : Choisir un Fournisseur ou Une Catégorie et selon, affiner !
Bonne fin de Journée
Jean marie
J'y avais pensé, mais le problème c'est que lorsqu'on va saisir un article, on ne saura pas forcément a quelle catégorie il appartient, ni de chez quel fournisseur il vient.

Pour vous expliquer un peu le contexte : là ou je travaille, nous avons un "magasin" de produits d'entretien et vêtements de travail.
Comme il nous est impossible d'avoir quelqu'un en permanence, les collègues peuvent se servir et notent sur une feuille l'article qu'ils prennent. Sauf qu'ils ne connaissant pas l’intitulé exact de l'article.
Donc par exemple, ils vont noter "gant blanc T6/7", et la personne qui devra ensuite saisir les mouvements de stock (ce ne sera pas moi) ne saura pas si c'est en "vêtements de travail" ou en "protection individuelle".
A terme, nous allons faire en sorte qu'ils puissent noter la référence de l'article mais je souhaite conserver la recherche par nom car il y aura peut-être des oublis, et s'il y a des inversions de chiffres par exemple, on pourra quand même retrouver l'article.

Sinon, pour répondre quand même aux questions, pas plus de 20 fournisseurs, et pas plus de 100 catégories. Au cas ou avec toutes ces infos vous ayez une autre solution à proposer ;).

Merci,
Nolwenn
 

Statistiques des forums

Discussions
298 015
Messages
1 965 154
Membres
200 866
dernier inscrit
Moucat