faire un tri préalable à l'affichage dans un Combobox

poups

XLDnaute Occasionnel
Bonjour,
Je solicite votre aide

J'aimerais effectué un tri dans le combox2 (UserForm1) en fonction du choix réalisée dans le combobox1 choix relatif aux colones SAV dans une feuille qui doit correspondre à la colone usine dans l'autre.

Ainsi cela me permétrais d'affiché par défaut un nom et le cas échéant pouvoir choisir un autre interlocuteur dans la même usine.

J'éspère avoir été clair ...
Merci d'avance

Poups
 

Fichiers joints

poups

XLDnaute Occasionnel
Re : faire un tri préalable à l'affichage dans un Combobox

Merci a tous les deux !
C'est exactement ce que je voulais faire ....

@Mécano (toute mon enfance !)
Ton lien est tres tres intéréssant, je le met dans mes archives et je vais fouiller encore un grand merci
@Dranerd (j'ai aucune référence)
Tu est un chef merci !
Pourrais tu mettre des commentaires, que je compréne bien
Je dois le reproduire un autre UserForm, avec des conditions beaucoup moins simple

J'aime ce forum !
Poups
 

poups

XLDnaute Occasionnel
Re : faire un tri préalable à l'affichage dans un Combobox

Oups !
Cela ne semble pas marcher sur Excel 2007 ...

Cela bloc sur la fonction "DictionnArbo"
Une idée ???

Merci d'avance
Poups
 

Dranreb

XLDnaute Barbatruc
Re : faire un tri préalable à l'affichage dans un Combobox

Voilà, j'ai mis quelques commentaires.
Si c'est dans un autre classeur ne pas oublier d'ajouter la référence "Microsoft Scripting Runtime" au projet VBA. (en plus du module MDictionnArbo et du module de classe TableIndex)
Par ailleurs si vous voulez utiliser mes dictionnaires arborescents pour des ComboBox en cascades, ou liés sans ordre de choix imposé, j'ai des modules de classes tout faits qui s'occupent de tout.
 

Fichiers joints

Dernière édition:

poups

XLDnaute Occasionnel
Re : faire un tri préalable à l'affichage dans un Combobox

Merci pour les commentaires mr Dranred super !

J'avais bien ajouter la référence "Microsoft Scripting Runtime" dans mon projet VBA.
mais cela bloc a sur la fonction "DictionnArbo"
=> erreur de compilation ou sub non défini

Je suis en excel 2007, le tient 2003? marche tres bien sur mon post !

Merci d'avance a+
poups
 

Dranreb

XLDnaute Barbatruc
Re : faire un tri préalable à l'affichage dans un Combobox

Voulez vous dire que vous avez une erreur de compilation dans le module MDictionnArbo contenant cette fonction ou dans le module de classe TableIndex ?
Vérifiez s'il n'y a pas une référence manquante.
 
Dernière édition:

poups

XLDnaute Occasionnel
Re : faire un tri préalable à l'affichage dans un Combobox

Bonjour Danred,
Sur le cout, je suis largué
J'ai chercher par mot clé dans ta phrase tous ce qui aurrais pu me mettre sur la voie, sans résultat

Mon niveau est tres faible en VB, et en lisant ta phrase cela ne me permet pas de comprendre ce que je dois chercher pour solutioner mon PB:confused:

je pensais à "Dim DictionnArbo As Dictionary" mais c'est pas ca
pourquoi ton fichier marcherais, et pas le mien, c'est le même code ?

Pour moi, VB ne reconnait pas le module MDictionnArbo

Merci d'avance
Poups
 

Dranreb

XLDnaute Barbatruc
Re : faire un tri préalable à l'affichage dans un Combobox

Bonjour
Mais, dans l'explorateur de projets VBA, avez vous seulement glissé déplacé le module MDictionnArbo du projet du classeur DicArbPoups.xls vers celui de votre autre classeur pour y en installer une copie ? Pareil pour le module de classe TableIndex ?
 

poups

XLDnaute Occasionnel
Re : faire un tri préalable à l'affichage dans un Combobox

Je suis une purge ! :mad:

Je n'avais pas fait attention qu'il y avait une tableindex ..
Je n'avais encore j'amais utilisé cela, je vais donc regarder cela de pres

Je suis biensur intéressé par :
Par ailleurs si vous voulez utiliser mes dictionnaires arborescents pour des ComboBox en cascades, ou liés sans ordre de choix imposé, j'ai des modules de classes tout faits qui s'occupent de tout.
Merci beaucoup pour l'aide et la patience, dans d'autre forum il m'aurait déjà jeté !
Poups

PS cela marche !
 

Dranreb

XLDnaute Barbatruc
Re : faire un tri préalable à l'affichage dans un Combobox

J'ai donc simplement équipé le classeur de 3 modules de classes supplémentaires pour la gestion des ComboBox chainés, c'est à dire liés ou en cascades.
 

Fichiers joints

poups

XLDnaute Occasionnel
Re : faire un tri préalable à l'affichage dans un Combobox

Merci beaucoup !

J'ai quand m^me une question
Je ne vois pas pas comment le tri est fait, et surtout ou sont les conditions du tri ?
est ce que tous ceci n'est valable que pour les combobox ?

Poups
 

poups

XLDnaute Occasionnel
Re : faire un tri préalable à l'affichage dans un Combobox

Je suis comme d'hab largé ...

L'affichage par défaut du combobox2 est lier à la colone D de la feuille "Données_Matériel" quand une selection dans le combobox 1 est réalisé (colone A), l'interlocuteur colone D est lié à un SAV(usine) colone C.

La liste de choix du combobox2 doit porté sur la feuille "Données_SAV" et tout les acteurs de ce SAV(usine) colonne G

Dans le cas présent la liste lié au combobox2 est la feuille "Données_Matériel" colone C et D

Comme j'ai pas encore tous compris, j'ai du mal a analysée les choses
Merci d'avance pour mes éclairsisements
Poups
 

Dranreb

XLDnaute Barbatruc
Re : faire un tri préalable à l'affichage dans un Combobox

Bonjour.

Les 3 modules de classes sont uniquement dédiés aux ComboBox
Dans ComboBoxLiés chaque ComboBox a à sa disposition deux dictionnaires arborescents à un seul niveau chacun, l'un pour tout le tableau et l'autre résultant d'un filtrage selon la liste des lignes possibles restantes en fonction des choix effectués dans les autres
Dans ComboBoxCasc (qui est plus rapide du coup) il n'est établi qu'un seul dictionnaire arborescent a autant de niveau qu'il y a de ComboBox, le premier recevant directement ses clés. Les suivants reçoivent les sous-dictionnaires successifs résultant des choix. Il n'y a plus tri mais plutôt sélection instantanée d'un sous ensemble préétabli.

J'ai apparemment mal interprété la demande car je ne me suis pas basé sur la colonne G des données SAV pour la liste du ComboBox2 mais sur la colonne B des Données_Matériel avec les noms correspondant de la colonne D.
Donc B et D et non C et D comme vous dites. Mais n'est-ce pas mieux ainsi ? Comme ça les données SAV ne sont qu'un annuaire, vous n'êtes pas obligé d'y noter l'usine, c'est toujours déduit des liens trouvés pour d'autres produits dans les données matériel. Mais évidemment s'il est aussi porté dans cet annuaire des personnes qui ne sont interlocuteur principaux d'aucun autre produit spécifique, ça ne va pas.
Dans ce cas il faudrait plutôt fabriquer le DicUs à partir des colonnes G et A de Données_SAV
 
Dernière édition:

poups

XLDnaute Occasionnel
Re : faire un tri préalable à l'affichage dans un Combobox

Merci de tes présisions, je pensais avoir compris, mais je génaire une erreur ...

Je dois bien faire une arborescence sur sur la feuille SAV...

Merci de ta patience
poups
 

Fichiers joints

Dernière édition:

Dranreb

XLDnaute Barbatruc
Re : faire un tri préalable à l'affichage dans un Combobox

C'est normal.
Vous ne pouvez pas fabriquer un dictionnaire arborescent à partir de colonnes de plages sources différentes. Mais je soupçonne un simple oubli de changer PlgMat en PlgNom pour la 2ième colonne (la A) pour DicUs: car vous savez bien que cette colonne ne contient pas de nom dans PlgMat.
Le DicNm ne sert plus à grand chose, d'accord, mais laissons le quand même, si vous voulez, pour pouvoir consulter sans choisir de produit. Surtout si le point suivant ne peut être résolu et s'il faut donc procéder par analogie :
Mais pourquoi diable consultez vous ensuite le DicUs issu maintenant de PlgNom avec la colonne G de PlgMat (KTR) ?
Il semblerait qu'on puisse le consulter avec la colonne C, la 3ième de PlgMat, comme ça on n'est pas obligé de procéder par analoigie (prendre comme clé ce qui se trouve en G de SAV pour le nom trouvé en Matériel grace au dictionnaire DicNm)
Mais vérifions alors si ça existe bien !

Attention : en remplaçant les évènement Click par Change et en m'arrangeant pour que les champs se vident quand il n'y a pas de correspondance, je me suis aperçu d'une incohérence: En colonne G de SAV "Déville", en colonne C de Mat "Deville"
 

Fichiers joints

Dernière édition:

poups

XLDnaute Occasionnel
Re : faire un tri préalable à l'affichage dans un Combobox

Bonjour Dranreb,
Je dois me résoudre a dire je ne comprend rien
J'ai essayé de d'inversé les choses pour retomber sur mes pates
Mais cela ne marche pas, je n'ai donc rien compris ...
SFF2 => le userform que tu as fais

SFF3 => le userform que j'ai modifié
avec :
Définition de la zone du tableau "Données_Matèriels"= A2:G2
Affichage dans le combobox1 colone = A
Zone coparaison (Clé?) = C

Définition de la zone du tableau "Données_SAV"= A2:K2
Affichage dans le combobox2 colone = A
Zone coparaison (Clé?) = G
Affichage par défaut = "Données_Matèriels" colonne C
Affichage si modif = "Données_SAV"= A2 en fonction de "Données_SAV" colonne (clé?) G


Merci de ta patience, y a du boulo ...
Poups
 

Fichiers joints

Dernière édition:

Dranreb

XLDnaute Barbatruc
Re : faire un tri préalable à l'affichage dans un Combobox

Bonjour.
Mais si, mais c'est nouveau, alors c'est difficile à combiner correctement tout ça. Pour moi aussi ça sort un peu des sentiers battus.
Là, tout de suite, je tombe sur une erreur bête dans l'Userform_Initialize: une affectation des clés d'un dictionnaire (probablement correctement construit, lui), ce qui est un tableau et non un Dictionary, à un objet de type Dictionary. Et dans un Set ça fait comme "Incompatibilité de type" sauf que le message est "Objet requis" si l'expression qu'on tente d'affecter n'en est pas un. Je vais enlever ce ".Keys" au bout et continuer par F5, mais pour tout vous dire j'ai déjà l'esprit ailleurs…
Comment ça :
J'ai essayé de d'inversé les choses pour retomber sur mes pates
Ah mais je crois comprendre: en fait la colonne C de PlgMat et la colonne G de PlgNom sont un critère de sélection mutuelle et réciproque entre les deux ?!. Essayons de faire cela "en stéréo", je veux dire de façon symétrique, dans un seul Userform, voulez vous ?
C'est bien d'essayer de vous en sortir un max tout seul, tous les demandeurs ne sont pas comme vous, loin de là, mais là vous auriez dû m'en parler plus tôt !
On devrait pouvoir s'en sortir avec 6 Dicionary, en s'inspirant un tout petit peu de la façon de procéder de ComboBoxLiés et de ComboBoxCasc: 2 globaux à 1 niveau, 2 à 2 niveaux, le 1èr étant le critère commun, et 2 momentanés dont les clés seront systématiquement les List des Combobox. Lorsqu'un ComboBox change et que sont ListIndex vaut -1, on affecte au DicoTemp de l'autre son dictionnaire global et de toute façon toujours aussitôt les clés de ce DicoTemp à son List. Si le ListIndex est > -1 on fait pareil sauf qu'on affecte à son DicoTemp le sous dictionnaire attaché à la valeur du critère commun dans son Dico à 2 niveaux. Vous voyez ce que je veux dire ? Je vais entreprendre de l'écrire de mon coté.

À +
 
Dernière édition:

poups

XLDnaute Occasionnel
Re : faire un tri préalable à l'affichage dans un Combobox

Je pense avoir suivi le résonement, tous en étant incapable de faire le code ...
Je suis autodidact en VB,
Je regarde, j'éssais de comprendre comment ca marche, j'adapte comme je peux pour faire coller à mes besoins, jusque la cela marche pas trop mal, mais la, je crois avoir atteint la limite de ma méthode.
Sur le cout, je ne peux malheureusement qu'attendre une de tes propositions pour me remettre les idées en place
Merci et A+
 

Discussions similaires


Haut Bas