Recherche par textbox et affichage résultat dans listbox sous condition

Bonjour à toutes et à tous,

J'ai réalisé un formulaire qui permet d'effectuer une recherche intuitive depuis un textBox et d'afficher le résultat dans la listbox.

La listbox ne peut afficher que les lignes dont la valeur en colonne V est égale à "9999".

Si je tape 2 avec recherche par code suite, la listbox m'affiche bien 3 lignes.

Par contre, si je n'encode rien ,la listbox m'affiche 1.916 lignes, ce qui n'est pas correct. Elle devrait m'en afficher 4 !

Pouvez-vous d'une part, m'éclairer à ce sujet et d'autre part, m'indiquer si les procédures utilisées sont cohérentes et optimales ?

Dans le fichier joint, j'ai du restreindre le nombre de lignes de la base de données originale (50.000 lignes sur 25 colonnes).

Merci à vous pour votre précieuse aide et conseils.

52classeur1.xlsm (303.31 Ko)

Bonjour,

Dans Sub TB_RECHERCHE_Change()

on trouve dès le début:

    Me.TB_RECHERCHE.Text = UCase(Me.TB_RECHERCHE)

    If Len(Me.TB_RECHERCHE) = 0 Then

        charger_liste
        .../...

Si on ne saisit rien dans la TextBox TB_RECHERCHE, alors Len(Me.TB_RECHERCHE) = 0, donc on lance chargerliste qui va remplir la listbox avec toute la base !

Si on ne veut plus de cette fonctionalité, supprimer ces 3 lignes sans oublier le End If qui va avec !

A+

Bonjour AlgoPlus,

Merci pour ton retour rapide

En fait, j'ai placé ce code pour la raison suivante :

Lorsque j'efface tout le contenu de TB_RECHERCHE (via backspace), ça rame et il faut plus de 15 sec avant que la listbox affiche à nouveau son contenu. En plaçant cette condition, la procédure charger_liste permet d'effacer et de recharger rapidement la listbox.

A moins d'une autre solution, j'ai tout intérêt à la laisser

Donc c'est normal que ça affiche toute la base !

Concernant charge liste, qui à priori est appelée souvent, plutôt que d' alimenter un tableau qui alimentera la listbox à chaque appel, le tableau pourrait être initialiser une fois dans la Sub UserForm_Initialize() et dans la Sub charger_liste() ne laisser que l'initialisation de la listbox.

A+

J'ai omis de spécifier que la BD originale comportait quelques doublons qu'il ne faut absolument pas effacer

Donc affichage listbox triée avec doublons des lignes dont la valeur en V = 9999

Il n'est pas question d'effacer mais seulement d'essayer d'accélérer le traitement.

Est ce qu'on ne cherche que si colonne V ="9999" ? si oui il y aurait une façon d'accélérer le traitement. Ce serait un peu plus long au démarrage (quelques secondes) mais toutes les autres recherches seraient plus rapides.

A+

Oui, dans tous les cas et quelle que soit la valeur encodée dans le textbox recherche, la listbox ne doit afficher que des lignes dont la valeur en V = 9999.

Pas grave si le traitement est plus long au démarrage

Ok, je termine, je teste et retour.

Bonjour,

Fait en 3 mn avec un pgm générique

Boisgontier

bonjour Boisgontierjacques,

@ Osaka

En fin de Sub UserForm_Initialize() ajouter

    '******** création tbld 9999
    Set f = Sheets("BD")
    DL = f.Range("F" & Rows.Count).End(xlUp).Row
    NBL = Application.WorksheetFunction.CountIf(f.Range("S2:S" & DL), "=9999")
    T = f.Range("F2:V" & DL).Value
    ReDim TblBD(1 To NBL, 1 To UBound(T, 2))
    For i = LBound(T, 1) To UBound(T, 1)
        If T(i, 14) = "9999" Then
                n = n + 1
                For k = 1 To UBound(T, 2): TblBD(n, k) = T(i, k): Next k
        End If
    Next
    Call charger_liste

et dans Sub charger_liste() , supprimer

    Set f = Sheets("BD")
    TblBD = f.Range("F2:V" & f.Range("F" & Rows.Count).End(xlUp).Row).Value

à vérifier si sur une grosse base on gagne du temps?

A+

Bonjour,

Merci AlgoPlus, ton code fonctionne parfaitement

Merci à Boisgontierjacques également.

Malheureusement, le formulaire ne propose pas la saisie intuitive dans un textbox et la listbox affiche toutes les valeurs, même celles <> 9999.

Par contre, la fonction tri par colonne m'a été très utile

Bonne journée

Rechercher des sujets similaires à "recherche textbox affichage resultat listbox condition"