Comment faire une boucle dans une userform
Fermé
Sahmy021
Messages postés
17
Date d'inscription
dimanche 3 décembre 2017
Statut
Membre
Dernière intervention
7 décembre 2017
-
Modifié le 3 déc. 2017 à 19:36
Patrice33740 Messages postés 8556 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 2 mars 2023 - 3 déc. 2017 à 23:44
Patrice33740 Messages postés 8556 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 2 mars 2023 - 3 déc. 2017 à 23:44
A voir également:
- Comment faire une boucle dans une userform
- Freebox redémarre en boucle ✓ - Forum Freebox
- Mon pc s'allume et s'éteint en boucle ✓ - Forum Matériel & Système
- Samsung a51 redémarre en boucle - Forum Mobile
- Redmi note 8 s'allume et s'éteint en boucle - Forum Xiaomi
- Ipad s'allume et s'éteint en boucle - Forum iPad
1 réponse
Whismeril
Messages postés
19029
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
26 avril 2024
931
3 déc. 2017 à 19:56
3 déc. 2017 à 19:56
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.
3 déc. 2017 à 21:20
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
3 déc. 2017 à 21:41
un peu plus simple mais toujours autant de ligne
3 déc. 2017 à 22:05
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.
Modifié le 3 déc. 2017 à 22:31
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?
3 déc. 2017 à 23:44
Tu peux t'inspirer de cet exemple :
https://silkyroad.developpez.com/VBA/ControlesUserForm/#LII-C