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 :

UserForm / ListBox / Affichage dynamique [XL-2007]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre très actif
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    186
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 186
    Par défaut UserForm / ListBox / Affichage dynamique
    Re bonjour à tous et toutes

    Mon projet avance bien, je suis à la recherche désormais d'une petite amélioration

    J'ai un UserForm qui affiche 1300 lignes issues d'un fichier excel par le biais d'une ListBox

    Voici le code de ce UserForm

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Private Sub UserForm_Initialize()
         Workbooks.Open "e:\1-AFF\AAA\00Base\BaseMateriels\NovoMaterBAse.xls"
        ActiveWindow.WindowState = xlMinimized
        ListBox1.RowSource = "[NovoMaterBAse.xls]BAseListe!B3:B1300"
    End Sub
    Naviguer dans cette listbox n'est pas chose aisée, vu sa longueur

    D'ailleurs, la roulette de la souris n'a pas d'effet sur le défilement

    J'ai une TextBox dans ce UserForm

    Je souhaite pouvoir modifier l'affichage dans la listBox en fonction de ce qui est saisi dans la TextBox

    Par exemple, je saisis "M", l'affichage de la liste box se positionne sur "machine", si je tape "mo" cela passe à "moteur" ....

    Avez vous une piste ?

    De nouveau merci par avance pour votre aide

    Daniel

  2. #2
    Membre Expert Avatar de Jean-Pierre49
    Homme Profil pro
    Retraité
    Inscrit en
    Juillet 2007
    Messages
    659
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2007
    Messages : 659
    Par défaut
    dans les listbox tu à cette possibilité

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ListBox1.MatchEntry = fmMatchEntryFirstLetter

  3. #3
    Membre très actif
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    186
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 186
    Par défaut
    Bonsoir

    Merci Jean Pierre pour cette nouvelle réponse pertinente

    Si néanmoins tu as la méthode pour aller plus loin que la simple première lettre (caler la liste box selon les premières lettres ) je suis preneur

    Bonsoir

    Daniel

  4. #4
    Membre Expert Avatar de Jean-Pierre49
    Homme Profil pro
    Retraité
    Inscrit en
    Juillet 2007
    Messages
    659
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2007
    Messages : 659
    Par défaut
    Je n'ai pas Excel sur ce PCet oui ça peut arriver

    mais regarde pour la propriété MatchEntry il y a peu être mieux

    Ton idée m'intéresse, mais ce Week end, c'est raper

    J'espere pour toi que tu auras une solution avant

    si non je vais m'y attacher
    bon WN

  5. #5
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    Bonjour
    Une proposition pour filtrer une ListBox en fonction du contenu d'un TextBox

    Code commenté à mettre dans le module de l'userform
    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
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    Option Explicit
    'Variables globales à l'userform
    Dim Tb
    Dim Dm As Long
     
    '========================================================
    'Routine de remplissage de ListBox1 en fonction de:
    '   - n étant le nombre d'éléments à ajouter
    '   - S étant les données à ajouter
    'En fonction du nombre d'éléments, on utilise soit .Additem (pour un unique élément) ou .List (pour un tableau)
     
    Private Sub Remplissage(ByVal n As Long, ByVal S As Variant)
     
    With Me.ListBox1
        If n = 1 Then
            .AddItem IIf(IsArray(S), S(1), S)
        ElseIf n > 1 Then
            .List = S
        End If
    End With
    End Sub
     
    '========================================================
    Private Sub UserForm_Initialize()
    Dim Fichier As String
    Dim Wbk As Workbook
    Dim LastLig As Long
     
    Application.ScreenUpdating = False
    'Nom complet du fichier NocoMaterBAse (à adapter)
    Fichier = "C:\Users\user\Desktop\NovoMaterBAse.xls"
    'Si le fichier existe
    If Dir(Fichier) <> "" Then
        'On ouvre le fichier
        Set Wbk = Workbooks.Open(Fichier)
        With Wbk.Worksheets("BAseListe")
            'Dernière ligne remplie de la colonne B de la feuille BAseListe (!Il fallait aussi tester l'existence de cette feuille)
            LastLig = .Cells(.Rows.Count, "B").End(xlUp).Row
            'On affecte la plage utile à la variable globale Tb
            Tb = .Range("B3:B" & LastLig)
            'Dm contient le nombre d'éléments de la liste
            Dm = LastLig - 2
        End With
        'On ferme le fichier sans sauvegarder
        Wbk.Close False
        Set Wbk = Nothing
        'On appelle la routine de remplissage de Listbox1
        Call Remplissage(Dm, Tb)
    End If
    End Sub
     
    '========================================================
    Private Sub TextBox1_Change()
    Dim i As Long, j As Long
    Dim Fltre As String
    Dim Res() As String
     
    'S'il y a au moins un élément dans notre liste
    If Dm >= 1 Then
        'Ici c'est le texte entré dans la TextBox1 (mis en amjuscule)
        Fltre = UCase(Trim(Me.TextBox1))
        With Me.ListBox1
            'on efface note ListBox1
            .Clear
            'Si TextBox1<>""
            If Fltre <> "" Then
                'On parcourt le tableau Tb et on remplit le tableau Res par les émélents commençant par le texte entré en TextBox1
                For i = 1 To UBound(Tb, 1)
                    If UCase(Tb(i, 1)) Like Fltre & "*" Then
                        j = j + 1
                        ReDim Preserve Res(1 To j)
                        Res(j) = Tb(i, 1)
                    End If
                Next i
                'à la fin, on appelle la routine de remplissage sur Res (les données filtrées par TextBox1)
                Call Remplissage(j, Res)
                'on efface Res
                Erase Res
            Else
                'Si TextBox1 est vide, on appelle la routine de remplissage sur Tb (toutes les données)
                Call Remplissage(Dm, Tb)
            End If
        End With
    End If
    End Sub
     
    '========================================================
    'à la femeture de l'usf, on efface Tb
    Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
     
    Erase Tb
    End Sub

  6. #6
    Membre très actif
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    186
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 186
    Par défaut
    Bonjour Mercatog et merci pour ce long post

    Cela fonctionne parfaitement !

    Merci de votre aide

    Daniel

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

Discussions similaires

  1. Problème d'affichage dynamique d'une liste
    Par bor1s dans le forum ASP
    Réponses: 2
    Dernier message: 18/11/2005, 16h18
  2. Probleme d'affichage dynamique de ma base
    Par kudawoo2002 dans le forum ASP
    Réponses: 3
    Dernier message: 18/11/2005, 09h22
  3. Réponses: 1
    Dernier message: 08/07/2005, 02h46
  4. [VB.NET] - affichage dynamique dans un tableau
    Par karibouxe dans le forum ASP.NET
    Réponses: 8
    Dernier message: 20/06/2005, 15h07
  5. affichage dynamique en fonction des données en base
    Par jengo dans le forum Bases de données
    Réponses: 1
    Dernier message: 28/10/2004, 10h22

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