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
- Mon pc s'allume et s'éteint en boucle ✓ - Forum Matériel & Système
- Xiaomi s'éteint tout seul et se rallume en boucle - Forum Xiaomi
- Redmi redémarre en boucle - Fastboost impossible - Forum Xiaomi
- Huawei s'allume et s'éteint en boucle - Forum Huawei
1 réponse
Utilisateur anonyme
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