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 :

Filtrer les valeurs d'une ListBox (issues d'une feuiles excel) dans un UserForm [XL-2010]


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
    Chargé d'affaire
    Inscrit en
    Juillet 2014
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aube (Champagne Ardenne)

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : Conseil

    Informations forums :
    Inscription : Juillet 2014
    Messages : 17
    Par défaut Filtrer les valeurs d'une ListBox (issues d'une feuiles excel) dans un UserForm
    Bonjour à tous et merci à tous pour votre aide !

    J'ai un tableau Excel inséré dans un UserForm à l'aide d'un ListBox.
    Je cherche à ajouter un filtre dans la ListBox afin de n'afficher que les valeurs qui contiennent par exemple "325" choisie dans un TextBox.
    A terme je souhaite sélectionner une des lignes dans ce ListBox et mettre en gras la ligne correspondante dans la feuille "Essai". Cela ressemble à ça :

    Nom : 1.JPG
Affichages : 616
Taille : 28,8 Ko

    Nom : 2.JPG
Affichages : 464
Taille : 27,8 Ko

    Je me suis basé sur le code que j'ai trouvé sur cette discussion sur le forum qui m'a beaucoup aidé : Insérer un tableau excel dans un UserForm
    (Merci à eux).

    Avez vous des pistes pour pouvoir filtrer ma ListBox ?

    J'ai ajouté le fichier Excel en PJ.

    Merci d'avance pour votre aide.

    Axel


    PS :
    Voila le code source :
    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
    Private Sub CommandButton1_Click()
        With ListBox1
            For i = 0 To .ListCount - 1
                If .Selected(i) = True Then mess = mess & i + 1 + 1 & vbCrLf ' tu peut mettre 2 bien entendu
            Next
        End With
        MsgBox mess
    End Sub
    Private Sub ListBox1_Click()
        MsgBox ListBox1.ListIndex
    End Sub
    Private Sub UserForm_Activate()
        Dim plage As Range, i As Long, large
        With Sheets("Essai")
            Set plage = .Range("A1").CurrentRegion.Offset(1, 0)
            For i = 1 To plage.Columns.Count: large = large & ";" & Round(plage.Columns(i).Width): Next    ' on capture la largeur des colonnes
            large = Mid(large, 2, 200)
            With Me.ListBox1
                .RowSource = plage.Address
                .ColumnHeads = True
                .ColumnWidths = large
                .ColumnCount = plage.Columns.Count
                .ListStyle = 1
                .MultiSelect = 1
            End With
        End With
    End Sub
    Fichiers attachés Fichiers attachés

  2. #2
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Par défaut
    Bonjour,

    Une piste, remplaces les procédures correspondantes :
    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
     
    Private Sub CommandButton2_Click()
     
        Dim Cel As Range
        Dim I As Long
     
        ListBox1.Clear
     
        For Each Cel In Plage.Columns(4).Cells 'recherche seulement sur la dernière colonne de la plage
     
            If Cel.Value = TextBox1.Text Then
     
                ListBox1.AddItem Cel.Offset(, -3).Value
                ListBox1.Column(1, I) = Cel.Offset(, -2).Value
                ListBox1.Column(2, I) = Cel.Offset(, -1).Value
                ListBox1.Column(3, I) = Cel.Value
                ListBox1.Column(4, I) = Cel.Row
     
                I = I + 1
     
            End If
     
        Next Cel
     
    End Sub
     
    Private Sub ListBox1_MouseUp(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
     
        Dim I As Long
     
        Plage.Font.Bold = False
     
        For I = 0 To ListBox1.ListCount - 1
     
            Plage.Rows(ListBox1.Column(4, I) - 1).Font.Bold = ListBox1.Selected(I)
     
        Next I
     
    End Sub
     
    Private Sub UserForm_Activate()
     
        Dim I As Long, Large
     
        With Worksheets("Essai"): Set Plage = .Range(.Cells(2, 1), .Cells(.Rows.Count, 4).End(xlUp)): End With
     
        For I = 1 To Plage.Columns.Count: Large = Large & Round(Plage.Columns(I).Width) & "pt;": Next
     
        Large = Large & "0pt" 'rajoute une dimension égale à 0 pour la cacher, cette colonne contient les numéros de ligne
     
        With ListBox1
     
            .ColumnCount = Plage.Columns.Count + 1
            .ColumnWidths = Large
            .ListStyle = 1
            .MultiSelect = 1 'ne permet pas la gestion de l'événement Click() sur la ListBox !
     
        End With
     
    End Sub

  3. #3
    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,

    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
    Dim f, TblBD(), NBCol
    Option Compare Text
    Private Sub UserForm_Initialize()
      Set f = Sheets("Essai")
      Set d = CreateObject("Scripting.Dictionary")
      Set Rng = f.Range("A2:E" & f.[A65000].End(xlUp).Row)
      TblBD = Rng.Value
      NBCol = UBound(TblBD, 2) - 1
      For i = 1 To UBound(TblBD): TblBD(i, NBCol + 1) = i + Rng.Row - 1: Next i
      Me.ListBox1.List = TblBD
      Me.ListBox1.ColumnCount = 5
      Me.ListBox1.ColumnWidths = "50;30;50;50;50"
    End Sub
     
    Private Sub TextBox1_Change()
      ColRecherche = 4
      clé = "*" & Me.TextBox1 & "*"
      Dim Tbl()
      For i = 1 To UBound(TblBD)
        If TblBD(i, ColRecherche) Like clé Then
            n = n + 1: ReDim Preserve Tbl(1 To UBound(TblBD, 2), 1 To n)
            For k = 1 To UBound(TblBD, 2): Tbl(k, n) = TblBD(i, k): Next k
         End If
      Next i
      If n > 0 Then Me.ListBox1.Column = Tbl Else Me.ListBox1.List = TblBD
    End Sub
     
    Private Sub b_affiche_Click()
     f.[A1].CurrentRegion.Interior.ColorIndex = xlNone
     For i = 0 To Me.ListBox1.ListCount - 1
       If Me.ListBox1.Selected(i) Then
         ligne = Me.ListBox1.List(i, NBCol)
         f.Cells(ligne, 1).Resize(, NBCol).Interior.ColorIndex = 3
       End If
     Next i
    End Sub
    Boisgontier
    Fichiers attachés Fichiers attachés

  4. #4
    Membre averti
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Juillet 2014
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aube (Champagne Ardenne)

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : Conseil

    Informations forums :
    Inscription : Juillet 2014
    Messages : 17
    Par défaut
    Merci à vous 2 pour votre aide c'est incroyable !

    Boisgontier le code marche parfaitement c'est génial !
    Merci encore pour votre aide j'ai appris plein de choses

    Bonne journée à vous 2 !

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

Discussions similaires

  1. Récupération d'une valeur d'une variable issue d'une listbox
    Par chris78200 dans le forum Interfaces Graphiques
    Réponses: 2
    Dernier message: 02/04/2012, 11h47
  2. Réponses: 8
    Dernier message: 15/05/2006, 14h33
  3. Réponses: 4
    Dernier message: 05/01/2006, 20h29
  4. Retrouver les valeurs des paramètres des fonctions d'une DLL
    Par Bernard Martineau dans le forum Langage
    Réponses: 6
    Dernier message: 08/11/2005, 10h42
  5. copie d'une table Y d'une base A vers une table X d'une base
    Par moneyboss dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 30/08/2005, 21h24

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