XL 2019 Renseigner une combobox en fonction d'une autre

  • Initiateur de la discussion Initiateur de la discussion Bobby237
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

Bobby237

XLDnaute Nouveau
Bonjour,
Je souhaite créer un formulaire devant me permettre de créer des emplois du temps pour différents niveaux d'étude, et des emplois du temps individuels pour enseignants.
Je voudrais qu'après sélection d'une classe dans la combobox 1, toutes les combobox qui correspondent chacune à une période de cours chargent les matières correspondantes à cette classe pour permettre éventuellement une sélection.
Par la suite, je souhaite affecter aux cellules de l'emploi du temps les différents choix des combobox.
Comment s'y rendre ?
Pièce jointe pour plus de détails.
Merci pour votre aide !
 

Pièces jointes

Bonjour le fil, bonjour le forum,

Pour les emploi de temps par Classe.
À l'aide du Gestionnaire de noms j'ai définit les noms des Classes_A, Classes_B et Classes_C. Puis le code ci-dessous au changement dans la combobox Cbo_Liste_Classes :

VB:
Private Sub Cbo_Liste_Classes_Change()
Dim CTRL As Control

For Each CTRL In Me.Controls
    If TypeOf CTRL Is MSForms.ComboBox Then CTRL.List = Range("Classes_" & Me.Cbo_Liste_Classes.Value).Value
Next CTRL
End Sub

Pour renvoyer les données dans le tableau une astuce simple est de donner à la propriété [Tag] du contrôle (des comboboxes donc), l'adresse de la cellule ou sa valeur sera renvoyée.
- propriété Tag de la ComBobox6 = B5
- propriété Tag de la ComBobox Cbo_Liste_Matières = B6 (pourquoi ce nom ici ?!...)
- propriété Tag de la ComBobox11 = B7
etc.
Puis le code du bouton VALIDER :

VB:
Private Sub CommandButton1_Click()
Dim O As Worksheet
Dim CTRL As Control

Worksheets("Modèle EDT CLASSE").Copy after:=Sheets(Sheets.Count)
Set O = ActiveSheet
O.Name = "Classe " & Me.Cbo_Liste_Classes.Value & "  Année " & Me.TextBox3.Value
O.Range("B3").Value = Me.Cbo_Liste_Classes.Value
O.Range("F3").Value = Me.TextBox3.Value
For Each CTRL In Me.Controls
    If Not CTRL.Name = "Cbo_Liste_Classes" Then
        If TypeOf CTRL Is MSForms.ComboBox Then O.Range(CTRL.Tag).Value = CTRL.Value
    End If
Next CTRL
End Sub

Et comme j'utilise l'année dans le nom de l'onglet copié, ce petit bout de code qui remplace le slash et l'underscore par un trait d'union :
Code:
Private Sub TextBox3_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
If KeyAscii = 47 Then KeyAscii = 45
If KeyAscii = 95 Then KeyAscii = 45
End Sub
 
Dernière édition:
Bonjour la fil, bonjour le forum,

Merci pour vos réponses.
J'ai adapté les codes pour donner ce que vous verrez dans le fichier joint. Toutefois, il y a eu des modifications, notamment renommer les combobox pour y arriver!
J'arrive pas à vider toutes les combobox avec le bouton "effacer", un message d'erreur apparaît.

Si besoin d'informations supplémentaires, n'hésitez pas.
Merci pour vos contributions.
 

Pièces jointes

Bonjour le fil, bonjour le forum,

Tu n'as pas suivis mes conseil sur l'utilisation de la propriété Tag des comboboxes et c'est bien ton droit. Mais compare ton code de validation au mien. De la même manière on pouvait aussi remettre à zéro toutes les comboboxes avec :

VB:
Private Sub Btn_Effacer_Click()
Dim CTRL As Control

For Each CTRL In Me.Controls
    If Not CTRL.Name = "Cbo_Liste_Classes" Then
        If CTRL.Tag <> "" Then CTRL.Value = ""
    End If
Next CTRL
End Sub
 
Merci bien pour ce retour,
Une précision peut-être, je ne comprends pas grand chose au VBA, car juste débutant, je dirais même essayiste !
J'essaie juste de concevoir de petits outils de travail en agençant ça et là quelques codes.

Qu'à cela ne tienne, J'essaie tout de suite celui que vous proposez.
Merci pour vos orientations et surtout pour votre précieux temps mis à contribution.
 
Re,

je n'ai travaillé que sur l'emploi du temps pour les Classes.
1. J'ai trouvé compliqué et inutile l'utilisation de deux userforms pour agir. J'ai donc simplifié avec un seul
2. Chaque Combobox a comme propriété Tag l'adresse où elle doit renvoyer sa valeur
3. L'Userform n'a plus que deux boutons VALIDER (=[ENTRÉE) et FERMER (=[ÉCHAP.])
4. On passe d'une ComboBox à l'autre à l'aide de la touche de tabulation, Les comboboxes sont ordonnées.
5. Une fois que l'emploi du temps d'une classe a été crée, elle n'apparaît plus dans la liste des CLASSES évitant bug et doublons
6. On peut modifier un emploi du temps de deux manières
a) En modifiant directement dans l'onglet concerné
b) En double-cliquant dans l'onglet concerné sur n'importe quelle cellule de la plage A2:F24. L'userform s'ouvre avec les données de l'emploi du temps. Modifier la ou les données erronées et valider.
7. À la validation d'un emploi du temps (Classe), il est demandé si l'utilisateur souhaite faire un autre emploi du temps
a) si Oui l'Userform se ferme et se réaffiche vierge pour être édité
b) si Non l'Userform se ferme, fin.

Si tu veux utiliser le code dans ton fichier, il te faudra aussi copier/coller la déclaration de variable : Public TEST As Boolean placée dans le module standard : Affiche_Duplik_EDT_Classe. C'est cette variable qui permet de modifier.

Si ça t'inspire, tu pourras faire pareil avec les Emplois du Temps des Professeurs...
 

Pièces jointes

Re,
Excellent, j'aime bien ton approche, ça me convient parfaitement !

J'ai essayé de l'employer pour les emplois du temps professeurs, mais je coince très vite.
Déjà, pas facile de faire cohabiter les deux Userform, donc j'ai dû les séparer pour pouvoir adapter l'emploi du temps professeur.

Vu sa complexité, quelques détails ; il devrait être comme suit :
1- Un prof peut avoir 5 cours différents (par exemple) dans 5 classes différentes. Donc, à chaque fois qu'on sélectionne la classe concernée dans les comboboxes de la rangée "classe", la combobox de la rangée des jours (lundi, mardi etc...) charge les cours correspondants à la classe sélectionnée.
2- Ensuite, il faudra exporter le contenu de la Userform vers le nouvel emploi du temps.

Voici joint ce que j'ai commencé !
Merci.
 

Pièces jointes

- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Retour