Filter un combobox en fonction d'un autre combobox

GADENSEB

XLDnaute Impliqué
Bonjour le forum

Je souhaiterais créer un filtre sur le combobox POSTE si le combobox COMPTE = "LIVRET BLEU"

sachant que combobox POSTE est alimenté par la liste "Tb_P_NomComplet"

Je voudrais que si COMPTE = "LIVRET BLEU", le combobox ne fasse apparaître que les nom de la liste "Tb_P_NomComplet" commencant par "RESERVES"

J'ai ce début de code qui est pas top .....

Code:
Private Sub COMPTE_Change()
'If COMPTE = "LIVRET BLEU" Then
'POSTE.Tb_P_NomComplet = "RESERVES" &"*"

End Sub

qqn aurait une idée?

Bonne am

seb
 

Dranreb

XLDnaute Barbatruc
Re : Filter un combobox en fonction d'un autre combobox

Bonjour.
Si toutes les infos des différentes ComboBox viennent de différentes colonnes d'une même plage, j'ai des modules de service qui définissent un objet virtuel ComboBoxLiées se comportant vis à vis de l'UserForm comme une sorte de ComboBox unique, sauf qu'au lieu d'avoir une propriété ListIndex il renvoie dans une procédure évènement la liste des numéros de lignes dans la plage correspondant à l'ensemble des choix effectués.
 

GADENSEB

XLDnaute Impliqué
Re : Filter un combobox en fonction d'un autre combobox

Hello

je veux bien les exemples de modules de services
pour info chaque combobox est almenté par une plague nommées distinctes, correspondant à des colonnes différentes

Nom des plagues nommées :
COMPTE : Tb_P_Compte
POSTE : Tb_P_NomComplet

cela répond à ta question ?

Bonne am

sEb
 

Dranreb

XLDnaute Barbatruc
Re : Filter un combobox en fonction d'un autre combobox

Puis je en équiper votre classeur à joindre ?
Sinon j'ai déjà joint dans les discussions auxquelles je réponds de nombreux classeurs de la forme CBxLiéesPseudoDuDemandeur.xlsm
Les noms de plage nommées sont supportées par la méthode Add en guise de spécifications de colonnes
 

GADENSEB

XLDnaute Impliqué
Re : Filter un combobox en fonction d'un autre combobox

et voila mon fichier !!!
par contre je n'arrive pas à trouver ton fichier CBxLiéesPseudoDuDemandeur.xlsm ;-)
 

Pièces jointes

  • BUDGET - TESTb.zip
    260.5 KB · Affichages: 30

Dranreb

XLDnaute Barbatruc
Re : Filter un combobox en fonction d'un autre combobox

Bon, je vais donc en faire un de plus pour votre pseudo: CBxLiéesGADENSEB.xlsm
Mais je ne sais pas comment continuer.
L'objet prend pour les ComboBox des listes classées sans doublon toutes extraites des colonnes du tableau, pas à partir de tables annexes.
 

Pièces jointes

  • CbxLiéesGADENSEB.xlsm
    441.4 KB · Affichages: 62
Dernière édition:

GADENSEB

XLDnaute Impliqué
Re : Filter un combobox en fonction d'un autre combobox

Hello

J'ai ce bug là !

Capture.PNG
 

Dranreb

XLDnaute Barbatruc
Re : Filter un combobox en fonction d'un autre combobox

Bonjour.
Ben oui, je me suis complètement arrêté quand j'ai vu qu'au lieu d'une seule plage bien définie quelque part, il y avait des tas de données dans tout les coins. J'ai juste laissé une sorte de modèle de la 1ère des instructions par lesquelles il faut continuer, à savoir des CL.Add …, …
avec chaque fois la ComboBox puis la colonne dans la plage. Terminer par CL.Actualiser

Apparemment vous vouliez alimenter vos ComboBox avec des choses qui ne sont pas en corrélation les unes avec les autres à chaque ligne d'une feuille source. CL ne peut rien faire avec ça. Sauf s'il y à d'abord avant tout un ensemble corrélé à traiter (c'est à dire à mettre à jour ou simplement à consulter). Alors, oui, on pourrait ensuite ajouter un bouton et des instructions pour stopper CL et alimenter temporairement les ComboBox à partir de listes préétablies situées ailleurs. Mais CL, l'objet ComboBoxLiées, lui, ne travaillera que sur l'ensemble corrélé, chaque choix dans une ComboBox restreignant les choix possible dans les autres, jusqu'à obtension d'une seule ligne ou formation d'une combinaison qui n'existe pas mais qu'on veut pouvoir ajouter par exemple.
Mais tant pis, les modules de service vous serviront surement ailleurs un jour, c'est pour ça que j'ai quand même joint le classeur.
 
Dernière édition:

Dranreb

XLDnaute Barbatruc
Re : Filter un combobox en fonction d'un autre combobox

Remarque: si ce sont juste des combinaison dans les tables qu'on veut pouvoir retrouver et non dans la plage corrélée à mettre à jour, oui c'est possible. On peut même utiliser plusieurs variables As ComboBoxLiées pour le faire pour plusieurs tables différentes.
Mais là j'étais complètement perdu du fait de ne pas trouver le contexte que j'attendais…
Il vaudrait peut être mieux que les tables soient mises sous forme de tableaux s'il y a dans la même feuille (PARAMETRES ?) des colonnes qui n'ont rien à voir.
Mais ça reste flou tout ça pour moi. J'ai relu votre premier poste. Vous y parlez de POSTE et de COMPTE. Même dans la feuilles PARAMETRES ce ne sont pas des choses corrélées… Je n'y comprends toujours rien.
Je réserve plutot le nom CL à un ComboBoxLiées principal servant pour tout un tableau à mettre à jour par exemple. Mais là c'est autre chose.
Ce qui pourrait être fait c'est: virer NOM COMPLET et mettre deux ComboBox: une pour CATEGORIE une pour POSTE. Les lier par un objet ComboBoxLiées nommé CLPoste. Parce qu'un tel objet sert justement à relier ce genre de choses pour pouvoir retrouver une combinaison valide de l'ensemble des ComboBox dont on lui à confié la charge. Lorsqu'on sélectionne "LIVRET BLEU" dans la ComboBox COMPTE, qui n'a rien à voir avec, on met d'office "RESERVE" dans la CBxCATEGORIE. L'objet ne proposera alors automatiquement dans la CBxPOSTE que ceux de cette catégorie, sans qu'aucune programmation supplémentaire ne soit nécessaire pour ça dans l'UserForm. Lui ne dialogue plus qu'avec un truc unique: l'objet CLPoste, qui forme une sorte de super-ComboBox. À une entorse près qui sera de forcer exceptionnellement "RESERVE" dans une des ComboBox dont il aura la charge.
 
Dernière édition:

GADENSEB

XLDnaute Impliqué
Re : Filter un combobox en fonction d'un autre combobox

Hello (avec duretard
J'ai fais le choix de faire apparaître Uniquement le combobox POSTE (plage nommée Tb_P_NomComplet) pour une question de simplicité

Le redécoupage par CATEGORIE et LIGNE se faisant aprés dans la BDD.
Pour moi cela était plus simple, le besoin à la saisie étant de la rapidité, d'ou la saisie semi auto dans POSTE
.... et le besoin de faire une présélection sur "RESERVES" si COMPTE ="LIVRET BLEU"

Etant débutant...je cherche à faire au plus simple ;-)

a+ Seb
 

Dranreb

XLDnaute Barbatruc
Re : Filter un combobox en fonction d'un autre combobox

Bonjour.
Ça ne peut bien sûr pas se faire avec un ComboBoxLiées. Il n'a d'intérêt que s'il y a au moins 2 ComboBox pour 2 colonnes différentes d'une même table. Sinon pour un seul il y a le module MSujetCBx qui peut éventuellement suffire si on veut toujours retrouver toutes les lignes se rapportant à un élément de la liste.
 

Dranreb

XLDnaute Barbatruc
Re : Filter un combobox en fonction d'un autre combobox

Mais je n'avais pas vu que vous en parliez au passé.
Est-ce à dire que vous n'êtes pas totalement hermétique à l'idée de virer le Tp_P_NomComplet et d'avoir 2 ComboBox pour les 2 parties ? (À noter que seul un choix de POSTE semble nécessaire car unique, la CATEGORIE viendrait alors tout seul dans l'autre ComboBox)
L'idéal serait qu'on puisse faire figurer le compte dans une 3ième colonne de la même table. Là il n'y aurait plus à intervenir, ça se filtrerait tout seul. Il faudrait bien sur que la table contienne toutes les combinaisons valides de POSTE et de COMPTE.
Je peux le faire si vous voulez en répétant 3 fois chaque ligne de la table CATEGORIE/POSTE pour les 3 comptes possibles sauf ceux de la CATEGORIE "RESERVES" qui n'auront que le compte "LIVRET BLEU". Voulez vous que je le fasse comme ça ?

J'ai une autre question: Est-ce que CGPOSTE pourrait être figé dans la feuille COMPTES ?
Parce qu'il est pris de la table dont on parle et je pourrais vous le sortir dans une variable globale en vue de l'inscrire en dur.
 
Dernière édition:

GADENSEB

XLDnaute Impliqué
Re : Filter un combobox en fonction d'un autre combobox

Hello
J'avoue rester sur l'idée de garder uniquement le combobox POSTE à la saisie.
.... en gros pas toucher l'existant de mon usf / parametres

Je peux le faire si vous voulez en répétant 3 fois chaque ligne de la table CATEGORIE/POSTE pour les 3 comptes possibles sauf ceux de la CATEGORIE "RESERVES" qui n'auront que le compte "LIVRET BLEU". Voulez vous que je le fasse comme ça ?nt de mon usf lol

L'idée est bonne mais je préfére garder mes plages nommées dans l'état ce qui me permetrait de les compléter plus facilement


Concernant CGPOSTE : cette donnée dépend de la catégorie (Tp_P_NomComplet)

Figés les données dans la feulle compte, effectivement pour l'instant tant que mon usf n'est pas terminé, j'importe des données depuis l'usf puis certaines données sont recalculées par la suite

Code:
Sub Formules()
'On génére les formules de la BDD
With Sheets("COMPTES")

    'Choix du format des dates de la colonne B
    .Range("B2:B" & .Cells(Rows.Count, 1).End(xlUp).Row).NumberFormat = _
        "dd/mm/yyyy"
    'Transformation des Dates en Année
    .Range("C2:C" & .Cells(Rows.Count, 1).End(xlUp).Row).FormulaR1C1 = _
        "=YEAR(RC2)"
    'Fomat texte de l'Année
    .Range("C2:C" & .Cells(Rows.Count, 1).End(xlUp).Row).NumberFormat = _
        "General"
    'Découpage de POSTE
    .Range("H2:H" & .Cells(Rows.Count, 1).End(xlUp).Row).FormulaR1C1 = _
        "=IF(RC7="""","""",LEFT(RC7,SEARCH("" - "",RC7)-1))"
    'Découpage de POSTE
    .Range("I2:I" & .Cells(Rows.Count, 1).End(xlUp).Row).FormulaR1C1 = _
        "=IF(RC7="""","""",IF(ISERROR(SEARCH("" - "",RC7,SEARCH("" - "",RC7)+1)),RIGHT(RC7,LEN(RC7)-SEARCH("" - "",RC7)-2),RIGHT(RC7,LEN(RC7)-SEARCH("" - "",RC7,SEARCH("" - "",RC7)+1)-2)))"
    'Recherche de la ligne Analytique
    .Range("M2:M" & .Cells(Rows.Count, 1).End(xlUp).Row).FormulaR1C1 = _
        "=VLOOKUP(RC[-6],Tb_P_VlookCGPostes,2,0)"
    'Détermine si écriture est dans le futur ou non
    .Range("N2:N" & .Cells(Rows.Count, 1).End(xlUp).Row).FormulaR1C1 = _
        "=IF(RC2>R1C23,""OUI"",""NON"")"
    'Calcul du Crédit - Débit
    .Range("R2:R" & .Cells(Rows.Count, 1).End(xlUp).Row).FormulaR1C1 = _
        "=RC[-1]-RC[-2]"
    'Calcul le restant sur Budget Courant
    .Range("S2:S" & .Cells(Rows.Count, 1).End(xlUp).Row).FormulaR1C1 = _
        "=IF(AND(RC[-13]=""COURANT"",RC[-5]=""OUI"",RC[-4]=""NON""),RC[-1],0)"
      '  "=IF(AND(RC[-13]=""COURANT"",RC[-5]=""OUI""),RC[-1],0)"
  

End With

ce qui ralenti le fichier ....
LE but étant dans un second temps de figer les données existantes dans la BDD Comptes et que les futur imports se fassent en remplissant toute la Bdd en reprenant les calculs au momùent de

Code:
    With f.Cells(LastLigne, 1)
        .Offset(, 0).Value = CDbl(Me.CODE.Text)
        .Offset(, 1).Value = CDate(Me.DATESAISIE)
        .Offset(, 3).Value = Me.MOIS
        .Offset(, 4).Value = Me.BUDGETREEL
        .Offset(, 5).Value = Me.COMPTE
        .Offset(, 6).Value = Me.POSTE
        .Offset(, 9).Value = Me.NUMERO
        .Offset(, 10).Value = Me.LIBELLE
        .Offset(, 11).Value = Me.MODERGT
        .Offset(, 14).Value = Me.BQ
        If Me.DEBIT.Text <> "" Then .Offset(, 15).Value = CCur(Me.DEBIT)
        If Me.CREDIT.Text <> "" Then .Offset(, 16).Value = CCur(Me.CREDIT)
    End With



je joins un fichier test qui à été surement modifié depuis le début de ce post
puisque je travaille aussi avec thebenoit59 sur une autre thématique ici

Bonne journée à toi
 

Dranreb

XLDnaute Barbatruc
Re : Filter un combobox en fonction d'un autre combobox

Bon. Je crois que c'était donc la toute dernière tentative d'appliquer des ComboBoxLiées dans ce classeur là.
Je vais sans doute me désabonner de cette discussion.
Il ne vous reste plus qu'à rajouter du code pour regarnir la COMPTE.List d'une plage nommée supplémentaire qui ne couvre que les "RESERVE" quand l'autre change avec pour valeur "LIVRET BLEU".
Je ne comprend d'ailleurs pas très bien pourquoi vous avez ouvert une discussion pour ça alors que c'était de toute façon comme ça que vous aviez déjà décidé de le faire.
 
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
312 299
Messages
2 086 997
Membres
103 424
dernier inscrit
Kyuubi