Combobox liés

JoMargue

XLDnaute Nouveau
Bonjour tout le monde,

J'ai de bonnes connaissances d'excel mais je débute en VBA.
Je suis en train de bâtir une application dans laquelle j'ai plusieurs feuilles. L'une d'elles est un tableau que je peux remplir "à la main" avec 1 colonne "Date", 3 colonnes "liste déroulante" avec validation par une liste dans une autre feuille, et 1 colonne "liste déroulante" liée à la liste déroulante précédente, avec la fonction "INDIRECT".
Tout cela fonctionne très bien.
Mon problème est le suivant :
J'ai créé un UserForm avec (entre autres) un TextBox pour la date, 3 ComboBox pour mes 3 colonnes à liste déroulante. Ca fonctionne et alimente mon tableau lorsque je clique sur un bouton.
Par contre, je n'ai aucune idée pour programmer la 4ème ComboBox pour qu'elle soit alimentée en fonction du choix de la ComboBox précédente.
Je débute vraiment en VBA et j'ai parcouru les forums pour arriver à faire tout ce que j'ai déja fait. Par contre, pour ce problème sur lequel je sèche depuis un bon moment, je n'ai rien trouvé qui me convienne.
Pouvez-vous m'aider ? Notamment avec du code que je pourrai transposer.

Merci d'avance.
 

JNP

XLDnaute Barbatruc
Re : Combobox liés

Bonjour et bienvenue JoMargue :),
Dificile de t'aider sans un bout de fichier, mais en utilisant la procédure
Code:
Private Sub ComboBox3_Exit(ByVal Cancel As MSForms.ReturnBoolean)
End Sub
tu peux modifier ton combobox4
Bonne journée :cool:
 

JoMargue

XLDnaute Nouveau
Re : Combobox liés

Bonjour JPN

Merci d'avoir pris le temps de me lire et de répondre.
Mon fichier, dans sa version actuelle, fait + de 14 Mo. J'essaierai plus tard de l'optimiser, mais pour l'instant...
Je ne sais pas trop quoi extraire pour que ce soit compréhensible. Je mets ici tout le code du UserForm, en espérant que ça permettra de comprendre ma démarche.
J'avais créé un "Private Sub Categ_Exit(ByVal Cancel As MSForms.ReturnBoolean)", qui alimente pour l'instant une cellule de ma feuille "Tables" et sur lequel j'ai fais des tas d'essais qui n'ont rien donnés.

Est-ce suffisamment clair ?

Merci

-------------------------------------------------------------------------------------
Private Sub UserForm_Initialize()
Tiers.RowSource = "Tables!C26:C" & Sheets("Tables").[C100].End(xlUp).Row
Categ.RowSource = "Tables!A2:C" & Sheets("Tables").[A24].End(xlUp).Row
'SousCateg.RowSource = "Tables!A2:C" & Sheets("Tables").[A24].End(xlUp).Row
End Sub
Private Sub CommandButton2_Click()
Dim En_cours As String
En_cours = ActiveSheet.Name
Select Case True
Case Controls("Carte")
Sheets("" & En_cours).Range("D87").End(xlUp).Offset(1, 1) = Controls("Carte").Caption
Case Controls("Prelevement")
Sheets("" & En_cours).Range("D87").End(xlUp).Offset(1, 1) = Controls("Prelevement").Caption
Case Controls("TIP")
Sheets("" & En_cours).Range("D87").End(xlUp).Offset(1, 1) = Controls("TIP").Caption
Case Controls("Retrait")
Sheets("" & En_cours).Range("D87").End(xlUp).Offset(1, 1) = Controls("Retrait").Caption
Case Controls("VirementEmis")
Sheets("" & En_cours).Range("D87").End(xlUp).Offset(1, 1) = Controls("VirementEmis").Caption
Case Controls("Cheque")
Sheets("" & En_cours).Range("D87").End(xlUp).Offset(1, 1) = Controls("Cheque").Caption
Case Controls("Virement")
Sheets("" & En_cours).Range("D87").End(xlUp).Offset(1, 1) = Controls("Virement").Caption
Case Controls("RemCheque")
Sheets("" & En_cours).Range("D87").End(xlUp).Offset(1, 1) = Controls("RemCheque").Caption
Case Controls("DepotEspeces")
Sheets("" & En_cours).Range("D87").End(xlUp).Offset(1, 1) = Controls("DepotEspeces").Caption
End Select
Me.Dat = Format(Me.Dat, "mm/dd/yyyy")
Sheets("" & En_cours).Range("D87").End(xlUp).Offset(1, 0) = Me.Dat.Value
Sheets("" & En_cours).Range("G87").End(xlUp).Offset(1, 0) = Me.Tiers.Value
Sheets("" & En_cours).Range("H87").End(xlUp).Offset(1, 0) = Me.Categ.Value
End Sub
Private Sub Dat_Exit(ByVal Cancel As MSForms.ReturnBoolean)
On Error Resume Next
Me.Dat = Format(Me.Dat, "dd/mm/yyyy")
End Sub
Private Sub Categ_Exit(ByVal Cancel As MSForms.ReturnBoolean)
Sheets("Tables").Range("H26").Value = Categ.Value
End Sub
Private Sub CommandButton1_Click()
Unload UserForm3
End Sub
 

JNP

XLDnaute Barbatruc
Re : Combobox liés

Re :)
Je ne vois pas trop l'intéret de ce que j'ai mis en rouge
Private Sub UserForm_Initialize()
Tiers.RowSource = "Tables!C26:C" & Sheets("Tables").[C100].End(xlUp).Row
Categ.RowSource = "Tables!A2:C" & Sheets("Tables").[A24].End(xlUp).Row
'SousCateg.RowSource = "Tables!A2:C" & Sheets("Tables").[A24].End(xlUp).Row
End Sub
Private Sub CommandButton2_Click()
Dim En_cours As String
En_cours = ActiveSheet.Name
Select Case True
Case Controls("Carte")
Sheets("" & En_cours).Range("D87").End(xlUp).Offset(1, 1) = Controls("Carte").Caption
Case Controls("Prelevement")
Sheets("" & En_cours).Range("D87").End(xlUp).Offset(1, 1) = Controls("Prelevement").Caption
Case Controls("TIP")
Sheets("" & En_cours).Range("D87").End(xlUp).Offset(1, 1) = Controls("TIP").Caption
Case Controls("Retrait")
Sheets("" & En_cours).Range("D87").End(xlUp).Offset(1, 1) = Controls("Retrait").Caption
Case Controls("VirementEmis")
Sheets("" & En_cours).Range("D87").End(xlUp).Offset(1, 1) = Controls("VirementEmis").Caption
Case Controls("Cheque")
Sheets("" & En_cours).Range("D87").End(xlUp).Offset(1, 1) = Controls("Cheque").Caption
Case Controls("Virement")
Sheets("" & En_cours).Range("D87").End(xlUp).Offset(1, 1) = Controls("Virement").Caption
Case Controls("RemCheque")
Sheets("" & En_cours).Range("D87").End(xlUp).Offset(1, 1) = Controls("RemCheque").Caption
Case Controls("DepotEspeces")
Sheets("" & En_cours).Range("D87").End(xlUp).Offset(1, 1) = Controls("DepotEspeces").Caption
End Select
Me.Dat = Format(Me.Dat, "mm/dd/yyyy")
Sheets("" & En_cours).Range("D87").End(xlUp).Offset(1, 0) = Me.Dat.Value
Sheets("" & En_cours).Range("G87").End(xlUp).Offset(1, 0) = Me.Tiers.Value
Sheets("" & En_cours).Range("H87").End(xlUp).Offset(1, 0) = Me.Categ.Value
End Sub
Private Sub Dat_Exit(ByVal Cancel As MSForms.ReturnBoolean)
On Error Resume Next
Me.Dat = Format(Me.Dat, "dd/mm/yyyy")
End Sub
Private Sub Categ_Exit(ByVal Cancel As MSForms.ReturnBoolean)
Sheets("Tables").Range("H26").Value = Categ.Value
End Sub
Private Sub CommandButton1_Click()
Unload UserForm3
End Sub
Par contre, ça ne m'explique pas ce que tu veux mettre dans ta ComboBox4 en fonction de ComboBox3...
La procédure que je t'ai indiquée te permet quand tu quitte ComboBox3 de remplir ComboBox4, maintenant, que veux-tu prendre pour l'alimenter?
Difficile d'aller plus loin...
Bonne journée :cool:
 

JoMargue

XLDnaute Nouveau
Re : Combobox liés

Re,

Sheets("" & En_cours) : en fait, pour simplifier, j’ai dit que j’avais une feuille comprenant 1 tableau à remplir. En réalité, j’en ai 12 nommées « Janvier », « Février », etc.
En_cours est le nom de la feuille d’où est lancée la procédure (En_cours = ActiveSheet.Name).

Pour alimenter la comboBox4, nommée « SousCat », j’ai une suite de listes dans la feuille « Tables ». Ces listes sont dans des colonnes de B à O et ont chacune un titre nommé « Sous »+nom de la catégorie : exemple « SousAutomobile ».
Les catégories sont en colonne A de la même feuille et ont un titre « Catégories).
C’est cette base qui me sert dans la feuille « Janvier » à alimenter ma 4è liste déroulante, grâce à la fonction « Données, Validation, et la formule « = INDIRECT(« Sous »&H10), H10 étant la cellule de la 3è liste déroulante.
C’est ça que j’aimerai reproduire dans mon UserForm.

Merci de ton attention.
 

JoMargue

XLDnaute Nouveau
Re : Combobox liés

Rebonjour,

En complément de mon post, je joins un tout petit bout de mon fichier. J'ai galéré pour ne garder que le minimum tout en conservant le principal pour qu'on comprenne mon problème.
J'espère que parmi les membres de ce forum dont certains me paraissent "costauds" il y en aura un qui pourra me donner la solution.
En tout cas, merci de prendre la peine de lire.
 

Pièces jointes

  • Banque5.xls
    41.5 KB · Affichages: 115

JoMargue

XLDnaute Nouveau
[Resolu] : Combobox liés

J'ai trouvé !!!

Ce n'est peut-être pas la solution la plus élégante, mais elle fonctionne.
J'ai rajouté le code suivant :

Private Sub Categ_Exit(ByVal Cancel As MSForms.ReturnBoolean)
On Error Resume Next
Dim champ As String
champ = "Sous" & Me.Categ.Value
Me.SousCat.RowSource = champ
End Sub

JNP ce matin m'avait déjà parlé de Sub Categ_Exit, que j'avais déjà essayé d'utiliser mais sans trouver ce qu'il fallait mettre à l'intérieur. A force de me triturer les méninges, j'ai fini par trouver.

Lorsque m'est venue cette idée d'application, je n'y connaissais absolument rien en VBA.

A force de consulter les forums et les excellentes formations de ce site, je commence à connaître pas mal de choses.

Je remercie JPN de m'avoir répondu. Ce problème est [RESOLU].;)
 

Discussions similaires

Réponses
28
Affichages
1 K

Membres actuellement en ligne

Statistiques des forums

Discussions
313 769
Messages
2 102 234
Membres
108 181
dernier inscrit
Chr1sD