Private chem As String 'déclare la variable chem (CHEMin)
Private chem1 As String 'déclare la variable chem (CHEMin)
Private Sub UserForm_Initialize() 'à l'initialisation de l'Userform
Dim fs, f, f1, sf 'décalre les variables fs, f, f1 et sf
Dim td() As String 'décalre le tableau de variables td (Tableau des Dossiers)
Dim i As Integer 'déclare la variable i (Incrément)
chem = "C:\mondossier\sigle" 'définit la variable chem
Set fs = CreateObject("Scripting.FileSystemObject") 'définit la variable fs (accès aux fichiers)
Set f = fs.GetFolder(chem) 'définit la variable f (accès aux fichiers du dossier chem)
Set sf = f.SubFolders 'définit la variable sf (accès aux sous-dossiers du dossier chem)
For Each f1 In sf 'boucle sur tous les sous-dossiers
ReDim Preserve td(i) 'redimentionne le tableau td
td(i) = f1.Name 'attribue à la variable indexée td(i) la valeur du nom du dossier
i = i + 1 'incrémente i
Next 'prochain sous-dossier de la boucle
Call tri(td, LBound(td), UBound(td)) 'lance la macro de tri (merci Jacques BOISGONTIER)
Me.ComboBox1.List = td 'alimente la ComboBox1 d'une liste de dossiers triés et sans doublons
'****************************************************************************************************
'j'ai mis ce code car il me semblait que tu le demandais sur un autre fil mais il ne peut pas y avoir
'de doublons dans les dossiers et, en pricipe, ils sont automatiquement triés par ordre alphabétique.
'****************************************************************************************************
End Sub
Private Sub ComboBox1_Change() 'au changement dans la ComboBox1
Dim dico As Object 'déclare la variable dico (DICtiOnanaire)
Dim temp As Variant 'déclare la variable temp (tableau TEMPoraire)
Dim fs, f, fc, f1 'déclare les variables fs, f, fc et f1
Me.ComboBox2.Clear 'vide la ComboBox2
Me.ComboBox3.Clear 'vide la ComboBox2
Me.ListBox1.Clear 'vide la ListBox1
chem1 = chem & "\" & Me.ComboBox1.Value 'définit la variable chem1
Set dico = CreateObject("Scripting.Dictionary") 'définit le dioctionnaire dico
Set fs = CreateObject("Scripting.FileSystemObject") 'définit la variable fs (accès aux fichiers)
Set f = fs.GetFolder(chem1) 'définit la variable f (accès au dossier chem1)
Set fc = f.Files 'définit la variable fc (accès aux fichiers de chem1)
For Each f1 In fc 'boucle sur tous les fichiers
dico(Left(Split(f1.Name, " ")(1), 3)) = "" 'alimente le dico avec les 3 caractères des devises
Me.ListBox1.AddItem f1.Name 'alimente la ListBox1
Next f1 'prochain fichier de la boucle
temp = dico.keys 'récupère le dictionnaire sans doublons
Call tri(temp, LBound(temp), UBound(temp)) 'lance la macro macro de tri des devises
Me.ComboBox2.List = temp 'alimente la ComboBox2 d'une liste triée sans doublons
End Sub
Private Sub ComboBox2_Change() 'au changement dans la ComboBox2
Dim dico As Object 'déclare la variable dico (DICtiOnanaire)
Dim temp As Variant 'déclare la variable temp (tableau TEMPoraire)
Dim fs, f, fc, f1 'déclare les variables fs, f, fc, et f1
Me.ComboBox3.Clear 'vide la ComboBox3
Me.ListBox1.Clear 'vide la ListBox1
Set dico = CreateObject("Scripting.Dictionary") 'définit le dioctionnaire dico
Set fs = CreateObject("Scripting.FileSystemObject") 'définit la variable fs (accès aux fichiers)
Set f = fs.GetFolder(chem1) 'définit la variable f (accès au dossier chem)
Set fc = f.Files 'définit la variable fc (accès aux fichiers de chem1)
For Each f1 In fc 'boucle sur tous les fichiers
dico(Left(Right(f1.Name, 10), 6)) = "" 'alimente le dictionnaire dico avec les 6 derniers caractères (avant l'extension)
'si la devise correspond, ajoute le fichier à la ListBox1
If Left(Split(f1.Name, " ")(1), 3) = Me.ComboBox2.Value Then Me.ListBox1.AddItem f1.Name
Next f1 'prochain fichier de la boucle
temp = dico.keys 'récupère le dictionnaire sans doublons
Call tri(temp, LBound(temp), UBound(temp)) 'lance la macro macro de tri des devises
Me.ComboBox3.List = temp 'alimente la ComboBox3 d'une liste triée sans doublons
End Sub
Private Sub ComboBox3_Change() 'au changement dans la ComboBox2
Dim fs, f, fc, f1 'déclare les variables fs, f, et f1
Me.ListBox1.Clear 'vide la ListBox1
Set fs = CreateObject("Scripting.FileSystemObject") 'définit la variable fs (accès aux fichiers)
Set f = fs.GetFolder(chem1) 'définit la variable f (accès au dossier chem)
Set fc = f.Files 'définit la variable fc (accès aux fichiers de chem1)
For Each f1 In fc 'boucle sur tous les fichiers
'si la devise et la date correspondent, ajoute le fichier à la LisBox1
If Left(Right(f1.Name, 10), 6) = Me.ComboBox3.Value _
And Left(Split(f1.Name, " ")(1), 3) = Me.ComboBox2 Then Me.ListBox1.AddItem f1.Name
Next f1 'prochain fichier de la boucle
End Sub
Sub tri(a As Variant, gauc As Integer, droi As Integer) 'code tiré du site de Jacques BOISGONTIER
Dim g As Integer, d As Integer
Dim ref As String
Dim tmp As String
ref = a((gauc + droi) \ 2)
g = gauc: d = droi
Do
Do While a(g) < ref: g = g + 1: Loop
Do While ref < a(d): d = d - 1: Loop
If g <= d Then
tmp = a(g): a(g) = a(d): a(d) = tmp
g = g + 1: d = d - 1
End If
Loop While g <= d
If g < droi Then Call tri(a, g, droi)
If gauc < d Then Call tri(a, gauc, d)
End Sub