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
 

Pièces jointes

  • ESSAI_SFF2013.xlsm
    42.4 KB · Affichages: 248

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
 

Pièces jointes

  • DicArbPoups.xls
    231.5 KB · Affichages: 119
  • DicArbPoups.xls
    231.5 KB · Affichages: 115
  • DicArbPoups.xls
    231.5 KB · Affichages: 113
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"
 

Pièces jointes

  • DicArbPoups.xls
    240.5 KB · Affichages: 117
  • DicArbPoups.xls
    240.5 KB · Affichages: 114
  • DicArbPoups.xls
    240.5 KB · Affichages: 104
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
 

Pièces jointes

  • DicArbPoups.xls
    283 KB · Affichages: 176
  • DicArbPoups.xls
    283 KB · Affichages: 191
  • DicArbPoups.xls
    283 KB · Affichages: 187
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+
 

Dranreb

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

Je me doutais bien que mon projet tel que je l'expliquait ne pouvait se comprendre qu'en gros.
Mais ne vous excusez donc pas d'être autodidacte ! Surtout que les dictionnaires arborescents, c'est nouveau pour vous. Mais assez simple à utiliser, une fois compris que ce sont des ensembles de dictionnaires imbriqués de façon hiérarchisée dont le dernier niveau fournit directement la liste des lignes sources de tout le chemin de l'arborescence, liste qui n'en comporte chaque fois qu'une dans votre cas car il n'y a jamais de doublon sur l'ensemble vu qu'il n'y en a pas dans les seconds niveaux: la colonne A des deux listes.
En tout cas voila ce que ça donne.
Remarque: la symétrisation a entrainé que la liste Mat n'a plus besoin d'être classée par Matériel: les dictionnaires arborescents le sont de toute façon.
 

Pièces jointes

  • DicArbPoups.xls
    236.5 KB · Affichages: 83
  • DicArbPoups.xls
    236.5 KB · Affichages: 83
  • DicArbPoups.xls
    236.5 KB · Affichages: 86
Dernière édition:

poups

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

Merci Dranred,
Je vais essayé plus sérieusement tous cela ...
J'en ai fait une hier en plus sur l'userform, mais c'était facile dans le sens ou j'ai copier tous ce que tu a fait ;)
Je dois finir cet userform, mais j'en ai d'autre a faire deriere, je vais tres rapidement savoir si je suis capable de refaire cela tous seul ..

Une question bête, est il possible dans un combobox de faire une selection type (Oui/Non ou liste de choix réduite) sans passer par une table sur une feuille excel ?

Merci de ton aide présieuse
Poups
 

Dranreb

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

Bonjour.
Je ne comprend pas trop la question. N'est il pas évident que dans ma dernière version plus aucun List de ComboBox n'est alimenté à partir de tables sur feuille ? Regardez bien: ils sont toujours alimentés par les Keys d'un Dictionary, ce qui n'est rien d'autre qu'un tableau en tout point semblable à celui qu'on peut fabriquer à l'aide de la fonction Array("oui", "non"). Mais pour des informations de ce type, à deux états, voire un troisième (indéfini) on utilise volontiers plutôt des CheckBox.
 

poups

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

Bonjour Dranred,
Bon j'en est fait une qui marche ...
Dans la même table 2 combobox avec lien résiproque

Mon probleme, si j'ai mal sélectionné une des combobox je ne peut plus revir en arriere
Comment faire pour réinitialisé les combobox, et/ou table index ?

J'ai pensé à un bouton avec une commande simpe de type :
J'ai essayé :
Me.CbxTCI.Clear
Me.CbxTCI = ""
mais ca plante

Merci d'avance
Poups
 
Dernière édition:

Dranreb

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

Bonsoir.
Là encore vous auriez dû m'en parler plutôt. Si tout est pris d'un seul tableau dans une feuille c'est considérablement plus simple: vous ne vous en occupez tout simplement plus, vous laissez faire un objet ComboBoxLiés. Il est d'ailleurs équipé d'une méthode Nettoyer pour effacer tous les ComboBox qu'on lui aura annoncés par des Add. D'abord il faut le déclarer Dim WithEvents en tête du module, dans l'Userform_Initialize commencer par faire un Set dessus de = New ComboBoxLiés, spécifier à sa méthode Plage la plage couvrant le tableau, puis les Add Me.ComboBoxX,Colonne, enfin un Actualiser et c'est parti !
Il ne vous reste plus qu'à sélectionner votre objet dans la liste de gauche qui surmonte la fenêtre de code et choisir les procédures évènements qu'il vous faut dans celle de droite. Le role de chaque propriété, chaque évènement et chaque méthode est expliqué dans le module de classe ComboBoxLiés.

Remarquez, je suis tombé sur le même problème en le mettant au point, pourquoi croyez vous que j'y utilise une variable SExécuteDéjà ? C'est un coup à saturer la pile d'appel des sous programmes si chacun de vos deux ComboBox_Change provoque, avant d'avoir pu se terminer, l'exécution de celui de l'autre !
 
Dernière édition:

poups

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

Bonjour Draned,
Je vais donc expliquer les choses depuis le début :

Depuis 6 mois, je cherche à modernisé des documents "ordre de mission" dans le cadre d'un SAV usine
Le logiciel le plus universel est Excel, nous devons communiquer avec de toutes petites structures qui n’ont souvent rien d'autre ...
L'autre avantage, ce sont les onglets, différentes infos en fonction des onglets (Fiche ordre de mission/rapport/bilan financier/, etc ...)

Jusqu'à maintenant tous étaient faits sous le tableur Excel, beaucoup de travail de saisies pour chaque feuille
J'ai automatisé cela sous Excel en remplissant des casses automatiquement par des rechercheV et H via des bases que j’utilise toujours, et en générant un nouveau document Excel "lite"
Mon fichier initial fonctionne très bien, mais les liens Excel ne sont pas toujours stables, l'effacement des cellules m’oblige a régénérer les formules etx ...

J'ai commencé d'intégrer VBA, et plus j'avance plus je me dis ça c'est bien, etc ...
Je me suis rendu à l'évidence que la l'entrée des données par VBA était la solution !

Tous un tas de modules qui fonctionne (envoye de mail en auto / remplissage d'un document World / transfert de donnée entre documents Excel ext ....)

J'avance petit à petit et toutes les idées sont bonnes à prendre
Je te joins pour avoir une idée globale mon nouveau fichier et l'ancien avec toutes les fonctions
cela ne doit ne pas être parfait, mais pour quelqu’un qui n’y connaissait rien il y a 6 mois je suis comptant de moi ça marche c’est l’essentiel ...

Merci de tes conseils

Poups
 
Dernière édition:

poups

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

Mon fichier actuellement utilisée est trop lourd, tampi ! ....

L'idéal serais incrémenter les données dans un tableau et pouvoir les réutilisés (nouveau fichier) ou les mettres à jour (modification) et, de même pour les bases sources.
J'en parle maintenant parce que cela va venir ...

Merci beaucoup !
Poups
 

Dranreb

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

Bonjour.
Je ne comprend pas bien pourquoi dans la feuille Agence vous voulez utiliser la colonne F comme lien entre la colonne A et la colonne I. Il y a me semble-t-il déjà un lien implicite qui est un certain recouvrement de mêmes lignes tout simplement. Un certain nombre de lignes portent un certain code, un certain nombre d'autre lignes portent un certain nom. Ce n'est que si des données sont à prendre de feuilles différentes qu'on est obligé de se programmer soit même une gymnastique spéciale avec des dictionnaires arborescents s'appuyant sur un troisième élément commun aux deux. Dans le cas où tout est pris d'une même feuille un objet ComboBoxLiés se débrouille tout seul avec les ComboBox qu'on lui aura indiqués aux Add, en même temps que les colonnes d'où doivent être tirées leurs List. Vous ne prenez alors plus en charge les évènements Change des ComboBox mais l'évènement Bingo du ComboBoxLiés qui vous fourni directement en paramètre la liste de numéros de lignes où tout correspond aux choix effectués. C'est beaucoup plus simple. ComboBoxLiés utilise en interne des ComboBoxMembre équipés des Dictionary nécessaires à son travail, bref, il se charge vraiment tout seul de toute cette intendance ennuyeuse !
N'hésitez pas à me poser au plus vites les questions qui vous viennent à l'esprit s'il y a quelque chose que vous ne comprenez pas dans ce que je dis.
À +
 
Dernière édition:

poups

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

En faite sur le cout tu as raison, mais la base va être modifé ...
Je l'avais adapté à la recherche V sur excel ou les doublons était interdit
La colone I est importante c'est le service auquel les personnes sont rataché
Je vais quand même faire un essai comme tu me la proposé pour voir

Il y a un PB sur les combobox liée de l'onglet matériel, quand on les modifies plusieurs fois de suite cela revoie une erreur, je n'ai pas trouvez la cause

A+

Incrémenté les données dans un tableau je s'ai faire
Par contre rechercher les infos pour éventuellements les modifiers via mon userform et réenregistrer les éléments sur la ligne dont il sont issu je n'ai aucune idée comment faire
 

Dranreb

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

À un moment donné vous envoyez dans CbxDiv un texte qui n'est pas dans sa List.
Or dans CbxDiv_Change vous n'initialisez pas son VLgn quand CbxDiv.ListIndex = -1
C'est encore une raison d'utiliser de préférence des objets de type ComboBoxCasc ou ComboBoxLiés chaque fois que possible: Quand les ListIndex des ComboBox qu'on leur a demandé de gérer sont à -1, ils gardent ça pour eux ! : Ils ne vous préviennent que lorsqu'une ou plusieurs lignes peuvent vous intéresser.
Que ce soient les dictionnaires arborescents utilisés dans des dispositifs spéciaux de votre crû ou les résultat trouvés par ComboBoxCasc ou ComboBoxLiés, ils rendent tous toujours des numéros de lignes relatifs aux débuts des plages dont ils sont issus. Récupérer une de ces ligne dans un tableau VLgn puis une colonne dedans, on sait déjà le faire, non ? L'inverse marche tout aussi bien : affecter une valeur à un élément de VLgn, puis réécrire VLgn dans sa ligne: il suffit d'écrire les affectations à l'envers: échanger les expressions de part et d'autre du signe "="
 
Dernière édition: