Combobox dependantes dictionnary

Signaler
Messages postés
2
Date d'inscription
mardi 13 octobre 2020
Statut
Membre
Dernière intervention
14 octobre 2020
-
Messages postés
15379
Date d'inscription
dimanche 25 novembre 2007
Statut
Membre
Dernière intervention
23 octobre 2020
-
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

Messages postés
15379
Date d'inscription
dimanche 25 novembre 2007
Statut
Membre
Dernière intervention
23 octobre 2020
1 381
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.
Messages postés
16258
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
22 octobre 2020
3 051
Salut F89

Tout à fait d'accord avec toi !!!

1 "+" de gagné pour toi
Messages postés
185
Date d'inscription
samedi 12 septembre 2020
Statut
Membre
Dernière intervention
22 octobre 2020
9
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.
Messages postés
15379
Date d'inscription
dimanche 25 novembre 2007
Statut
Membre
Dernière intervention
23 octobre 2020
1 381 >
Messages postés
185
Date d'inscription
samedi 12 septembre 2020
Statut
Membre
Dernière intervention
22 octobre 2020

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.
Messages postés
185
Date d'inscription
samedi 12 septembre 2020
Statut
Membre
Dernière intervention
22 octobre 2020
9 >
Messages postés
15379
Date d'inscription
dimanche 25 novembre 2007
Statut
Membre
Dernière intervention
23 octobre 2020

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.
Messages postés
15379
Date d'inscription
dimanche 25 novembre 2007
Statut
Membre
Dernière intervention
23 octobre 2020
1 381
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 : http://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/
Messages postés
2
Date d'inscription
mardi 13 octobre 2020
Statut
Membre
Dernière intervention
14 octobre 2020

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.
Messages postés
15379
Date d'inscription
dimanche 25 novembre 2007
Statut
Membre
Dernière intervention
23 octobre 2020
1 381
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?
Messages postés
15379
Date d'inscription
dimanche 25 novembre 2007
Statut
Membre
Dernière intervention
23 octobre 2020
1 381
Bonjour,

Faites ce que vous voulez.
Ce que nous voudrions, c'est que tabernake donne de ses nouvelles..
Messages postés
185
Date d'inscription
samedi 12 septembre 2020
Statut
Membre
Dernière intervention
22 octobre 2020
9
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)