Comment faire une boucle dans une userform
Sahmy021
Messages postés
17
Date d'inscription
Statut
Membre
Dernière intervention
-
Patrice33740 Messages postés 8561 Date d'inscription Statut Membre Dernière intervention -
Patrice33740 Messages postés 8561 Date d'inscription Statut Membre Dernière intervention -
Bonjour
Je désire faire une boucle dans une userform.
J'ai deux combobox qui s'enchaine et la liste de la 2nd dépends du choix dans la première.
J'ai besoin de faire 15 ligne identique dans mon formulaire. j'aimerais éviter de mettre 15 fois le meme code en changeant juste les num de mes combobox
ci-dessous mon code pour les deux premières :
Merci d'avance
Je désire faire une boucle dans une userform.
J'ai deux combobox qui s'enchaine et la liste de la 2nd dépends du choix dans la première.
J'ai besoin de faire 15 ligne identique dans mon formulaire. j'aimerais éviter de mettre 15 fois le meme code en changeant juste les num de mes combobox
ci-dessous mon code pour les deux premières :
Private Sub CbbxLigneBudg1_Change() If CbbxLigneBudg1.Value <> "" Then CbbxSsLigneBudg1.Enabled = True Else CbbxSsLigneBudg1.Enabled = False End If If CbbxLigneBudg1.Value = "Ass. Plongeur" Then CbbxSsLigneBudg1.RowSource = "LstAssPlongeur" ElseIf CbbxLigneBudg1.Value = "Vètement" Then CbbxSsLigneBudg1.RowSource = "LstVetement" ElseIf CbbxLigneBudg1.Value = "Reglt Plongées" Then CbbxSsLigneBudg1.RowSource = "LstregltPlongée" ElseIf CbbxLigneBudg1.Value = "Boissons" Then CbbxSsLigneBudg1.RowSource = "LstBoisson" ElseIf CbbxLigneBudg1.Value = "Licence" Then CbbxSsLigneBudg1.RowSource = "LstLicence1" ElseIf CbbxLigneBudg1.Value = "Sorties Voyages" Then CbbxSsLigneBudg1.RowSource = "LstSorties" ElseIf CbbxLigneBudg1.Value = "Formation" Then CbbxSsLigneBudg1.RowSource = "LstFormation" ElseIf CbbxLigneBudg1.Value = "Fonc. Admin" Then CbbxSsLigneBudg1.RowSource = "LstFoncadmin" ElseIf CbbxLigneBudg1.Value = "Manifestation" Then CbbxSsLigneBudg1.RowSource = "LstManif" ElseIf CbbxLigneBudg1.Value = "Fonc. Activité" Then CbbxSsLigneBudg1.RowSource = "LstFoncAct" ElseIf CbbxLigneBudg1.Value = "Charges" Then CbbxSsLigneBudg1.RowSource = "LstCharge" ElseIf CbbxLigneBudg1.Value = "Subvention Cotisation" Then CbbxSsLigneBudg1.RowSource = "LstSubvCotis" End If End Sub Private Sub CbbxLigneBudg2_Change() If CbbxLigneBudg2.Value <> "" Then CbbxSsLigneBudg2.Enabled = True Else CbbxSsLigneBudg2.Enabled = False End If If CbbxLigneBudg2.Value = "Ass. Plongeur" Then CbbxSsLigneBudg2.RowSource = "LstAssPlongeur" ElseIf CbbxLigneBudg2.Value = "Vètement" Then CbbxSsLigneBudg2.RowSource = "LstVetement" ElseIf CbbxLigneBudg2.Value = "Reglt Plongées" Then CbbxSsLigneBudg2.RowSource = "LstregltPlongée" ElseIf CbbxLigneBudg2.Value = "Boissons" Then CbbxSsLigneBudg2.RowSource = "LstBoisson" ElseIf CbbxLigneBudg2.Value = "Licence" Then CbbxSsLigneBudg2.RowSource = "LstLicence2" ElseIf CbbxLigneBudg2.Value = "Sorties Voyages" Then CbbxSsLigneBudg2.RowSource = "LstSorties" ElseIf CbbxLigneBudg2.Value = "Formation" Then CbbxSsLigneBudg2.RowSource = "LstFormation" ElseIf CbbxLigneBudg2.Value = "Fonc. Admin" Then CbbxSsLigneBudg2.RowSource = "LstFoncadmin" ElseIf CbbxLigneBudg2.Value = "Manifestation" Then CbbxSsLigneBudg2.RowSource = "LstManif" ElseIf CbbxLigneBudg2.Value = "Fonc. Activité" Then CbbxSsLigneBudg2.RowSource = "LstFoncAct" ElseIf CbbxLigneBudg2.Value = "Charges" Then CbbxSsLigneBudg2.RowSource = "LstCharge" ElseIf CbbxLigneBudg2.Value = "Subvention Cotisation" Then CbbxSsLigneBudg2.RowSource = "LstSubvCotis" End If End Sub
Merci d'avance
EDIT : Ajout des balises de code (la coloration syntaxique).
Explications disponibles ici : ICI Merci d'y penser dans tes prochains messages. |
A voir également:
- Comment faire une boucle dans une userform
- Boucle excel sans macro - Forum Excel
- Mon pc s'allume et s'éteint en boucle ✓ - Forum Matériel & Système
- Mise à disposition de boucle locale dédiée ✓ - Forum Freebox
- Vlc lire en boucle ✓ - Forum Lecteurs et supports vidéo
- Xiaomi s'éteint tout seul et se rallume en boucle - Forum Xiaomi
1 réponse
Bonsoir,
faire une boucle n'est pas la solution pour ne pas répéter un code comme le tien.
Il faut mettre le code dans une sub ou une fonction qui prend en paramètre les combos.
Cette fonction tu l'appelles de chaque évènement Change avec les paramètres adéquats.
Private Sub CbbxLigneBudg1_Change()
GestionCombo CbbxLigneBudg1, CbbxSsLigneBudg1
End Sub
Private Sub CbbxLigneBudg2_Change()
GestionCombo CbbxLigneBudg2.Value, CbbxSsLigneBudg2
End Sub
Par contre tu peux alléger ta cascade de If en utilisant un Select Case.
faire une boucle n'est pas la solution pour ne pas répéter un code comme le tien.
Il faut mettre le code dans une sub ou une fonction qui prend en paramètre les combos.
Cette fonction tu l'appelles de chaque évènement Change avec les paramètres adéquats.
Sub GestionCombo(Source as ComboBox, Cible as ComboBox If Source.Value <> "" Then Cible.Enabled = True Else Cible.Enabled = False End If If Source.Value = "Ass. Plongeur" Then Cible.RowSource = "LstAssPlongeur" ElseIf Source.Value = "Vètement" Then Cible.RowSource = "LstVetement" ElseIf Source.Value = "Reglt Plongées" Then Cible.RowSource = "LstregltPlongée" ElseIf Source.Value = "Boissons" Then Cible.RowSource = "LstBoisson" ElseIf Source.Value = "Licence" Then Cible.RowSource = "LstLicence1" ElseIf Source.Value = "Sorties Voyages" Then Cible.RowSource = "LstSorties" ElseIf Source.Value = "Formation" Then Cible.RowSource = "LstFormation" ElseIf Source.Value = "Fonc. Admin" Then Cible.RowSource = "LstFoncadmin" ElseIf Source.Value = "Manifestation" Then Cible.RowSource = "LstManif" ElseIf Source.Value = "Fonc. Activité" Then Cible.RowSource = "LstFoncAct" ElseIf Source.Value = "Charges" Then Cible.RowSource = "LstCharge" ElseIf Source.Value = "Subvention Cotisation" Then Cible.RowSource = "LstSubvCotis" End If End Sub
Private Sub CbbxLigneBudg1_Change()
GestionCombo CbbxLigneBudg1, CbbxSsLigneBudg1
End Sub
Private Sub CbbxLigneBudg2_Change()
GestionCombo CbbxLigneBudg2.Value, CbbxSsLigneBudg2
End Sub
Par contre tu peux alléger ta cascade de If en utilisant un Select Case.
Du coup je suis qd même obligé d'enchainer les 15 "private sub" ?
J'ai vu des chose sur le select case
je vais fouiner un peux pour voir comment cela fonctionne
encore merci
un peu plus simple mais toujours autant de ligne
Tu fais une boucle For, pour tester les sources, quand tu trouves la bonnes, tu appliques le RowSource du même index.
VBA, c'est loin pour moi, je ne suis pas capable de te faire un exemple de tête (contrairement à tout à l'heure) et je n'ai pas de PC sous la main.
Moi c'est ma première sur VBA ! et je m'étais juré de jamais y mettre les mains lol
Pour le reste y a-t-il moyen de faire une boucle pour éviter de faire les 15 commandes de private sub?
Tu peux t'inspirer de cet exemple :
https://silkyroad.developpez.com/VBA/ControlesUserForm/#LII-C