Probleme avec combobox

lechti31

XLDnaute Occasionnel
Bonjour à tous
J'aimerai savoir comment faire pour que dans une combobox (liste deroulante dans userform), il y est une liste définie suivant un choix
Dans le fichier joint, j'aimerai que quand je fais le choix dans le combobox "catégorie", je ne puisse voir que les choix de cette catégorie dans le combobox "taille".
Si je choisi la catégorie junior, j'aimerai que dans le menu déroulant du combobox Taille, je ne puisse avoir accés qu'aux tailles Junior donc B1 à F1.
Si je choisi la catégorie Senior, j'aimerai que dans le menu déroulant du combobox Taille, je ne puisse avoir accés qu'aux tailles Senior donc B2 à F2.
A quel endroit dois-je mettre ces informations, car dans ROWSOURCE il ne prend qu'une seule liste et non un choix de liste
Merci pour votre aide
 

Pièces jointes

  • ESSAI.xlsm
    20.9 KB · Affichages: 24

Dranreb

XLDnaute Barbatruc
Bonjour.
Utilisez mon objet ComboBoxLiées: il se charge entièrement d'établir des listes classées pertinentes selon les choix déjà effectués et renvoie à l'UserForm les numéros des lignes correspondantes via une procédure évènement.
Récupérez la fourniture nécessaire de cette discussion.
 

Dranreb

XLDnaute Barbatruc
J'ai vu que la structure des données n'était pas complètement adaptée à l'utilisation d'un ComboBoxLiées.
Et s'il n'y avait pas d'autres besoins se rapportant à un tableau où ces catégories et tailles étaient à utiliser, il vaudrait mieux s'en passer.
Il serait néanmoins possible de l'utiliser à l'aide de ce code :
VB:
Option Explicit
Private WithEvents CL As ComboBoxLiées
Private TCatég(), TTaill()

Private Sub UserForm_Initialize()
Dim TE(), LE&, C&, LMax&, LS&
Set CL = CBxL.Création.ComboBoxLiées
TE = Feuil2.UsedRange.Value
For LE = 1 To UBound(TE, 1)
   For C = 2 To UBound(TE, 2)
      If Not IsEmpty(TE(LE, C)) Then LMax = LMax + 1
      Next C, LE
ReDim TCatég(1 To LMax, 1 To 1), TTaill(1 To LMax, 1 To 1)
For LE = 1 To UBound(TE, 1)
   For C = 2 To UBound(TE, 2)
      If Not IsEmpty(TE(LE, C)) Then
         LS = LS + 1: TCatég(LS, 1) = TE(LE, 1): TTaill(LS, 1) = TE(LE, C)
         End If: Next C, LE
CL.Add ComboBox1
CL.Add ComboBox2
CL.CorrespRequise = True
CL.Actualiser
End Sub

Private Sub CL_SujBdDPersoSVP(ByVal CBM As CBxL.ComboBoxMmbr)
If CBM.CBx Is Me.ComboBox1 Then
   CBM.SujetBdD = SujetCbx(TCatég)
Else
   CBM.SujetBdD = SujetCbx(TTaill)
   End If
End Sub
Important: supprimez la valeur de RowSource de ComboBox1 sinon ça fait un "Permission refusée"
 
Dernière édition:

Dranreb

XLDnaute Barbatruc
Si vous ne voulez supprimez le RowSource de ComboBox1,
ni pouvoir choisir la taille avant la catégorie,
et que le nombre de tailles pour chaque est toujours de 5,
je suppose que ceci suffirait :
VB:
Private Sub ComboBox1_Change()
ComboBox2.List = WorksheetFunction.Transpose(Feuil2.[B1:F2].Rows(ComboBox1.ListIndex + 1))
End Sub
 

Discussions similaires

Réponses
28
Affichages
1 K
Réponses
3
Affichages
413

Statistiques des forums

Discussions
312 651
Messages
2 090 529
Membres
104 565
dernier inscrit
boltonredax