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

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

C'est toujours comme cela il ya la régle et la contre régle, en temps normalement tous les champs ce preremplise de facon logique.

Mais il y a toujours (souvant) une exception a la régle, congé, absence divers, sujet pointu, export, et les interlocuteurs peuvent changer
Ce formulaire sert a rédiger un ordre de mission, tous les cas de figures sont a envisager (limité a certain combobox quand même ...
De l'extérieur cela peut paraitre bizard, mais en réalitée c'est tres simple
A+
Syl
 

Dranreb

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

Apparemment le mot clé WithEvents n'est pas reconduit pour d'autre variables objets dans la même instruction Dim. Il faut donc le respécifier devant CLInt dans sa déclaration. Ça n'empêchait pas son fonctionnement interne, mais la CLInt_BingoUn n'était pas vue comme une procédure d'évènement pour cet objet. D'ailleurs du coup celui-ci ne figurait pas dans la liste des objets en haut à gauche, vous n'avez à nouveau pas fait ce que je disais, puisque vous ne pouviez pas !
Cela résolu, il reste des détails de mise au point : Connait pas LabConAt, d'une part, et PlgInt défini sur 12 colonnes (FDonInt.[C2:N2]) de sorte que VLgn(1, 14) ne passe pas. D'après ce que je vois, il suffirait sans doute de prendre plutôt FDonInt.[A2:N2]. Ça ne change rien pour CLInt.Plage car il se fiche complètement des colonnes que vous lui spécifiez, il n'en retient que le groupe de lignes entières auquel elles appartiennent.
 
Dernière édition:

poups

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

Ben oui ! suis pas tres rigoureux ....

Derniére questions de la soirée :
1)
Dernier onglet, L'atelier s'affiche avec les renseignement qui vont avec, la personne par défaut en charge du dossier et de l'atelier (DTS) s'affiche dans le CbxDTS.
Il existe 3 DTS. Le choix dans le CbxDTS doit être possible entre les 3 DTS
Afin de pouvoir afficher les éléments lièes j'ai créé un Cbx caché, ou je force l'affichage "DTS" et ainci faire le tri dans ma base
Mais le VB n'appraisie pas l'imbrication des Cbx, peut être ne les ai je pas fait dans le bon sens ?
2)
La zone ATS (sédentaire des DTS) la il en existe 2, la Cbx doit proposé les 2, mais par défaut ceuxci sont lié a un groupe de produit
pour LabGroupe = 3 un des ATS pour tous le reste c'est l'autre ATS
Je n'ai pas trouvé comment l'organiser la chose

Merci Poups
 
Dernière édition:

Dranreb

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

Non. Ne cachez pas les ComboBox confiés à un ComboBoxLiés. C'est absurde !
Je dois dire que je ne comprends plus rien à vos explications, désolé.
À mon avis vous devriez complètement repenser l'organisation de vos données et bien vous redéfinir ce que vous voulez pouvoir faire.
P.S. Je crois avoir vaguement trouvé dans la feuille Donnée_SAV des choses en rapport avec ce que vous dites.
Si vous voulez pouvoir en sélectionner facilement des sous-ensembles définis par le contenu de la colonne F, faites vous en trois dictionnaires arborescents séparés. Ou alors un seul dictionnaire arborescent sur les colonnes F et A. D'ailleurs, en réalité, ce ne sont pas deux choses différentes… si c'est toujours DTS, ATS ou SAV, éclatez ou non, comme vous voulez, les 3 sous-dictionnaires: ce ne sont que 3 Set à effectuer. Mettez les Keys des bons aux List des ComboBox qu'il faut, et récupérez la ligne du nom choisi comme pour CbxNom avec DicNom.
P.S.2: Autre idée: je vois qu'il n'y a pas d'usine pour les DTS et ATS. Si vous répétiez ces informations dans la colonne Usine vous pourriez peut être réutiliser le DicUsnNom

Non, en résumé, faut pas utiliser de ComboBoxLiés pour des choix de noms DTS ou ATS dans FDonNom, ça n'a pas de sens: c'est plus compliqué que d'affecter une bonne fois pour toute les Keys de dictionnaires appropriés aux List des ComboBox, et récupérer la ligne en fonction du ListIndex comme pour CbxNom.
 
Dernière édition:

poups

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

Bonjour Mr Dranreb

Je ne pouvais pas revenir vers toi avant d'avoir re pensé un peu les choses et donc re travaillé le sujet
Tu trouveras donc mon fichier corrigé (simplifié et j'ai adapté les bases)
J'ai refais l'intégralité du VB en essayant d'être le plus rigoureux que possible (et simple !)

Je me heurte à 2 petits problemes :
Je pourrais m'en passé si cela ne marche pas ... mais bon !

Dans l'onglet "ouverture DI"
Serait il possible de faire un affichage par défaut du CBX TCS (n'importe lequelle de la liste dispo) ?

Dans l'onglet "Matériel"
Sur la CBX Type, je voulais faire un choix croisé, qui dépende de la liste pricipale, choix pouvant être simplifié (réduit) par les CBX Interlocuteur et Ville SAV, mais manifestement cela ne marche pas ...

Merci beaucoup de ton aide, cela m'ai fort utile

Poups
 
Dernière édition: