Combobox en cascade 2 niv et resultat dans textbox

Bonjour a tous,

Besoin d'un gros coup de main pour coder cette macro, après plusieurs recherche je n'arrive pas a faire ce qu'il me plait !!!

Ce que je souhaite obtenir :

Dans une userform, faire une recherche en cascade via 2 combobox et afficher les resultats dans des textbox.

Pour cela j'ai une feuil excel avec 5 colonnes (A B C D E), et une userform avec 2 combobox et 5 textbox

Le fonctionnement :

Combobox1 filtre "année" colonne B de la feuil "base1"

Combobox2 filtre "ID" colonne A de la feuil "base1"

Les résultats qui s'affichent suite a la recherche :

TextBox1 = ID

TextBox2 = Année

TextBox3 = verif

TextBox4 = N°

TextBox5 = Prix

Je vous joint un fichier

Merci de votre aide !

CDT

72test.xlsm (16.02 Ko)

Bonjour MrDeeJayFab, bonjour le forum,

En pièce jointe ton fichier modifié avec le code ci-dessous et un bouton pour lancer la recherche :

Private O As Worksheet 'déclare la variable O (Onglet)
Private TV As Variant 'déclare la variable TV (Tableau des Valeurs)

Private Sub UserForm_Initialize() 'à l'initialisation de l'UserForm
Dim D As Object 'déclare la variable D (Dictionnaire)
Dim I As Integer 'déclare la variable I (Incrément)

Set O = Worksheets("base1") 'définit l'onglet O
TV = O.Range("A1").CurrentRegion 'définit le tableau des valeurs TV
Set D = CreateObject("Scripting.Dictionary") 'définit le dictionnaire D
For I = 2 To UBound(TV, 1) 'boucle sur toutes les lignes I du tableau des valeurs TV (en partant de la seconde)
    D(TV(I, 2)) = "" 'alimente le dictionnaire D avec les données en colonne 2 du tableau des valeurs TV
Next I 'prochaine ligne de la boucle
Me.ComboBox1.List = D.keys 'alimente la ComboBox1 avec la liste des éléments du dictionnaire D sans doublons
End Sub

Private Sub ComboBox1_Change() 'au changement dans la Combobox1
Dim I As Integer 'déclare la variable I (Incrément)

Me.ComboBox2.Clear 'vide la ComboBox2
'si la ComboBox1 est effacée, lance la procédure [Effac] et sort de cette procédure
If Me.ComboBox1.Value = "" Then Call Effac: Exit Sub
For I = 2 To UBound(TV, 1) 'boucle sur toutes les lignes I du tableau des valeurs TV (en partant de la seconde)
    'si la valeur de la ComboBox1 est égale à la valeur de la donnée ligne I colonne 2 de TV,
    'ajoute la donnée ligne I colonne 1 de TV à la ComboBox2
    If CStr(TV(I, 2)) = Me.ComboBox1.Value Then Me.ComboBox2.AddItem TV(I, 1)
Next I 'prochaine ligne de la boucle
'si la ComboBox2 ne contient qu'un seul élément, affiche cet unique élément
'ce qui a pour conséquence de lancer la procédure Change de la ComboBox2
If Me.ComboBox2.ListCount = 1 Then Me.ComboBox2.ListIndex = 0
End Sub

Private Sub ComboBox2_Change() 'au changement dans la Combobox1
Dim I As Integer 'déclare la variable I (Incrément)
Dim J As Byte 'déclare la variable J (incrément)

'si la ComboBox2 est effacée, lance la procédure [Effac] et sort de cette procédure
If Me.ComboBox2.Value = "" Then Call Effac: Exit Sub
For I = 2 To UBound(TV, 1) 'boucle 1 : sur toutes les lignes I du tableau des valeurs TV (en partant de la seconde)
    'condition : si la valeur de la ComboBox1 est égale à la valeur de la donnée ligne I colonne 2 de TV,
    'et si la valeur de la ComboBox2 est égale à la valeur de la donnée ligne I colonne 1 de TV
    If CStr(TV(I, 2)) = Me.ComboBox1.Value And CStr(TV(I, 1)) = Me.ComboBox2.Value Then
        For J = 1 To 5 'boucle 2 : sur les 5 colonnes du tableau des valeurs TV
            Me.Controls("TextBox" & J).Value = TV(I, J) 'renvoie dans la TextBox de la boucle, la donnée ligne I colonne J de TV
        Next J 'prochaine colonne de la boucle 2
    End If 'fin de la condition
Next I 'prochaine ligne de la boucle 1
End Sub

Public Sub Effac()
Dim J As Byte 'déclare la variable J (incrément)

For J = 1 To 5 'boucle sur les 5 textboxes de l'UserForm1
    UserForm1.Controls("TextBox" & J).Value = "" 'efface la TextBox de la boucle
Next J 'prochaine colonne de la boujcle 2
End Sub

Le fichier :

314mrdeejayfab-v01.xlsm (23.02 Ko)

Bonjour Mr ThauThème,

Votre macro va a merveille !

je l'ai adapter a mon fichier en remplaçant :

Ce code Me.Controls("TextBox" & J).Value = TV(I, J) 'renvoie dans la TextBox de la boucle, la donnée ligne I colonne J de TV

PAR

Me.Controls("TextBox1") = Sheets("base").Cells(I, "C")

etc

etc

etc

J'ai utilisé ce code afin de faire apparaitre les colones que je souhaitées avoir dans mes textbox !

Merci encore ! !

Rechercher des sujets similaires à "combobox cascade niv resultat textbox"