Combobox dependantes dictionnary

Fermé
tabernake Messages postés 2 Date d'inscription mardi 13 octobre 2020 Statut Membre Dernière intervention 14 octobre 2020 - 13 oct. 2020 à 15:26
f894009 Messages postés 17185 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 15 avril 2024 - 16 oct. 2020 à 07:14
Bonjour à tous,

Étant débutant dans le VBA, mais grâce à l'aide de votre forum j'ai pu avancer sur ma macro, mais la je bloque depuis quelques jours.

Je vous explique :

Pour mon entreprise, je dois effectuer une macro qui permet à des managers de voir des informations.

J'ai donc créer un formulaire de recherche :


Hors lorsque je sélectionne un manager, je voudrais que le choix des agents se réduit, afin que le manager ne voit que ses agents, et pareil pour le stage, je voudrais que le manager voit que les stages de l'agent qu'il a sélectionné.

Ainsi une fois ces 3 combobox remplie que ça m'affiche dans la textbox seulement les dates disponibles pour le stage demandé.

Les informations concernant le manager, l'agent et le stage sont dans un classeur nommé "Besoin"

Les informations concernant la date et le stage est répété aussi dans un classeur nommé "Session"

Mon code à l'heure d'aujourd'hui me permet pas de réduire les choix possibles dans les combobox

Voici le code :
Private Sub Quitter_Click()
Unload Me
End Sub

Private Sub UserForm_Initialize()
Me.ComboBox1.Clear
Dim F As Worksheet

Set F = Sheets("Besoin")
Set mondico = CreateObject("Scripting.Dictionary")

a = F.Range("D2:D" & F.[D65000].End(xlUp).Row) ' tableau a(n,1) pour rapidité

For i = LBound(a) To UBound(a)
If a(i, 1) <> "" Then mondico(a(i, 1)) = ""
Next i
'--avec tri
temp = mondico.keys
Call Tri(temp, LBound(temp), UBound(temp))
Me.ComboBox1.List = temp

End Sub

Sub Tri(a, gauc, droi) ' Quick sort
ref = a((gauc + droi) \ 2)
G = gauc: d = droi
Do
Do While a(G) < ref: G = G + 1: Loop
Do While ref < a(d): d = d - 1: Loop
If G <= d Then
temp = a(G): a(G) = a(d): a(d) = temp
G = G + 1: d = d - 1
End If
Loop While G <= d
If G < droi Then Call Tri(a, G, droi)
If gauc < d Then Call Tri(a, gauc, d)
End Sub

Private Sub ComboBox1_Change()

Dim F As Worksheet
Dim n As Variant

Dico_2:
Set F = Sheets("Besoin")
Set mondico = CreateObject("Scripting.Dictionary")

a = F.Range("B2:B" & F.[B65000].End(xlUp).Row) ' tableau a(n,1) pour rapidité

For i = LBound(a) To UBound(a)
If a(i, 1) <> "" Then mondico(a(i, 1)) = ""
Next i
'--avec tri
temp = mondico.keys
Call Tri(temp, LBound(temp), UBound(temp))
Me.ComboBox2.List = temp

End Sub


En espérant que vous pussiez m'aide;

Bien cordialement

Configuration: Windows / Firefox 78.0

5 réponses

f894009 Messages postés 17185 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 15 avril 2024 1 701
15 oct. 2020 à 11:01
Bonjour,
Pas besoin de fichier
Ben si, car il semblerait que vous tabliez sur de l'Access, voir autre chose. Le gars lui c'est de l'Excel.
De plus il ne doit pas connaitre les requetes SQL. Alors.....
Il est donc necessaire de voir comment sont agencees ses donnees.
1
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
15 oct. 2020 à 12:08
Salut F89

Tout à fait d'accord avec toi !!!

1 "+" de gagné pour toi
0
dachiasse Messages postés 1709 Date d'inscription samedi 12 septembre 2020 Statut Membre Dernière intervention 13 mai 2021 148
15 oct. 2020 à 14:04
Salut,
Les agents, managers, etc. Il les stocke où ? Ils sont bien dans l’ordinateur, sans doute dans une autre feuille.
Pour manipuler des données, la base de données est souvent inévitable. Et il n’a pas besoin d’Access ni aucun autre SGBR.

Ma réponse est simplement ce que je ferais.
Avec plus de détails, une table, une feuille. En ligne 1, les champs en colonne et à partir de la ligne 2, chaque ligne est un enregistrement.
0
f894009 Messages postés 17185 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 15 avril 2024 1 701 > dachiasse Messages postés 1709 Date d'inscription samedi 12 septembre 2020 Statut Membre Dernière intervention 13 mai 2021
15 oct. 2020 à 15:25
Re,
Tout à fait Thierry, mais ce qui intéresse le gars c'est le code et ceci peut importe comment les données sont agencées. Ceci dit la méthode de structure des données que vous avancez est ce que la plupart d'entre nous font.
0
dachiasse Messages postés 1709 Date d'inscription samedi 12 septembre 2020 Statut Membre Dernière intervention 13 mai 2021 148 > f894009 Messages postés 17185 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 15 avril 2024
Modifié le 15 oct. 2020 à 15:44
Si je comprends bien, l’auteur va peut-être dans une mauvaise direction et tu pourrais le conforter dans cette direction.
Comme tu dis, c’est ce que tout le monde ferait, alors pourquoi lui, qui galère, ferait autrement ?
J’ai proposé un algorithme qu’il peut retranscrire en vba. Je n’ai pas Excel, mais Calc, ce soir j’essaye ce que je propose.
Donc pour le moment, c’est théorique. Je vais le mettre en pratique et ferai des tests. Je confirmerai ou non l’efficacité de mon idée.
Comme j’ai lu sur un cours de vba, tant que le résultat est satisfaisant, il peut y avoir différentes méthodes.
J’oubliais, mais en fait, tu corrigerais ce qu’il a fait. Pour ma part, je repartirais de 0. Mais dans les instructions de l’algorithme, il peut commencer à modifier dès que les étapes de son modèle diffèrent du mien. Par exemple, s’il a déjà créé les tables, il peut sauter l’étape de création.
0
f894009 Messages postés 17185 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 15 avril 2024 1 701
13 oct. 2020 à 17:05
Bonjour,

Pouvez mettre votre fichier a dispo, sera plus simple pour vous aider

Pour transmettre un fichier,
Veillez a ce qu'il n'y ait PAS DE DONNEES CONFIDENTIELLES
il faut passer par un site de pièce jointe tel que cjoint.com

Allez sur ce site : https://www.cjoint.com/
Clic sur parcourir,
Cherche ton fichier,
clic sur ouvrir,
Clic sur "Créer le lien cjoint",
Copier le lien,
Revenir ici le coller dans une réponse...

ou
'mon partage
https://mon-partage.fr/
0
tabernake Messages postés 2 Date d'inscription mardi 13 octobre 2020 Statut Membre Dernière intervention 14 octobre 2020
14 oct. 2020 à 08:48
Bonjour,

merci de prendre le toi de vouloir m'aider, mais je ne peux malheuresement pas donner ce fichier, car porteur de donnée confidentielle.

Je peux juste rajouter que ces données sont variables, c'est a dire que un manager peut ne pas avoir les mêmes agents chaque mois, fréquence à laquelle ils vérifient leur demande de formation.
0
f894009 Messages postés 17185 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 15 avril 2024 1 701
15 oct. 2020 à 07:07
Bonjour,

Faites un fichier avec des données non confidentielles!
Mais qui soient représentatives pour faire un code qui correspond a ce que vous demandez.
Simple, non?
0
f894009 Messages postés 17185 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 15 avril 2024 1 701
16 oct. 2020 à 07:14
Bonjour,

Faites ce que vous voulez.
Ce que nous voudrions, c'est que tabernake donne de ses nouvelles..
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
dachiasse Messages postés 1709 Date d'inscription samedi 12 septembre 2020 Statut Membre Dernière intervention 13 mai 2021 148
15 oct. 2020 à 07:42
Salut,
Pas besoin de fichier.
Un manager gère un ou plusieurs agents. Un agent propose un ou plusieurs stages.
Donc, on a la table Manager qui est reliée à la table Agent par l'association Gérer qui contient l'identifiant du manager et l'identifiant de l'agent. On a la table Agent, la table Stage et la table Date qui sont reliées par l'association ternaire Proposer qui contient l'identifiant de l'agent, l'identifiant du stage, l'identifiant de la date et surtout un booléen disponible qui est VRAI par défaut et qui devient faux lorsque la date est dépassée (on peut supprimer l'enregistrement de cette date) ou lorsque l'agent n'est pas libre à cette date.
Je ne fais pas de vba, je n'ai pas Excel. Mais en utilisant la méthode CRUD, Create, Read, Update, Delete, tu peux créer des classes Agent, Manager, etc. et tu construis les méthodes pour lire (SELECT), mettre à jour (UPDATE) et supprimer (DROP)
-1