2 combobox en cascade qui alimentent plusieurs textbox

Loglana

XLDnaute Nouveau
Bonjour à tous,
Étant novice dans le VBA cela fait plusieurs jours que je me creuse là tête en vain.
J'aurais souhaité créer un userform alimenté par une base de donnée.
Cette base de donnée est composée de plusieurs colonnes. La colonne A alimente la Combobox 1, la colonne B alimente la Combobox 2 en fonction du choix de la Combobox 1.
Cependant, ma colonne A possède plusieurs cases identiques mais des cases uniques pour la colonne B. Il aurait fallu, en donnant un exemple pour les voitures, la Combobox 1 soit la marque de la voiture, la Combobox 2 le modèle de la voiture, ensuite une fois le choix fait on appui sur un bouton qui nous rempli plusieurs textbox (non modifiables) correspondant aux infos sur cette voiture (infos alimentée par la ligne de la voiture dans la base de donnée).
En espérant avoir été assez clair dans mes explications..
Dans l'attente de vos réponses, merci d'avance
 

Dranreb

XLDnaute Barbatruc
Re : 2 combobox en cascade qui alimentent plusieurs textbox

Bonjour.
J'ai un module de classe qui se charge de gérer les choix dans les ComboBox liées.
J'en équiperai votre classeur joint.
Il n'y aurait pas de bouton pour ça à priori: les TextBox seraient garni dès la frappe ou le choix d'info suffisantes pour aboutir à une seule ligne.
Une recherche intuitive pourrait être mise en place pour la désignation du modèle, et d'autres ComboBox pourraient éventuellement ajoutés pour d'autres colonnes, critères de recherche, sans difficulté.
 
Dernière édition:

Loglana

XLDnaute Nouveau
Re : 2 combobox en cascade qui alimentent plusieurs textbox

Bonjour, merci de votre réponse aussi rapide.
Je vous laisse un ficher prenant pour exemple une liste de véhicules en fonction de leur marque avec le userform de ce que je voudrais faire apparaître.
 

Pièces jointes

  • Exemple avec véhicules.xlsx
    115.5 KB · Affichages: 135

cathodique

XLDnaute Accro
Re : 2 combobox en cascade qui alimentent plusieurs textbox

Bonsoir,

Je suis certain que le code de Dranreb serait plus adéquat. Mais voici ce que j'ai pu faire en exploitant les exemples de Boisgontier.

Vois si ça te conviens et agence l'userform à ta façon.

Bon week-end à tous
 

Pièces jointes

  • Exemple avec véhicules.xlsm
    133.4 KB · Affichages: 188

Loglana

XLDnaute Nouveau
Re : 2 combobox en cascade qui alimentent plusieurs textbox

Merci beaucoup Cathodique !
C'est exactement ce que je recherchais. Juste un petit soucis, dans le fichiers que tu as pu m'envoyer, les textbox commencent à être complétées à partir de la colonne D et non de la C (pourtant tu l'as bien mentionné dans ton code). Saurais-tu ce qu'il y a à modifier pour ce la colonne C soit prise en compte ?
De plus, je voulais rajouter un bouton qui puisse valider les données sélectionnées dans les 2 Combobox sans que les Textbox se remplissent automatiquement. Est-ce possible ?

Encore merci et bon week-end à tous !
 

Dranreb

XLDnaute Barbatruc
Re : 2 combobox en cascade qui alimentent plusieurs textbox

Bon je profite du classeur de cathodique (équipé d'un UserForm, lui) pour l'équiper de mes modules de service.
 

Pièces jointes

  • CbxLiéesLoglana.xlsm
    208.2 KB · Affichages: 141

cathodique

XLDnaute Accro
Re : 2 combobox en cascade qui alimentent plusieurs textbox

J'ai fais une petite erreur dans le code qui alimente les textboxs (Private Sub ComboBox2_Change()) modifie ainsi la ligne, c'est 1 au lieu de 2
VB:
Me.Controls("TextBox" & i) = C.Offset(, i + 1).Value

Mais il me semble qu'il te manque une combobox pour L'engine.

Je te le redis, prend le code de Dranreb, il est plus compétent que moi.

cordialement,
 

BOISGONTIER

XLDnaute Barbatruc
Re : 2 combobox en cascade qui alimentent plusieurs textbox

Bonsoir,


http://boisgontierjacques.free.fr/fichiers/Formulaire/Form3nivVehicules.xls

Code:
Dim f
Private Sub UserForm_Initialize()
  Set f = Sheets("bdd")
  For i = 1 To 15
     Me("label" & i) = f.Cells(1, i + 3).Value
  Next i
  Set MonDico = CreateObject("Scripting.Dictionary")
  For Each C In f.Range("A2:A" & f.Range("A" & Rows.Count).End(xlUp).Row)
     MonDico(C.Value) = ""
  Next C
  temp = MonDico.keys
  Call Tri(temp, LBound(temp), UBound(temp))
  Me.ComboBox1.List = temp
  Me.ComboBox2.Clear
End Sub

Private Sub ComboBox1_Change()
  Set MonDico = CreateObject("Scripting.Dictionary")
  For Each C In f.Range("A2:A" & f.Range("A" & Rows.Count).End(xlUp).Row)
     If C = Me.ComboBox1 Then MonDico(C.Offset(, 1).Value) = ""
  Next C
  temp = MonDico.keys
  Call Tri(temp, LBound(temp), UBound(temp))
  Me.ComboBox2.List = temp
  Me.ComboBox2 = ""
  Me.ComboBox3.Clear
  raz
End Sub

Private Sub ComboBox2_Change()
  Set MonDico = CreateObject("Scripting.Dictionary")
  For Each C In f.Range("A2:A" & f.Range("A" & Rows.Count).End(xlUp).Row)
     If Me.ComboBox1 = C And Me.ComboBox2 = C.Offset(, 1) Then MonDico(C.Offset(, 2).Value) = ""
  Next C
  raz
  Me.ComboBox3.List = MonDico.keys
  Me.ComboBox3 = ""
End Sub

Private Sub ComboBox3_Change()
  Set MonDico = CreateObject("Scripting.Dictionary")
  For Each C In f.Range("A2:A" & f.Range("A" & Rows.Count).End(xlUp).Row)
     If Me.ComboBox1 = C And Me.ComboBox2 = C.Offset(, 1) And Me.ComboBox3 = C.Offset(, 2) Then
       For i = 1 To 15
         Me.Controls("TextBox" & i) = C.Offset(, i + 2).Value
       Next i
     End If
  Next C
End Sub

Casc3Niv.gif

JB
 

Pièces jointes

  • Copie de Exemple avec véhicules.xls
    377 KB · Affichages: 145
Dernière édition:

Loglana

XLDnaute Nouveau
Re : 2 combobox en cascade qui alimentent plusieurs textbox

Merci à tous, j'ai pu adapter parfaitement les codes dans mon Userform.
J'aurais juste un tout petit quelque chose à rajouter et je ne vous embête plus après ;)

Quand on fait nos choix dans chacune des deux combobox, les textbox se remplissent automatiquement.
Voilà donc ce que je voudrais :
J'ai créé un bouton "valider" qui permettrait de remplir les textbox après avoir cliqué sur ce bouton.
Par contre si on fait une modification des choix dans les combobox, les textbox se vident automatiquement et il faut recliquer sur le bouton pour avoir les textbox à jour en fonction de ces nouveaux choix.

Il faudrait aussi bloquer la modification des textbox, c'est à dire que le seul moyen de modifier les champs des textbox est de modifier la base de donnée.
Merci d'avance !

Voici le code que j'ai actuellement:

Code:
Option Explicit
Dim F
Private Sub UserForm_Initialize()
Dim LastLig As Long, MonDico As Object, C As Range
Set F = Sheets("bdd")
LastLig = F.Range("A" & Rows.Count).End(xlUp).Row

Set MonDico = CreateObject("Scripting.Dictionary")
For Each C In F.Range("A2:A" & LastLig) ' on explore la colonne de niveau 1
     MonDico(C.Value) = "" ' on ajoute l'élément de la marque au dictionnaire
  Next C
  Me.ComboBox1.List = MonDico.keys
End Sub
Private Sub ComboBox1_Change()
Dim LastLig As Long, MonDico As Object, C As Range
LastLig = F.Range("A" & Rows.Count).End(xlUp).Row
    Set MonDico = CreateObject("Scripting.Dictionary")
For Each C In F.Range("A2:A" & LastLig) ' on explore la colonne de niveau 2
     If C = Me.ComboBox1 Then MonDico(C.Offset(, 1).Value) = "" ' on ajoute l'élément du modele au dictionnaire
  Next C
  Me.ComboBox2.List = MonDico.keys
End Sub
Private Sub ComboBox2_Change()
Dim LastLig As Long, MonDico As Object, C As Range, i As Integer
LastLig = F.Range("A" & Rows.Count).End(xlUp).Row
Set MonDico = CreateObject("Scripting.Dictionary")
For Each C In F.Range("A2:A" & LastLig)
     If Me.ComboBox1 = C And Me.ComboBox2 = C.Offset(, 1) Then
     For i = 1 To 11  'de colonne c à q
     Me.Controls("TextBox" & i) = C.Offset(, i + 1).Value
Next i
End If
 Next C
End Sub
 

Dranreb

XLDnaute Barbatruc
Re : 2 combobox en cascade qui alimentent plusieurs textbox

Bonjour.
Mettez peut être des Label au lieu de TextBox, s'il ne doivent pas être modifiés. Sinon à la rigueur la propriété Locked des TextBox.
Vous avez vu mon fichier ? Il y a beaucoup moins de code dans l'UserForm pour les ComboBox, les listes y sont toutes classées et les choix peuvent y être fait dans n'importe quel ordre.

J'affichais le contenu de la 1ère ligne correspondante dans tout les cas, mais on peut changer ça facilement. Si on affiche seulement quand une seule ligne correspond, les doublons sur l'ensemble des deux ComboBox ne sont pas accessibles.

Voulez vous que je retravaille mon classeur en fonction de votre dernier message ?
(Affichage auto quand une ligne correspond, sinon par barre de défilement)
 
Dernière édition:

laetitia90

XLDnaute Barbatruc
Re : 2 combobox en cascade qui alimentent plusieurs textbox

bonjour tous :):)

une facon de l'ecrire avec un bouton!!!

petite correction trop vit fait :(:(

code bouton changer ligne

If t(i, 1) = C1 And t(i, 2) = C2 And t(i, 3) = C3 Then _

par

If t(i, 1) = C1.Text And t(i, 2) = C2.Text And t(i, 3) = C3.Text Then _
 

Pièces jointes

  • Copie de Exemple avec véhicules.xlsm
    136.2 KB · Affichages: 130
Dernière édition:

Loglana

XLDnaute Nouveau
Re : 2 combobox en cascade qui alimentent plusieurs textbox

Bonjour,
Ce qu'a pu faire Laeticia est exactement ce que je voulais avoir au final, avec une Combobox en moins par contre. Mais le fonctionnement du bouton est ce que j'attendais.
Cependant le code est complètement différent de ce que j'ai pu faire dans le miens (voir message précédent)
Le code du bouton à rajouter dans mon userform ne doit pas être énorme pourtant ?
Il me faudrait juste une petite modif du code que j'ai envoyé dans le précédent message afin de faire fonctionner ce bouton.
Merci d'avance.
 

Dranreb

XLDnaute Barbatruc
Re : 2 combobox en cascade qui alimentent plusieurs textbox

Faudrait que j'arrête de proposer mes modules de service hyper-puissants et facile à mettre en œuvre, dans du code facile à faire évoluer, aux gens dont je ne suis pas sûr d'obtenir un retour :mad:
 

calu

XLDnaute Nouveau
Bonjour,
j'ai eu le même problème que Loglana et j'ai donc utiliser ton module Dranreb qui est tout à fait ce que je cherchais mais j'ai un petit problème car les comboboxsd fonctionne très bien mais apres avoir rempli les deux rien ne s'affiche dans les textboxs

Merci par avance de votre retour
Cordialement
 

Discussions similaires

Membres actuellement en ligne

Aucun membre en ligne actuellement.

Statistiques des forums

Discussions
283 465
Messages
1 852 013
Membres
151 502
dernier inscrit
tyr
Haut Bas