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 + ListBox


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre régulier
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Septembre 2018
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes

    Informations forums :
    Inscription : Septembre 2018
    Messages : 12
    Par défaut Recherche + ListBox
    Bonjour à tous,

    Je me permets de solliciter votre aide pour une fonctionnalité que je souhaiterais réaliser.
    Je suis en train de créer un logiciel qui me permet de gérer simplement des stocks et les entrées/sorties de matières.

    Pour cela, la matière est affectée à un emplacement, contient une quantité, une référence et un numéro unique.

    Mon programme créé un fichier .txt pour chaque entrée de matière dans un dossier "Stockage".
    Toutes les informations concernant la matière sont enregistrées dans le titre du fichier.
    Soit : Référence,NuméroUnique,Quantité,Emplacement.txt

    Dans un écran de mon application qui me sert à consulter les matières en stocks, j'utilise une listbox à 4 colonnes qui liste tous les fichiers .txt présents dans le dossier et sépare les informations entre les virgule.

    Voici le code :
    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
    Private Sub UserForm_Initialize()
    EcranSortie.ListBox_Sort.ColumnCount = 4
     
    repertoire = ActiveWorkbook.Path & "\Stockage"
     
    Dim Coll_Docs As New Collection
    Dim Search_path, Search_Filter, Search_Fullname As String
    Dim DocName As String
    Dim i As Long
     
    Search_path = repertoire
    Search_Filter = "*.txt"
     
    Set Coll_Docs = Nothing
     
    DocName = Dir(Search_path & "\" & Search_Filter)
     
    Do Until DocName = ""
        Coll_Docs.Add Item:=DocName
        DocName = Dir
    Loop
     
    For i = Coll_Docs.Count To 1 Step -1 '
     
    Xpn = InStr(1, Coll_Docs(i), ",")
    Xlabel = InStr(Xpn + 1, Coll_Docs(i), ",")
    XQty = InStr(Xlabel + 1, Coll_Docs(i), ",")
    XLoc = Len(Coll_Docs(i)) - 4
     
    EcranSortie.ListBox_Sort.AddItem 'Coll_Docs(i)
    EcranSortie.ListBox_Sort.List(ListBox_Sort.ListCount - 1, 0) = Left(Coll_Docs(i), Xpn - 1)
    EcranSortie.ListBox_Sort.List(ListBox_Sort.ListCount - 1, 1) = Right(Left(Coll_Docs(i), Xlabel - 1), Xlabel - (Xpn + 1))
    EcranSortie.ListBox_Sort.List(ListBox_Sort.ListCount - 1, 2) = Right(Left(Coll_Docs(i), XQty - 1), XQty - (Xlabel + 1))
    EcranSortie.ListBox_Sort.List(ListBox_Sort.ListCount - 1, 3) = Right(Left(Coll_Docs(i), XLoc), XLoc - XQty)
     
    Next i
     
    End Sub

    J'ai dans mon formulaire, une TextBox pour réaliser une recherche.
    Je souhaiterais qu'au fur et à mesure que je tape des caractères, les résultats non correspondant ne s'affichent pas.
    Exemple : si je tape un 5, toutes les références ne commencant pas par 5 ne s'affichent pas et ainsi de suite

    Je n'arrive pas à réaliser cela en conservant l'affichage des différentes colonnes pour les résultats.
    J'espère avoir été assez clair et vous remercie par avance de votre aide.

  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,

    Exemple en PJ

    Boisgontier

  3. #3
    Membre régulier
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Septembre 2018
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes

    Informations forums :
    Inscription : Septembre 2018
    Messages : 12
    Par défaut
    Bonjour BoisGontier,

    J'ai regardé ton fichier, celui fonctionne parfaitement dans ton exemple.
    En effet tu utilises un tableau déjà créé dans un onglet.

    Pour ma part, je n'ai aucun tableau puisque mes données proviennent d'une liste de fichiers dans un dossier.

    J'ai du mal à adapter ton exemple pour mon code.
    Peux-tu m'aider ? Merci d'avance,

  4. #4
    Membre régulier
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Septembre 2018
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes

    Informations forums :
    Inscription : Septembre 2018
    Messages : 12
    Par défaut
    J'ai réussi à adapter mon code pour mettre le contenu de la listbox dans un tableau.
    Cependant quand je réalise une saisie les résultats ne correspondant s'enlève bien mais la première ligne s'enlève tout le temps et la première colonne disparaît.
    Une idée ?

  5. #5
    Membre régulier
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Septembre 2018
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes

    Informations forums :
    Inscription : Septembre 2018
    Messages : 12
    Par défaut
    C'est tout bon. C'était des erreurs dans les boucles.

    Voici le code qui fonctionne. Merci

    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
     
    Private Sub UserForm_Initialize()
     
    ListBox_Cons.Clear
     
    EcranConsult.ListBox_Cons.ColumnCount = 4
     
    repertoire = ActiveWorkbook.Path & "\Stockage"
     
    Dim Coll_Docs As New Collection
    Dim Search_path, Search_Filter, Search_Fullname As String
    Dim DocName As String
    Dim i As Long
     
    Search_path = repertoire
    Search_Filter = "*.txt"
     
    Set Coll_Docs = Nothing
     
    DocName = Dir(Search_path & "\" & Search_Filter)
     
    Do Until DocName = ""
        Coll_Docs.Add Item:=DocName
        DocName = Dir
    Loop
     
    For i = Coll_Docs.Count To 1 Step -1 '
     
    Xpn = InStr(1, Coll_Docs(i), ",")
    Xlabel = InStr(Xpn + 1, Coll_Docs(i), ",")
    XQty = InStr(Xlabel + 1, Coll_Docs(i), ",")
    XLoc = Len(Coll_Docs(i)) - 4
     
    EcranConsult.ListBox_Cons.AddItem 'Coll_Docs(i)
    EcranConsult.ListBox_Cons.List(ListBox_Cons.ListCount - 1, 0) = Left(Coll_Docs(i), Xpn - 1)
    EcranConsult.ListBox_Cons.List(ListBox_Cons.ListCount - 1, 1) = Right(Left(Coll_Docs(i), Xlabel - 1), Xlabel - (Xpn + 1))
    EcranConsult.ListBox_Cons.List(ListBox_Cons.ListCount - 1, 2) = Right(Left(Coll_Docs(i), XQty - 1), XQty - (Xlabel + 1))
    EcranConsult.ListBox_Cons.List(ListBox_Cons.ListCount - 1, 3) = Right(Left(Coll_Docs(i), XLoc), XLoc - XQty)
     
    Next i
     
     
    TBlBD = ListBox_Cons.List
     
    End Sub
     
    Private Sub TextBox_PNS_Change()
      ColRechTextbox = 0
      Dim b()
      If Me.TextBox_PNS <> "" Then
       Set d1 = CreateObject("Scripting.Dictionary")
       tmp = Me.TextBox_PNS & "*"
       n = 0
       For i = 0 To UBound(TBlBD)
          If TBlBD(i, ColRechTextbox) Like tmp Then
            n = n + 1: ReDim Preserve b(0 To UBound(TBlBD, 2), 1 To n)
            For k = 0 To UBound(TBlBD, 2): b(k, n) = TBlBD(i, k): Next k
         End If
       Next i
       If n > 0 Then Me.ListBox_Cons.Column = b Else Me.ListBox_Cons.Clear
     Else
       Me.ListBox_Cons.List = TBlBD
     End If
    End Sub

  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
    Le principe est le même:

    -On stocke dans Un Array() les infos -TblBD() sur mon exemple-
    -Le TextBox utilise cet Array pour alimenter la ListBox.

    Boisgontier

  7. #7
    Membre régulier
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Septembre 2018
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes

    Informations forums :
    Inscription : Septembre 2018
    Messages : 12
    Par défaut
    Encore merci pour ton aide.

    Cette fois j'ai un autre soucis concernant les textbox.

    En effet, j'utilise un scan de code barre pour saisir les informations.
    Lors de la saisie d'une textbox avec le scan, je vérifie les 2 premiers caractères de la saisie (ils doivent correspondre à 1D).
    Si cela n'est pas vrai, je supprime les infos scanner et met un message d'alerte.

    Cependant, après ce message, mon curseur passe automatiquement à la textbox suivante.
    Quand je scanne, il doit appliquer automatiquement un "retour chariot".

    Je souhaiterais que mon curseur revienne dans la textbox active lors de la mauvaise saisie.
    Comment peut-on faire cela ?

  8. #8
    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
    Me.TextBox1.SetFocus ?

    Boisgontier

  9. #9
    Membre régulier
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Septembre 2018
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes

    Informations forums :
    Inscription : Septembre 2018
    Messages : 12
    Par défaut
    J'ai déjà essayé et cela ne fonctionne pas.
    J'ai mis mon code pour qu'il s'execute après la mise à jour de la textbox :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Private Sub TextBox_PN_AfterUpdate()
     
    If Left(TextBox_PN.Value, 2) = "1D" Then
    TextBox_PN.Value = Right(TextBox_PN.Value, Len(TextBox_PN.Value) - 2)
    Else
    TextBox_PN = ""
    MsgBox ("Veuillez saisir la matière")
    Me.TextBox_PN.SetFocus
    End If
     
    End Sub

Discussions similaires

  1. javascript et auto-recherche listbox
    Par pseudo88 dans le forum ASP.NET
    Réponses: 11
    Dernier message: 20/05/2010, 10h40
  2. [Recherche] ListBox Colorisation + Icone
    Par trikker dans le forum Composants VCL
    Réponses: 9
    Dernier message: 01/12/2009, 10h15
  3. Réponses: 2
    Dernier message: 11/04/2008, 16h51
  4. recherche dans une listbox
    Par micknic dans le forum Balisage (X)HTML et validation W3C
    Réponses: 4
    Dernier message: 23/02/2005, 21h39
  5. Probleme de recherche par listbox
    Par haigwepa dans le forum IHM
    Réponses: 6
    Dernier message: 12/10/2004, 19h57

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