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

Dranreb

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

Bon alors si vous les mettez tous en global (ou pas d'ailleurs) donnez leur à chacun son nom: VLgnNBDI, VLgnCodeDI, VLgnAgence etc. Comme ça vous serez sûr qu'il n'y aura plus de confusion possible. Mais là, y a toujours un VLgn global dont on ne sait à quoi il sert et d'autre, différent portant ce même nom en local à partir de la Private Sub CLAgence_BingoUn
 
Dernière édition:

poups

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

Bonsoir Dranreb,
J'ai fait les modifs mais j'ai toujours une erreur ...

Par ilimination j'ai trouvé ce qui bloc
Mais je ne trouve pas pourquoi ???
'Zone onglet "NB DI"

Set PlgNBDI = ColUti(FDonDI_MES.[A2:O2])
Set CLNBDI = New ComboBoxLiés
CLNBDI.CouleurSympa
' CLNBDI.Plage PlgNBDI
' CLNBDI.Add Me.CbxNBDI, "A"
' CLNBDI.Actualiser
Peux tu m'aider ?
Merci d'avance Syl
 

poups

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

Ben non ?
Capture.PNG
Et c'est une feuille qui vas ce remplir au fur et mesure de l'utilisation du fichier, il faut bien commencer ...
 

Pièces jointes

  • Capture.PNG
    Capture.PNG
    8.8 KB · Affichages: 81
  • Capture.PNG
    Capture.PNG
    8.8 KB · Affichages: 87

Dranreb

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

Dans le fichier joint c'était vide.
De toute façon je vois autre chose: ça ne marchera jamais votre truc: Vous faites gérer de mêmes ComboBox par des ComboBoxLiés différents. Impossible que ça marche. Enfin j'en ai vu un en tout cas : CbxCodeDI qui est géré à la fois par CLAgence et par CLCodeDI. Vous devez en choisir un seul des deux et pour l'autre utiliser sa méthode Filtrer.
Le mieux ce serait de ne pas prévoir de ComboBoxLiés pour l'autre puisqu'il n'y restera plus qu'un seul autre ComboBox. Quand il n'y en a qu'un c'est tout aussi facile de se servir d'un dictionnaire arborescent, et de lui affecter ses Keys. Vous pouvez même utiliser un dictionnaire à deux niveaux, le premier étant justement le CodeDI: vous n'aurez pas à refaire de dictionnaire à chaque fois: chaque CodeDI choisi dans CbxCodeDI (géré par ComboBoxLiés mais seulement pour une des table considérée comme celle, principale, à mettre à jour) rendra directement un sous-dictionnaire dont vous pourrez affecter les clés au ComboBox tout seul pour le complément d'information à prendre de la table annexe.
 

poups

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

Tu as raison, je n'avais pas fait attention et pour l'instant cela ne me sert a rien alors ...
J'ai tous virer, la base et le code

La boite de dialogue et les combox marche sans PB, si on eleve la fin du code
(à partir de ''' /// Créé une base de donné de DI-MES)

Maintenant je cherche a enregistrer les données de la boite de dialogue sur la feuille DI-MES
Mais la il y a bug, et bien evidement je de vois d'ou cela vient

Merci de ton aide
Poups
 

Pièces jointes

  • Projet SFF_22-11-13.xls
    362.5 KB · Affichages: 69
  • Projet SFF_22-11-13.xls
    362.5 KB · Affichages: 76
  • Projet SFF_22-11-13.xls
    362.5 KB · Affichages: 68

Dranreb

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

Bonjour.
Vous avez de nouveau fait For I = 1 To 2 dans CLNBDI_Change alors qu'il n'y a qu'un seul ComboBox. Et je vous ai dit que dans ce cas il était plus facile d'utiliser un dictionnaire arborescent. ComboBoxLiés c'est seulement pour quand il il y en a plusieurs, liés entre eux, et à choisir dans un ordre quelconque. Un DicNBDI (As Dictionary) suffirait largement. (= DictionnArbo(PlgNBDI.Columns("A")).
 

poups

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

OK je comprend bien ...
J'ai regardé nous en parlons des dictionnaires arborescent mais je n'en ai jammais utilisé jusqu'a maintenant
Peux tu me donner un exemple je vais essayé ce soir, intellectuellement je suis largué
merci de ta patience
Poups
 

Dranreb

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

Ben si, dans les premiers postes de cette discussion il n'était question que de dictionnaires arborescents.
Dans l'évènement Change du ComboBox, DicNBDI.Items(CbxCodeDI.ListIndex)(1) devrait vous donner le numéro de ligne exactement comme le BingoUn d'un ComboBoxLiés. Ce dernier ne travaille qu'avec des dictionnares arborescents.
 

poups

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

Modif faite, erreur Objet requit

J'ai encore oublier quelque chose
Peux tu me dire ?
Poupis
 

Pièces jointes

  • Projet SFF_22-11-13.xls
    335 KB · Affichages: 106
  • Projet SFF_22-11-13.xls
    335 KB · Affichages: 106
  • Projet SFF_22-11-13.xls
    335 KB · Affichages: 98

Dranreb

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

Soyez un peu homogène avec le reste: au lieu de
With Worksheets("DI-MES")
Set PlgNBDI = .[A2:02].Resize(.Cells(.Rows.Count, "A").End(xlUp).Row - 1): End With
VB:
Set PlgNBDI = ColUti(FDonDI_MES.[A2:O2])
Ensuite :
Me.CbxNBDI.List = PlgNBDI.Columns("A").Value
Faux, c'est:
VB:
Me.CbxNBDI.List = DicNBDI.Keys
Mettez plutôt une CbxNBDI_Change qu'une CbxNBDI_Click et mettez y :
VB:
If CbxNBDI.ListIndex = -1 Then Exit Sub
Ligne = DicNBDI.Items(CbxNBDI.ListIndex)(1)
 

poups

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

J'ai fait les modifs ...
Pour vider le combobox "N° DI" du dictionnaire arbo comment fait on ? "nettoyer" ne marche pas

Le distionnaire arborécent me permet de revenir et/ou modifier des enregistrements réalisé dans la base DI-MES.
Cela marche mais quand je valide un enregistrement je n'ai plus acces aux comboxliées pour éventuellement le modifier, est ce normal ?

Je n'ai pas trouvé le code pour enregistrement et/ou modifier un enregistrement dans la base

En faite l'organisation des boutons de commande dans les comboxliées étaient parfait, peut on faire la même chose avec un dictionnaire arbo ??

Merci beaucoup !
Poups
 

Pièces jointes

  • Projet SFF_22-11-13.xls
    347 KB · Affichages: 398
  • Projet SFF_22-11-13.xls
    347 KB · Affichages: 649
  • Projet SFF_22-11-13.xls
    347 KB · Affichages: 641

Dranreb

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

Bonjour.
Calquez vous sur la façon de procéder de ComboBoxCasc ou ComboBoxLiés. Nettoyer met essentiellement le ListIndex du ComboBox à -1.
Ah, c'est donc la PlgNBDI qui est la table à mettre à jour ? (c'est ça que j'avais pas compris avec cette organisation arachnéenne qui relèverait peut être plus d'Access que d'Excel)
Ce n'est plus une variable locale Ligne qu'il faut utiliser mais sans doute la globale LDICou: il faut qu'elle soit conservée jusqu'à ce qu'on utilise le bouton. Et il faut veiller à le remettre à 0 quand le ListIndex = -1 pour qu'on sache après que c'est une création. Pour l'effectuer, s'il est à 0, mettez le à PlgNBDI.Rows.Count, copiez sa dernière ligne, insérez la devant elle même, ajoutez 1 à LDICou puis embrayez comme pour une modification:
VB:
PlgNBDI.Rows(LDICou).Value = NBDIVLgn
De même qu'avec un ComboBoxLiés, si vous changer la base vous devez refaire un Actualiser, vous devez refaire le Dictionnaire et affecter ses nouvelle clés au List du ComboBox. (Juste ces 2 instructions, PlgNDBI quant à lui est automatiquement rectifié, à condition de procéder comme j'ai dit au lieu d'ajouter bêtement la ligne derrière de sorte que du coup elle n'en ferait plus partie)
 
Dernière édition:

poups

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

Pour le netoyage, j'ai tradui cela par :

Code:
CbxNBDI.ListIndex = -1
Cela marche, mais cela ne doit pas être comme tu la expliqué ...

[
c'est donc la PlgNBDI qui est la table à mettre à jour ?

Oui c'est bien cela

J'ai intégrer LDICou mais je pense qu'il ce comporte comme "Ligne" en variable locale, il y a t'il une déclaration spécifique à faire pour LDICou ? ou ?
Pour l'instant tous ce comporte comme je le souhaite, sauf que quand je vais chercher un enregistrement existant j'ai acces au 3 combobox de la boite de dialogue, mais les cellules liés ne sont pas mise à jour en modification ?

Private Sub CLXXX_BingoUn(ByVal Ligne As Long)
inopérant ??

Apres je dois faire marcher le bouton d'enregistrement (modification/création)
Est ce que je peux utiliser "GarnirChamps" ?

Merci encore et toujour !
Poups
 

Statistiques des forums

Discussions
311 725
Messages
2 081 940
Membres
101 845
dernier inscrit
annesof