XL 2019 Renseigner une combobox en fonction d'une autre

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

  • EDT_BOBBY237.xlsm
    31.4 KB · Affichages: 10

Bebere

XLDnaute Barbatruc
bonjour
bobby bienvenue
mis un début de code
il faudrait plus d'explication
exemple Cbo_Liste_Matières correspond à quoi dans bdd,supposition L2:L12
savoir ce qu'il faut entrer dans toutes ces combobox et faut il remplir le tout
 

Pièces jointes

  • EDT_BOBBY237.xlsm
    36.6 KB · Affichages: 4

Robert

XLDnaute Barbatruc
Repose en paix
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:

Bobby237

XLDnaute Nouveau
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

  • EDT_BOBBY237_15072019.xlsm
    191 KB · Affichages: 7

Robert

XLDnaute Barbatruc
Repose en paix
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
 

Bobby237

XLDnaute Nouveau
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.
 

Robert

XLDnaute Barbatruc
Repose en paix
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

  • Bobby237_ED_v01.xlsm
    183.3 KB · Affichages: 8

Bobby237

XLDnaute Nouveau
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

  • Bobby237_EDT PROFS v1.0.xlsm
    148.6 KB · Affichages: 12

Discussions similaires

Statistiques des forums

Discussions
311 732
Messages
2 081 995
Membres
101 857
dernier inscrit
mt60400