Afficher ligne suivant résultat liste cascade d'un UserForm

Superemi

XLDnaute Junior
Bonjour à tous,

Voici mon point de blocage.

Dans ma feuille, j'ai un onglet (Feuil3) avec des Numéros de titres et du texte en-dessous, et un autre onglet (Feuil2) avec les numéros de titres classés.
J'ai fait (grâce à l'aide du forum !) un UserForm avec une liste en cascade à 3 niveaux.

Voici un exemple de ce que je souhaiterai faire :
Après avoir fait mon choix dans les listes (par exemple : 6. puis 6.5 puis 6.5.1), je souhaiterai cliquer sur valider et pouvoir aller dans l'onglet Feuil3 sur la ligne où se trouve le numéro 6.5.1.

Le fichier en PJ.
Je précise que je suis débutant sur vba.

Merci par avance de vos retours qui me sont toujours utiles.

Cordialement,
Superemi.
 

Pièces jointes

  • Test.xlsm
    24.1 KB · Affichages: 47
  • Test.xlsm
    24.1 KB · Affichages: 54
  • Test.xlsm
    24.1 KB · Affichages: 60

Robert

XLDnaute Barbatruc
Repose en paix
Re : Afficher ligne suivant résultat liste cascade d'un UserForm

Bonjour Rémi, bonjour le forum,

Peut-être comme ça :
Code:
Private f As Object
Private pl As Range
Private c As Range

Code:
Private Sub UserForm_Initialize()
Dim dl As Long

Set f = Sheets("Feuil2")
dl = f.Cells(Application.Rows.Count, 1).End(xlUp).Row
Set pl = f.Range("A2:A" & dl)
Set mondico = CreateObject("Scripting.Dictionary")
For Each c In pl
    mondico(c.Value) = c.Value
Next c
Me.ComboBox1.List = mondico.items
End Sub

Code:
Private Sub ComboBox1_Change()
Me.ComboBox2.Clear
Set mondico = CreateObject("Scripting.Dictionary")
For Each c In pl
    If CStr(c.Value) = Me.ComboBox1.Value Then mondico(c.Offset(0, 1).Value) = CStr(c.Offset(0, 1).Value)
Next c
Me.ComboBox2.List = mondico.items
End Sub

Code:
Private Sub ComboBox2_Change()
Me.ComboBox3.Clear
Set mondico = CreateObject("Scripting.Dictionary")
For Each c In pl
    If CStr(c.Value) = Me.ComboBox1 And CStr(c.Offset(0, 1).Value) = Me.ComboBox2 Then mondico(c.Offset(0, 2).Value) = CStr(c.Offset(0, 2).Value)
Next c
Me.ComboBox3.List = mondico.items
End Sub

Code:
Private Sub CommandButton1_Click()
Dim r As Range
Set r = Sheets("Feuil3").Columns(1).Find(Me.ComboBox3.Value, , xlValues, xlWhole)
Sheets("Feuil3").Select
r.Select
Unload Me
End Sub
 

Superemi

XLDnaute Junior
Re : Afficher ligne suivant résultat liste cascade d'un UserForm

Bonjour Robert et merci.

Les codes fonctionnent avec mon fichier.

Le seul hic est dans la liste en cascade suivant le nombre de choix que je fais, je m'explique en prenant un exemple.
Pour choisir le chapitre 6.5.1, je choisis dans la 1ère liste "6", dans la 2ème "6.5" et dans la 3ème liste "6.5.1". Je valide et ça fonctionne.
Mais si je veux choisir le chapitre 6.5, je choisis dans la 1ère liste "6", dans la 2ème "6.5". Je fais valider et je tombe sur une case blanche en bas de liste de la Feuil3. Or il faut que je tombe sur la ligne où se trouve le titre "6.5". Idem lorsque je veux choisir le titre 7.

Ça doit venir du fait que je ne sélectionne rien dans le combobox 3 et/ou 2.

Aussi je préfère te solliciter de nouveau au lieu que je fasse n'importe avec ta macro.

Merci d'avance.

Cordialement,
Rémi DUGUET.
 

Superemi

XLDnaute Junior
Re : Afficher ligne suivant résultat liste cascade d'un UserForm

Bonjour laetitia90,

Merci pour ton retour les codes fonctionnent bien.

Mais j'ai le même problème qu'avec les codes donnés par Robert, si je sélectionne "6" puis "6.4" (par exemple) et que je valide, il me dit que le combobox 3 est vide. Or il faudrait que la ligne où se trouve le code "6.4" s'affiche.

Merci d'avance pour ton retour à ce sujet.

Cordialment,
Rémi DUGUET.
 

Robert

XLDnaute Barbatruc
Repose en paix
Re : Afficher ligne suivant résultat liste cascade d'un UserForm

Bonjour Rémi, Laetitia, bonjour le forum,

Exact Rémi ,le code n'était pas fiable... Voici la correction :
Code:
Private Sub CommandButton1_Click()
Dim r As Range

If Me.ComboBox3.Value <> "" Then Set r = Sheets("Feuil3").Columns(1).Find(Me.ComboBox3.Value, , xlValues, xlWhole)
If Me.ComboBox3.Value = "" And Me.ComboBox2.Value <> "" Then Set r = Sheets("Feuil3").Columns(1).Find(Me.ComboBox2.Value, , xlValues, xlWhole)
If Me.ComboBox3.Value = "" And Me.ComboBox2.Value = "" Then Set r = Sheets("Feuil3").Columns(1).Find(Me.ComboBox1.Value, , xlValues, xlWhole)
Sheets("Feuil3").Select
r.Select
Unload Me
End Sub
 
Dernière édition:

Superemi

XLDnaute Junior
Re : Afficher ligne suivant résultat liste cascade d'un UserForm

RE - Robert, laeticia,

Le nouveau code pour CommandButton1 fonctionne, et tous les codes fonctionnent comme je le souhaite.

Je vous remercie tous les deux pour le temps que vous avez pris à traiter mon problème.

Bonne journée.

Cordialement,
Rémi DUGUET.
 

Discussions similaires

Statistiques des forums

Discussions
312 195
Messages
2 086 077
Membres
103 111
dernier inscrit
Eric68350