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

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.
 

Fichiers joints

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:

poups

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

Bonjour Dranred,
Merci de toutes ces infos, pour mieux les intégrer si tu pouvais me faire un exemple d'utilisation des "ComboBoxCasc" et "ComboBoxLiés" je ne vois (comprend) pas trop toutes les suptilitées ...

Une petite choses si tu peux encore m'aider, une chose qui marchais et qui ne marche plus
Onglet "matériel" zone "Gestion SAV" l'interlocuteur s'affiche mais pas les infos liées, comme si la table index n'avait pas encore l'info ??? Je ne comprend pas pourquoi .... (comme d'hab)

Merci Poups
 
Dernière édition:

Dranreb

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

Bonsoir.
Les affectations aux contrôles sont mal placées dans CbxMat_Change : elles doivent être effectuées à la fin comme dans CbxNom_Change. Vous affectez le nom à CbxNom avant que le DicNom soit rectifié et qu'il ait reçu ses Keys dans sa List.
De plus dans le CbxNom_Change il en manque une partie pour qu'il fonctionne de façon symétrique à l'autre en limitant les matériels pouvant être choisis si un nom est d'abord choisi. Est-ce voulu ?

La conversion en .xls se passe mal chez moi, il ne veut pas sortir du mode création parce qu'un bouton de commande est mal implanté dans une feuille. Je ne peux pas faire de tests. Rejoignez le au format .xls
Mais dans les déclaration en tête je suppose qu'une déclaration comme ça ce serait pas mal:
VB:
Dim WithEvents CLAge As ComboBoxLiés
Et dans l'Userform_Initialize:
VB:
With FDonAge
   Set PlgAge = .[A2:Q2].Resize(.Cells(.Rows.Count, "A").End(xlUp).Row - 1): End With
Set CLAge = New ComboBoxLiés
CLAge.Plage PlgAge
CLAge.Add Me.CbxTCI, "A"
CLAge.Add Me.CbxTCS, "I"
CLAge.Actualiser
Et remplacez vos CbxTCI_Change et CbxTCS_Change par:
VB:
Private Sub CLAge_BingoUn(ByVal Ligne As Long)
Dim VLgn()
VLgn = PlgAge.Rows(Ligne).Value
Me.LabTCI1 = VLgn(1, 4)
Me.LabTCI2 = VLgn(1, 15)
Me.LabADV1 = VLgn(1, 16)
Me.LabADV2 = VLgn(1, 17)
'Me.CbxTCS = VLgn(1, 9) Oups ! Pas celui là !
Me.LabTCS2 = VLgn(1, 11)
Me.LabTCS3 = VLgn(1, 14)
Me.LabAgence = VLgn(1, 5)
Me.LabCodAG = VLgn(1, 6)
End Sub
Vous voyez ça reste un peu dans le style de ce qu'on a écrit mais en 10 fois plus simple.

Et j'allais oublier, dans Initialise_Click ne touchez plus aux ComboBox sans cela il risque de réagir comme si l'opérateur l'avait effacé en y mettant un éventuel seul autre choix possible, mettez :
VB:
CLAge.Nettoyer
À +
 
Dernière édition:

poups

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

Bonjour,
J'ai fais vite fait les modifs, cela semble marcher, du cout mon boton initalisation ne marche plus, je vais regarder !
Je vais creuser cela Merci encore, je vais trenter de mettre en pratique cela dans l'onglet suivant "comboxliées"

Cela a rien a vooir mais j'ai un logo a mettre "image1" impossible de la faire s'affiché, pourtant cela marche sur un fichier tous simple et pas sur le mien ...

A+
poups
 
Dernière édition:

Dranreb

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

Bonjour.
C'est pourquoi je vous ai dit d'y remplacer les deux instruction CbxTCS = "" et CbxTCI = "" par :
VB:
CLAge.Nettoyer
Perso, un logo fixe je le mets plutôt en place dans la fenêtre de propriétés. Si ce n'est pas toujours la même image essayez :
VB:
Me.Image1.Picture = LoadPicture("C:\Users\JondSyL\Documents\ModeleSFF\KSB.bmp")
 

poups

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

Pour "CLAge.Nettoyer" Ok cela marche, mais cela ne réinitalise pas les Label liés, ils ne doivent encore pas être au bon endroit je vais regarder

Pour l'image c'est un logo donc toujour pareil, je ne vois pas dans les propriétées ou je peux mettre l'image, ou l'emplacement ?

Merci Poups
 

poups

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

Les comboboxliées, ont elles d'autre fonction caché ?
Le but étant pour moi d'afficher dans le "comboboxliée" une plage de valeur en fonction d'un critére, pour le cout cela ne marche plus comme ca ..., cela marchait avant faut il que je revienne en arriére (Comboboxliées etant a considérer comme un exemple)

et le ComboBoxCasc cela fait quoi ?

Merci Poups
 

Dranreb

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

Pour "CLAge.Nettoyer" Ok cela marche, mais cela ne réinitalise pas les Label liés
Exact. Pour ne pas être obligé d'écrire le code deux fois vous pourriez écrire une Private Sub GarnirAge(TVgn()) et passer ce VLgn en paramètre à cette procédure.
Prenez l'habitude d'utiliser les listes déroulantes qui surmontent la fenêtre de code. Ça vaut pour les objets implantés à l'aide de Dim WithEvents mais aussi pour tous les objets à évènements à votre disposition. j'ai vu une TextBox8_change, avec un c minuscule qui prouve qu'elle n'avaient pas été utilisées pour ce contrôle.
Sélectionnez dans celle de gauche votre objet CLAge, et dans celle de droite Change. Ça vous implantera un modèle de procédure CLAge_Change. C'est celle qu'il vous faut pour vider vos labels, en passant à GarnirAge un VLgn juste redimensionné mais vide, tout spécialement si NbrLgn = 0.
dans les propriétées ou je peux mettre l'image
Propriété Picture. Quand vous la sélectionnez, un bouton "…" apparait, cliquez dessus: il vous demande le fichier image à charger.
Les comboboxliées, ont elles d'autre fonction caché ?
Oui, lisez les commentaires explicatifs en tête de chaque méthode.
Le but étant pour moi d'afficher dans le "comboboxliée" une plage de valeur en fonction d'un critére, pour le cout cela ne marche plus comme ca ..., cela marchait avant faut il que je revienne en arriére
Pas sûr de comprendre. ComboBoxLiés veille à ne proposer qu'une liste de choix compatibles avec ceux déjà effectués dans les autres ComboBox dont il a la charge. Ne revenez pas en arrière: si vous avez besoin d'envoyer par exemple dans une ListBox plusieurs lignes compatibles avec l'ensemble des choix effectués dans les ComboBox c'est possible avec une procédure Résultat : elle se déclenche chaque fois qu'un des ComboBox change, mais à condition qu'il y ait au moins une ligne correspondante (NbrLgn rendu > 0 au Change)
le ComboBoxCasc cela fait quoi ?
Pratiquement la même chose sauf qu'il est plus rapide mais ne permet que des choix en cascades, c'est à dire toujours dans le même ordre, et ne vous avertit pas tant que tous les ComboBox ne sont pas renseignés (mais il renseigne d'office, comme ComboBoxLiés, ceux pour lesquels il n'y a qu'un seul choix possible). Il vous avertit en revanche par un évènement Défait, dès qu'il n'y a plus correspondance de l'ensemble des choix.
 
Dernière édition:

poups

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

Cela me fais beaucoup de choses à étudier ...

Ce soir beaucoup de PB ..., je suis désolé de t'occuper presque à temps complet:(
Avec la méthode comboboxliée, je n'arrive plus a faire afficher dans l'onglet "ouverture DI" dans le CbxTCS une liste de choix en fonction de la colone 6 (personne du même service) donnée agence ?

Dans l'onglet donnée atelier, les label ne veulent pas s'affichée !!!, normalement la je devrais afficher dans le CbxDTS les nom de la personne liés à l'atelier (colone 9) donnée intervenant.

Je suis tres mauvais ce soir, et encore un grand merci à l'aide apporté
A+
Poups
 

Dranreb

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

Pourquoi n'ajouteriez vous pas un ComboBox sur la colonne 6 (F) ? Toutes les infos sur une même ligne sont elle bien toutes en rapport les unes avec les autres, au moins, ou ce sont deux listes juxtaposées qui n'ont rien à voir ? Vous n'auriez pas fait cela quand même ?
À partir du moment ou vous restreignez le choix à un code colonne A, pourquoi voudriez vous qu'il puisse vous proposer des noms qui ne le concernent pas ? ComboBoxLiés et ComboBoxCasc sont fait pour isoler le plus possible des lignes contenant tous les critères spécifiées. Ce qu'il vous faudrait peut être quelque part c'est un ComboBoxCasc sur les colonnes E, F et I. Et peut être A tout à la fin, je ne sais pas moi.

Je ne trouve pas de CbxDTS dans votre dernier classeur joint.
 

poups

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

Sans le dernier fichier c'est compliqué !
Quand on a pas de tête ....;)
Merci poups
 
Dernière édition:

Discussions similaires


Haut Bas