Afficher les lignes correspondant au résultat de recherche dans une ListBox

Bonjour à tous,

Je viens vers vous aujourd'hui pour une question sur les ListBox. En effet, j'ai mis en place un formulaire de recherche sur mon classeur qui me permets de faire une recherche de dossiers, une extraction, ajouter un dossier etc....

La question concerne la recherche et le résultat. Après avoir effectuer une recherche sur mon formulaire, le résultat s'affiche bel et bien mais le souci c'est que le total ne correspond pas au résultat mais au nombre de ligne total dans mon tableau de la feuille "Base".

Quelqu'un sait comment faire pour que la ListBox ne prennent pas en compte les lignes vides ?

Merci d'avance

12vba-exemple.xlsm (97.50 Ko)

Bonjour

C'est la suite de ce lien ? https://forum.excel-pratique.com/excel/partage-d-un-fichier-vba-contenant-un-userform-185070

Edit : Je vous avais donné le code. En fait , dans le code de recherche la ligne txttotal = lig n'est pas placé comme je vous l'ai indiqué dans le point 4 de ce lien --> https://forum.excel-pratique.com/s/goto/1148378

Comme vous verrez elle doit être placée avant le END SUB

Vous avez d'ailleurs rajouté à la fin du code ces lignes qui ne servent pas. Supprimez-les et vous n'avez plus le problème

    If TextBox1.value <> "" Then
        lstDossier.List = tablo()
        txtTotal.value = UBound(tablo, 1)
    End If

Autre point : Vous avez également ajouté une macro Combobox_enter qui supprime le total lorsque vous chargez l'USF.
Cela pose aussi un souci. Je ne comprends pas l'utilité de cette Macro. Vous pouvez la supprimer aussi. La combobox_change est suffisante.

Bonjour

Tu avais presque tout fait...

Ci joint ma solution

17vba-exemple.xlsm (93.88 Ko)

A+ François

annulé

Bonjour Dan et FanFan,

Dan, en effet c'est bien la suite de ce lien.

Merci à vous deux, en suppriment cette macro, vos deux solutions fonctionne.

J'ai été guidé par chatgpt pour mettre en place certaines fonctionnalités dans mon formulaire. Comme quoi, cela ne fait pas tout.

Merci à vous deux et bonne soirée

Re,

A la fin du code Private Sub btnRechercher_Click(), vous pouvez aussi remplacer

txtTotal = lig

par ceci

txtTotal = lstDossier.ListCount

Mais les 4 lignes de code if textbox1 <> ....... mentionnées dans mon post précédent sont toujours à supprimer bien sûr

Merci Dan, cela fonctionne maintenant.

Cependant, je viens tout juste de remarquer un autre problème.

Quand j'exporte le résultat trouvé sur le nouveau classeur en cliquant sur le bouton - la première ligne de la ListBox n'est pas sur le nouveau tableau.

Savez vous quelle partie du code cause ce problème ?

Quand j'exporte le résultat trouvé sur le nouveau classeur en cliquant sur le bouton - la première ligne de la ListBox n'est pas sur le nouveau tableau.

Oui parce que par défaut la première ligne est toujours la ligne 0 dans une listbox. Modifiez ces ligne dans le code Private Sub ExporterDonnees()

' Copier les données
    'ligne = 2 ' Commencer à la deuxième ligne
    For ligne = 0 To UBound(donneesExport, 1)
        For colonne = 1 To lstDossier.ColumnCount
            With nouvelleFeuille
                .Cells(ligne + 2, colonne).value = donneesExport(ligne, colonne - 1)
                .Cells(ligne + 2, colonne).HorizontalAlignment = xlCenter 'Centrer les données

                'Formater la colonne B au format
                If colonne = 2 Then
                    .Cells(ligne + 2, colonne).NumberFormat = "000 \ 00 \ 0000"
                End If
            End With
        Next colonne
    Next ligne

Rem :
- Pourquoi formatezvous la colonne B qui reprend le nom. Ce ne serait pas la colonne A plutôt ? (j'ai mis une mention en regarde de la ligne if colonne = 2...
- Vous pouvez déclarer Dim colonne as byte plutot que Dim colonne as long. Vous n'avez que 11 colonnes, autant prendre la variable la plus petite au niveau mémoire excel.
Idem pour Ligne que vous pourriez déclarer Integer plutot que Long

Bonjour Dan,

Merci pour la réponse, cela fonctionne parfaitement.

En ce qui concerne le formatage de la colonne B cela est valable pour le vrai classeur qui reste confidentiel, j'ai juste oublier de supprimer cette ligne pour ce classeur qui n'est qu'un brouillon.

Etant donné que le vrai classeur contient 22 colonnes dans la Feuille (Base) mais seulement 11 dans la ListBox est-il quand même recommandé de déclarer Dim colonne as byte et Ligne as Integer ?

Merci et bonne semaine à vous.

Cordialement

Bonjour,

Etant donné que le vrai classeur contient 22 colonnes dans la Feuille (Base) mais seulement 11 dans la ListBox est-il quand même recommandé de déclarer Dim colonne as byte et Ligne as Integer ?

Oui absolument. Avec Byte vous pourriez aller jusque 256 colonnes, avec integer jusqu'à 32768 lignes...
Une petite aide ici pour en savoir en peu plus sur la déclaration des variables --> https://www.excel-pratique.com/fr/vba/variables

Cordialement

C'est fait ! Merci beaucoup pour votre aide

Rechercher des sujets similaires à "afficher lignes correspondant resultat recherche listbox"