IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Recherche intuitive textBox et affichage dans listbox avec condition


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Employé
    Inscrit en
    Août 2017
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Employé

    Informations forums :
    Inscription : Août 2017
    Messages : 32
    Par défaut Recherche intuitive textBox et affichage dans listbox avec 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.
    Fichiers attachés Fichiers attachés

  2. #2
    Membre extrêmement actif
    Homme Profil pro
    Inscrit en
    Septembre 2013
    Messages
    1 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2013
    Messages : 1 369
    Par défaut
    Bonjour,


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


    Boisgontier
    Fichiers attachés Fichiers attachés

  3. #3
    Membre averti
    Homme Profil pro
    Employé
    Inscrit en
    Août 2017
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Employé

    Informations forums :
    Inscription : Août 2017
    Messages : 32
    Par défaut
    Désolé pour la réponse tardive....Merci Jacques

    Cependant, avec une BD originale de plus de 50.000 lignes, je souhaiterais pouvoir, depuis un textbox, effectuer une recherche du type "*" & Me.ComboBox2 & "*" et ce, quelle que soit la colonne de recherche (code, dénomination...).

    Pourriez-vous m'éclairer ?

    Merci d'avance

  4. #4
    Membre extrêmement actif
    Homme Profil pro
    Inscrit en
    Septembre 2013
    Messages
    1 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2013
    Messages : 1 369
    Par défaut
    Bonsoir,


    Exemple de recherche multi-mots multi-colonnes:

    Fait avec un pgm générique(Il faut adapter ces lignes)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
       Set f = Sheets("THESES")
       ColVisu = Array(1, 2, 3, 4, 5, 6)       ' colonnes à visualiser
       colInterro = Array(1, 2, 3, 4, 5)       ' colonnes à interroger
       Set Rng = f.Range("A2:F" & f.[a65000].End(xlUp).Row)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    Dim f, choix(), Rng, BD(), Ncol, ColVisu()
    Private Sub UserForm_Initialize()
       Set f = Sheets("THESES")
       ColVisu = Array(1, 2, 3, 4, 5, 6)       ' colonnes à visualiser
       colInterro = Array(1, 2, 3, 4, 5)       ' colonnes à interroger
       Set Rng = f.Range("A2:F" & f.[a65000].End(xlUp).Row)
       BD = Rng.Value
       Ncol = UBound(ColVisu) + 1
       '-- en têtes de colonne ListBox
       x = Me.ListBox1.Left + 8
       Y = Me.ListBox1.Top - 12
       For Each k In ColVisu
         Set Lab = Me.Controls.Add("Forms.Label.1")
         Lab.Caption = f.Cells(1, k)
         Lab.Top = Y
         Lab.Left = x
         x = x + f.Columns(k).Width * 0.9
         temp = temp & f.Columns(k).Width * 0.9 & ";"
       Next
       temp = Left(temp, Len(temp) - 1)
       Me.ListBox1.ColumnCount = UBound(ColVisu) + 1
       Me.ListBox1.ColumnWidths = temp
       '---
       ReDim choix(1 To UBound(BD))
       For i = LBound(BD) To UBound(BD)
         For Each k In colInterro
           choix(i) = choix(i) & BD(i, k) & "|"
         Next k
       Next i
       '--- valeurs initiales dans ListBox
       Dim Tbl(): ReDim Tbl(1 To UBound(BD), 1 To Ncol)
       For i = 1 To UBound(BD)
          C = 0
          For Each k In ColVisu
            C = C + 1: Tbl(i, C) = BD(i, k)
          Next k
       Next i
       'TriMultiCol Tbl, LBound(Tbl), UBound(Tbl), 1
       Me.ListBox1.List = Tbl
       Me.Label1.Caption = Me.ListBox1.ListCount & " Ligne(s)"
    End Sub
     
    Private Sub TextBox1_Change()
      If Me.TextBox1 <> "" Then
         mots = Split(Trim(Me.TextBox1), " ")
         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 b(1 To UBound(Tbl) + 1, 1 To Ncol)
            For i = LBound(Tbl) To UBound(Tbl)
              a = Split(Tbl(i), "|")
              For k = 1 To Ncol: b(i + 1, k) = a(k - 1): Next k
            Next i
            Me.ListBox1.List = b
            Me.Label1.Caption = UBound(Tbl) + 1 & " Ligne(s)"
         Else
            Me.ListBox1.Clear
         End If
      Else
         UserForm_Initialize
      End If
    End Sub
    Nom : Sans titre.png
Affichages : 1052
Taille : 29,9 Ko

    Boisgontier
    Fichiers attachés Fichiers attachés

  5. #5
    Membre averti
    Homme Profil pro
    Employé
    Inscrit en
    Août 2017
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Employé

    Informations forums :
    Inscription : Août 2017
    Messages : 32
    Par défaut
    Merci pour votre retour rapide Jacques.

    Après adaptation, le code fonctionne mais il manque encore un filtre important (voir mon premier post).

    La Listbox ne peut afficher que les lignes dont la valeur en colonne V est égale à "9999" ->
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Application.WorksheetFunction.CountIf(FL2.Range("S2:S" & FL2.Range("F" & Rows.count).End(xlUp).Row), "=9999")
    Je n'arrive pas à insérer cette condition dans le code fourni.

    Vincent

  6. #6
    Membre extrêmement actif
    Homme Profil pro
    Inscrit en
    Septembre 2013
    Messages
    1 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2013
    Messages : 1 369
    Par défaut
    >La Listbox ne peut afficher que les lignes dont la valeur en colonne V est égale à "9999"

    -C'est curieux, sur votre fichier, je ne vois pas de 9999 en colonne V.
    -Il suffit de filtrer la table BD()

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    Option Compare Text
    Private Sub UserForm_Initialize()
      Set f = Sheets("bd")
      BD = f.Range("A2:D" & f.[A65000].End(xlUp).Row).Value
      ville = "Paris"
      Set Rng = f.Range("C2:C" & f.[C65000].End(xlUp).Row)
      n = Application.CountIf(Rng, ville)
      Dim TblDest(): ReDim TblDest(1 To n, 1 To UBound(BD, 2))
      j = 0
      For i = 1 To UBound(BD)
        If BD(i, 3) = ville Then
          j = j + 1
          For k = 1 To UBound(BD, 2): TblDest(j, k) = BD(i, k): Next k
        End If
      Next i
      Me.ListBox1.ColumnCount = 4
      Me.ListBox1.ColumnWidths = "50;30;30;50"
      Me.ListBox1.List = TblDest
    End Sub
    Boisgontier
    Fichiers attachés Fichiers attachés

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Débutant] Affichage tri dans Listbox avec VB2010
    Par merymad69 dans le forum VB.NET
    Réponses: 4
    Dernier message: 01/02/2016, 10h29
  2. Recherche dans ListBox avec saisie dans textbox
    Par ilyes.sferi dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 30/10/2015, 14h46
  3. problème d'affichage dans ruby avec ajax
    Par Lunardirc dans le forum Ruby on Rails
    Réponses: 2
    Dernier message: 23/06/2008, 14h59
  4. Mauvais affichage dans listBox
    Par moilou2 dans le forum IHM
    Réponses: 30
    Dernier message: 16/03/2008, 19h19
  5. Aucun affichage dans formulaire avec onglet
    Par Daniel MOREAU dans le forum Access
    Réponses: 4
    Dernier message: 04/12/2006, 17h59

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo