Combobox dependantes dictionnary

tabernake Messages postés 2 Date d'inscription   Statut Membre Dernière intervention   -  
f894009 Messages postés 17277 Date d'inscription   Statut Membre Dernière intervention   -
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 17277 Date d'inscription   Statut Membre Dernière intervention   1 713
 
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 16602 Date d'inscription   Statut Contributeur Dernière intervention   3 314
 
Salut F89

Tout à fait d'accord avec toi !!!

1 "+" de gagné pour toi
0
dachiasse Messages postés 1709 Date d'inscription   Statut Membre Dernière intervention   150
 
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 17277 Date d'inscription   Statut Membre Dernière intervention   1 713 > dachiasse Messages postés 1709 Date d'inscription   Statut Membre Dernière intervention  
 
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   Statut Membre Dernière intervention   150 > f894009 Messages postés 17277 Date d'inscription   Statut Membre Dernière intervention  
 
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 17277 Date d'inscription   Statut Membre Dernière intervention   1 713
 
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   Statut Membre Dernière intervention  
 
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 17277 Date d'inscription   Statut Membre Dernière intervention   1 713
 
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 17277 Date d'inscription   Statut Membre Dernière intervention   1 713
 
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   Statut Membre Dernière intervention   150
 
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