Tri caractères pendant remplissage listbox

Shock

XLDnaute Occasionnel
Bonjour le forum!
Je vous explique :
J'ai un Userform qui me permet de choisir un "projet" à "charger" dans mon programme (ce qui consiste à récupérer des valeurs de cellule d'un fichier xls 'petit', pour les mettre dans mon classeur principal à des endroits précis).
Ces projets sont situés tous dans le même dossier.
Je remplis donc une listbox de cette facon :
Code:
Private Sub UserForm_Activate()
Dim X As Integer, nbFichiers As Integer
Dim Tableau() As String
Dim Direction As String
Direction = Dir(ThisWorkbook.Path & "\Projets\*.xls") 'adapter chemin
'Direction = Dir("C:\repertoire\*.*") 'pour recuperer tous les types de fichiers
Do While Len(Direction) > 0
nbFichiers = nbFichiers + 1
ReDim Preserve Tableau(1 To nbFichiers)
Tableau(nbFichiers) = Direction
Direction = Dir()
Loop
If nbFichiers > 0 Then
'pour afficher tous les noms de fichiers
For X = 1 To nbFichiers
Me.ListBox1.AddItem (Tableau(X))
'Cells(X, 1) = Tableau(X)
Next X
End If

End Sub
Chaque fichier a le même type de nom : "Prog_Client_Réf.xls"

J'aurai voulu avoir 2 listbox au lieu d'une, qui me permette de choisir dans un 1er temps le client, et ensuite le fichier (dans une liste restreinte par client donc)

Merci à ceux qui auraient une idée, n'hésitez pas si besoin d'infos!

Edit : j'ai oublié de citer notre ami MichelXLD (car vous aurez peut-être reconnu ce code, inspiré du Wiki!!).
 

Hervé

XLDnaute Barbatruc
Re : Tri caractères pendant remplissage listbox

bonjour shock

je suis partie du principe que tout les noms des fichiers étaient sous cette forme : prog_client_ref.xls

Code:
Private Sub UserForm_Initialize()
Dim X As Integer, nbFichiers As Integer
Dim tablosplit, el
Dim data As New Collection

Dim Direction As String

Direction = Dir(ThisWorkbook.Path & "\Projets\*.xls") 'adapter chemin

'Direction = Dir("C:\repertoire\*.*") 'pour recuperer tous les types de fichiers
Do While Len(Direction) > 0
    nbFichiers = nbFichiers + 1
    ReDim Preserve Tableau(1 To nbFichiers)
    Tableau(nbFichiers) = Direction
    Direction = Dir()
Loop

If nbFichiers > 0 Then
    'pour afficher tous les noms de fichiers
    For X = 1 To nbFichiers
        tablosplit = Split(Tableau(X), "_")
        If UBound(tablosplit) > 1 Then
            On Error Resume Next
            data.Add tablosplit(1), CStr(tablosplit(1))
            On Error GoTo 0
        End If
    Next X
End If

For Each el In data
    ListBox1.AddItem el
Next el

End Sub
Private Sub ListBox1_Click()
Dim i As Byte

ListBox2.Clear

For i = 1 To UBound(Tableau)
    If Split(Tableau(i), "_")(1) = ListBox1 Then
        ListBox2.AddItem Tableau(i)
    End If
Next i

End Sub

edition : c'est toujours un plaisir de travailler avec les macros de MichelXLD , on s'y retrouve tout de suite, bonne habitude shock

salut
:)
 

Shock

XLDnaute Occasionnel
Re : Tri caractères pendant remplissage listbox

Salut Hervé,
c'est toujours un plaisir de travailler avec les macros de MichelXLD , on s'y retrouve tout de suite, bonne habitude shock

merci, c'est vrai que c'est toujours "on ne peut plus clair" sur ses codes!

Petits soucis sur ton code, qui est à mon avis quasi parfait (du moins par rapport à ce que j'en fait! ;) ) :
Tu oublies de définir Tableau()...
mais pb, si je définis Tableau() comme variable String, il plante sur UBound(Tableau) ("Incompatibilité de type"...)...il attend une variable de type Long

Comment faire?

PS : Sinon, la liste 1 se remplit nickel!
 

Hervé

XLDnaute Barbatruc
Re : Tri caractères pendant remplissage listbox

re

OUPS :eek:


j'avais bien déclaré tableau, mais j'ai oublié de copier la ligne :)

Dim Tableau() As String

a placer en tete du module de l'userform en dehors de toute procédure.

désolé

salut
 

Shock

XLDnaute Occasionnel
Re : Tri caractères pendant remplissage listbox

Cool!
merci bcoup, pour info, mon programme ayant un nom du type "Truc_Bidule"
J'ai donc des fichiers qui s'appellent "Truc_Bidule_Client_Réf.xls"
Donc j'ai modifié la valeur dans les tablosplit et Split :
Code:
data.Add tablosplit(2), CStr(tablosplit(2))
et :
Code:
If Split(Tableau(i), "_")(2) = ListBox1 Then
puisque j'ai 2 "Underscore"!! :D

En tout cas, ça marche perfect!
 

Discussions similaires

Réponses
19
Affichages
2 K
Réponses
29
Affichages
1 K

Statistiques des forums

Discussions
312 493
Messages
2 088 956
Membres
103 990
dernier inscrit
lamiadebz