XL 2013 Recherche par combobox

maval

XLDnaute Barbatruc
Bonjour,

Voila j'ai un formulaire avec deux combobox en cascade une recherche le continent et l'autre recherche le pays.
j'ai dans un dossier 5 continents et dans chaque continent des sous dossiers avec les pays correspondant dans chaque pays j'ai des billets et j'aimerais après avoir choisis le continent, le pays avoir les billets s'afficher dans le formulaire.
Je joint mon fichier qui seras plus explicite

Je vous remercie d'avance
 

Pièces jointes

  • Combobox en cascade.xlsm
    242.5 KB · Affichages: 61

Dranreb

XLDnaute Barbatruc
Bonjour.
Utilisez une instruction ChDir avec une concaténation du chemin racine, du continent et du pays puis un NomFic = Dir "*.*" puis une boucle While NomFic <> "" avec dedans N = N + 1: Me("Image" & N).Picture = LoadPicture( NomFic): NomFic = Dir: Wend
Remarque: utilisez un ComboBoxLiées pour gérer les choix: c'est tellement facile.

Edit: Bonjour Robert.
 
Dernière édition:

Robert

XLDnaute Barbatruc
Repose en paix
Bonjour Maval, bonjour le forum,

Peut-être comme ça (non testé) :

VB:
Option Explicit
Dim F As Worksheet
Dim TV As Variant

Private Sub UserForm_Initialize()
Dim MonDico As Object
Dim I As Integer

Set F = Sheets("Feuil1")
TV = F.Range("A1").CurrentRegion
Set MonDico = CreateObject("Scripting.Dictionary")
For I = 2 To UBound(TV, 1)
   MonDico(TV(I, 1)) = ""
Next I
Me.ComboBox1.List = MonDico.keys
End Sub

Private Sub ComboBox1_Change()
Dim MonDico As Object
Dim I As Integer

Set MonDico = CreateObject("Scripting.Dictionary")
For I = 2 To UBound(TV, 1)
    If TV(I, 1) = Me.ComboBox1.Value Then MonDico(TV(I, 2)) = ""
Next I
Me.ComboBox2.List = MonDico.keys
End Sub

Private Sub ComboBox2_Change()
Dim MonDico As Object
Dim I As Integer
Dim F As String
Dim CH As String
Dim J As Byte


If Me.ComboBox1.Value = "" Then
    MsgBox "Vous devez renseigner le continent !"
    Me.ComboBox1.SetFocus
    Exit Sub
End If

Set MonDico = CreateObject("Scripting.Dictionary")
J = 1
For I = 2 To UBound(TV, 1)
    If TV(I, 1) = Me.ComboBox1.Value And TV(I, 2) = Me.ComboBox2.Value Then
        CH = "E:\Le Monde\User_Animation_Monnaies\Continent\" & Me.ComboBox1.Value & "\" & Me.ComboBox2.Value & "\"
        F = Dir(CH & "*.gif")
        Do While F <> ""
            If J = 11 Then Exit Sub
            Me.Controls("Label" & J).Caption = F
            Me.Controls("Image" & J).Picture = LoadPicture(CH & F)
            J = J + 1
            F = Dir
        Loop
        Exit For
    End If
Next I
End Sub

Private Sub CommandButton1_Click()
Unload Me
End Sub

[Édition]
Bonjour Bernard, nos posts se sont croisés...
 

ChTi160

XLDnaute Barbatruc
Bonsoir maval
Bonsoir le fil,Le Forum

Tu dis avoir mis ce chemin :
Code:
E:\Le Monde\User_Animation_monnaies\Continent
On peut supposer que tu as oublié le
Code:
/
à la fin , avant le Nom du premier Dossier mais pas sur ??????? Lol
quel message d'erreur as tu ?????
Bonne fin de Soirée
Amicalement
Jean Marie
 
Dernière édition:

Robert

XLDnaute Barbatruc
Repose en paix
Bonsoir le fil, bonsoir le forum,

Ha mon sal*** ! Tu as mis des espaces devant le noms des pays ! J'y ai passé des heures sur ce coup...
Le code modifié :

VB:
Option Explicit
Dim F As Worksheet
Dim TV As Variant

Private Sub UserForm_Initialize()
Dim MonDico As Object
Dim I As Integer

Set F = Sheets("Feuil1")
TV = F.Range("A1").CurrentRegion
Set MonDico = CreateObject("Scripting.Dictionary")
For I = 2 To UBound(TV, 1)
  MonDico(TV(I, 1)) = ""
Next I
Me.ComboBox1.List = MonDico.keys
End Sub

Private Sub ComboBox1_Change()
Dim MonDico As Object
Dim I As Integer

Set MonDico = CreateObject("Scripting.Dictionary")
For I = 2 To UBound(TV, 1)
  If TV(I, 1) = Me.ComboBox1.Value Then MonDico(TV(I, 2)) = ""
Next I
Me.ComboBox2.List = MonDico.keys
End Sub

Private Sub ComboBox2_Change()
Dim MonDico As Object
Dim I As Integer
Dim F As String
Dim CH As String
Dim J As Byte


If Me.ComboBox1.Value = "" Then
  MsgBox "Vous devez renseigner le continent !"
  Me.ComboBox1.SetFocus
  Exit Sub
End If

Set MonDico = CreateObject("Scripting.Dictionary")
J = 1
For I = 2 To UBound(TV, 1)
  If TV(I, 1) = Me.ComboBox1.Value And TV(I, 2) = Me.ComboBox2.Value Then
  CH = "E:\Continent\" & Trim(Me.ComboBox1.Value) & "\" & Trim(Me.ComboBox2.Value) & "\"
  F = Dir(CH & "*.gif")
  Do While F <> ""
  If J = 11 Then Exit Sub
  Me.Controls("Label" & J + 2).Caption = F
  Me.Controls("Image" & J).Picture = LoadPicture(CH & F)
  J = J + 1
  F = Dir
  Loop
  Exit For
  End If
Next I
End Sub

Private Sub CommandButton1_Click()
Unload Me
End Sub
 

Discussions similaires

Statistiques des forums

Discussions
312 287
Messages
2 086 829
Membres
103 398
dernier inscrit
alya34030