hevy75
Messages postés6Date d'inscriptionlundi 21 février 2005StatutMembreDernière intervention11 avril 2014
-
13 sept. 2010 à 23:55
hevy75
Messages postés6Date d'inscriptionlundi 21 février 2005StatutMembreDernière intervention11 avril 2014
-
15 sept. 2010 à 22:13
Bonjour,
J'ai fait le tour de quelques forum, chercher dans cette inépuisable source de renseignement qu'est la rubrique d'aide de Microsoft Excel... et je n'ai pas
trouvé de réponse a mes questions.
Donc voila mon interrogation :
J'utilise Excel 2003 et ai quelques bonnes connaissances en VBA
=> Je souhaiterais creer un userform me servant d'interface à la consultation d'un catalogue (imaginons des habits).
Mon souhait serait de pouvoir depuis une liste de données rendre la consultation d'un article possible sur le userform.
- Les données sont ordonnées en colonnes comme suit :
Type d'article | modèle | Description | Prix
- Les données se présentent de la facon suivante (en ligne) :
Gant | Gant en Cuir | cuir de vache | 40€
Gant | Gant de ski | Pour les grand froid | 50€
Bonnet | Bonnet en laine | Vert à pois rouge | 20€
Bonnet | Bonnet en polaire | Avec Cache oreille | 15€
- Le userform aurait plusieurs champs sous la forme suivante :
2 listes à choix unique :
1/ liste de choix avec le type d'article (Ex : Gant | Bonnet | Echarpe)
2/ liste de choix avec le modéle de l'article ( ex : Gant en Cuir | Gant de Ski | Gant noir)
RQ : Cette liste serait construite en fonction de la valeur selectionnées dans la première liste - "Type d'article"
3/ Label avec l'affichage de la description (non modifiable)
4/ Lable avec l'affichage du prix (non modifiable)
J'arrive a créer le formulaire dans l'editeur VBA, les différents controleurs (ListBox & Label), attribuer les valeurs à mes listBox, mais a partir de la commence l'étendue de mon ignorance...
1/ Comme modifier les valeurs dans ma 2eme listbox en fonction de la selection dans la 1ère (ex : Gant => Choix parmis les differents type de gant uniquement) ?
2/ Comment Afficher la description et le prix dans les lable en fonction des choix dans la 1ère et 2ème listbox :
1ère lsitbox : "Gant"
2éme listbox : "Gant en cuir"
Label1 : Affichage de "cuir de vache"
Label2 : Affichage de "40€"
Si vous savez comment faire, et je sais que vous devez le savoir ;-), merci de me donner quelques pistes.
Je pense que d'autres questions viendront au fur et a mesure que j'avancerais dans mon usine a gaz...
Si mon explication n'est pas assez clair, n'hésitez pas à me le dire j'essayerais d'etayer un peu l'explication.
hevy75
Messages postés6Date d'inscriptionlundi 21 février 2005StatutMembreDernière intervention11 avril 2014 15 sept. 2010 à 22:13
Bon mon message n'a pas eu l'air d'inspirer bcp de monde sur ce forum...Sniff Sniff... mais heureusement j'ai eu des réponses ailleur.
Je les partage avec vous si cela sert a d'autre :
------------------------------
1ere réponse (Merci Gorfael)
------------------------------
La macro automatique AfterUpdate charge ta prochaine list/combobox en fonction de la valeur du contrôle (avec une boucle ou autre).
------------------------------
2eme réponse (Merci PIJAKU)
------------------------------
'Cette procédure s'exécute lorsque s'initialise l'UserForm
Private Sub UserForm_Initialize()
'Remplir la ComboBox1 sans doublons
'sources :
'http://www.excel-downloads.com/forum/83545-vba-remplir-une-combobox-sans-doublon.html
Dim i As Integer
For i = 1 To Sheets("Feuil1").Range("A65536").End(xlUp).Row
ComboBox1 = Sheets("Feuil1").Range("A" & i)
If ComboBox1.ListIndex = -1 Then ComboBox1.AddItem Sheets("Feuil1").Range("A" & i)
Next i
'mise à zéro des contrôles
ComboBox1 = ""
ComboBox2.Clear
Label1.Caption = ""
Label2.Caption = ""
End Sub
'Cette procédure s'exécute lorsque la valeur de Combobox1 change
Private Sub ComboBox1_Change()
'remplir la ComboBox2
'Ici le test dit que si la donnée en colonne A = valeur combobox1
'Alors on insère la valeur contenue colonne B dans combobox2
'Et comme la Combobox1, on enlève les doublons...
ComboBox2.Clear
For i = 1 To Sheets("Feuil1").Range("B65536").End(xlUp).Row
If Sheets("Feuil1").Range("A" & i) = ComboBox1.Value Then
ComboBox2 = Sheets("Feuil1").Range("B" & i)
If ComboBox2.ListIndex = -1 Then ComboBox2.AddItem Sheets("Feuil1").Range("B" & i)
End If
Next i
ComboBox2 = ""
Label1.Caption = ""
Label2.Caption = ""
End Sub
'Cette procédure s'exécute lorsque la valeur de Combobox2 change
Private Sub ComboBox2_Change()
Dim i As Integer
For i = 1 To Sheets("Feuil1").Range("A65536").End(xlUp).Row
'Si le contenu de la col A est égal à Combobox1
If Sheets("Feuil1").Range("A" & i) = ComboBox1.Value Then
'Et si le contenu de la colonne B est égal à combobox2
If Sheets("Feuil1").Range("B" & i) = ComboBox2.Value Then
Label1.Caption = Sheets("Feuil1").Range("C" & i).Value
Label2.Caption = Sheets("Feuil1").Range("D" & i).Value
End If
End If
Next i
End Sub
Ce code est à adapter, bien sur le nom de la feuille, des colonnes etc...
Nomme une feuille 'Listes' et celle des données 'Datas'
Avec Listes!A1 qui contient l'article tu peux te fabriquer une liste des modèles avec :
Sub fabListe()
Dim shDatas As Worksheet, shListes As Worksheet, i As Long
Set shDatas = Worksheets("Datas")
Set shListes = Worksheets("listes")
shListes.Range("2:65536").EntireRow.Delete
For i = 2 To shDatas.[A65536].End(xlUp).Row
If shDatas.Cells(i, 1) = shListes.[A1] Then
'soit inscription du n° de ligne dans datas
'shListes.[A65536].End(xlUp).Offset(1, 0) = i
'soit copie du modèle
'shDatas.Cells(i, 2).Copy Destination:=shListes.[A65536].End(xlUp).Offset(1, 0)
'soit copie de la ligne
shDatas.Rows(i).EntireRow.Copy Destination:=shListes.[A65536].End(xlUp).Offset(1, 0)
End If
Next i
End Sub
Ensuite en te servant de l'index de sélection tu récupères (ou calcule, selon le choix fait) ton n° de ligne tu peux récupérer une donnée avec :
nom_de_la_feuille.cells(n°ligne,4) pour le prix par exemple