code formulaire redondant
bonjour a tous
j'utilise le code ci-dessous pour mettre des information dans des textbox à chaque fois que la combobox change
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
|
Private Sub cmb_ref1_Change()
On Error Resume Next
Dim libelle As String
Dim reference As String
Dim prix As Single
Dim poids, prixcarton, prixdétail, prixcartonpromo, prixdétailpromo As Double
Sheets("source").Select
reference = Me.cmb_ref1.Text
Cells.Find(What:=reference, After:=ActiveCell, LookIn:=xlFormulas, LookAt _
:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext).Activate
'faire apparaitre le libéllé
libelle = ActiveCell.Offset(0, 3).Text
Me.txt_lib1.Text = libelle
'faire apparaitre le poids
poids = ActiveCell.Offset(0, 4).Value
Me.txt_poids1.Value = poids
'faire apparaitre le poids
poids = ActiveCell.Offset(0, 4).Value
Me.txt_poids1.Value = poids
'faire apparaitre le prix au carton
prixcarton = ActiveCell.Offset(0, 8).Value
txt_prix_carton1.Value = prixcarton
'faire apparaitre le prix au détail
prixdétail = ActiveCell.Offset(0, 9).Value
txt_prix_detail1.Value = prixdétail
'faire apparaitre le prix au carton promo
prixcartonpromo = ActiveCell.Offset(0, 13).Value
txt_prixpromo_carton1.Value = prixcartonpromo
'faire apparaitre le prix au détail promo
prixdétailpromo = ActiveCell.Offset(0, 14).Value
txt_prixpromo_detail1.Value = prixdétailpromo
End Sub |
j'ai donc 10 combobox et je répète ce code 10 fois
existe-t-il un moyen d’alléger ce système
bonjour bosk1000, le forum,
plusieurs solutions :
1) mettre le code affiché ci-dessus dans une fonction
2) une solution est de placer dans le TAG du COMBOBOX le nom de la TEXTBOX correspondante. Dans chaque évènement change, on passe la valeur de la propriété TAG à la fonction. On ne change rien dans la "USERFORM" et on utilise le paramètre de la fonction.
une autre solution est de renommer chaque combobox avec un numéro et chaque textbox avec le même numéro (pas trop dur avec 20 objets, et ça correspond au code ci-dessus). On va chercher le nombre final dans le nom de la COMBOBOX que l'on réutilise pour la TEXTBOX. Un code simpliste pour comprendre :
Code:
1 2 3 4 5 6 7 8 9 10 11 12
| Sub Cbo01_Change()
TraiteChoix
End Sub
Sub Cbo02_Change()
TraiteChoix
End Sub
Function TraiteChoix
NbFinal = Right(ActiveControl.name,2)
Controls("TxtBox" & NbFinal).value = Rnd
End Function |
une dernière solution est de faire une classe...
ESVBA