Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

combobox à remplir en fonction d'une condition

1 réponse
Avatar
jackadit
Bonjour,

j'ai un petit souci pour programmer la chose suivante :

J'ai sur une page d'un userform deux séries de combobox qui ne s'affichent
que lorsque je remplie une valeur dans un textBox.
(cette valeur est le nombre de lignes de ComboBox à afficher)

Chaque ligne de ComboBox comporte deux comboBox dont chacun à un contenu
différent.

Et c'est là que je bloque. Je n'arrive pas à définir la liste à afficher
pour chacun des Combobox.

J'ai pour l'instant le code suivant :

Sub boucleprestations()

Dim Ctrl As Control
Dim Nb As Integer
Dim b As Integer
Nb = 10 'Nombre de rangée dans le formulaire

On Error Resume Next
'Cint est une fonction de conversion de
'Texte en nombre de type entier
'Si l'usager tape une valeur non désiré
'cela provoque une erreur qui est intercepté
'et on sort de la procédure.
b = CInt(Txbprestations)
If Err > 0 Then
Err = 0
Exit Sub
End If

If b <= 0 Or b > Nb Then Exit Sub

For Each Ctrl In Me.MultiPage1.Pages(3).Controls
Select Case TypeName(Ctrl)
Case Is = "ComboBox"
Ctrl.Visible = False
If Val(Right(Ctrl.Name, 1)) < b Then
Ctrl.Visible = True
End If

Case Is = "TextBox"
Ctrl.Visible = False
If Val(Right(Ctrl.Name, 1)) < b Then
Ctrl.Visible = True
End If

Case Is = "CheckBox"
Ctrl.Visible = False
If Val(Right(Ctrl.Name, 1)) < b Then
Ctrl.Visible = True
End If
End Select
Next

For Each Ctrl In Me.MultiPage1.Pages(3).Controls
If TypeOf Ctrl Is ComboBox Then <----
c'est ici qu'il faut que je change quelque chose mais je
n'arrive pas à trouver la syntaxe
Ctrl.RowSource = "Donnees!Tab_prestations"
End If
Next

End Sub


En fait je cherche un truc du genre :

Si le texte du combobox contient ComboBox1... alors remplir avec ...
Sinon remplir avec ....

Quelle serait la piste à suivre ?

Merci de vos conseils

jackadit

1 réponse

Avatar
Jackadit
J'ai trouvé une solution ...
c'est peut-être un peu "bidouille" mais ça fonctionne.

si quelqu'un à une solution plus "propre" je suis preneur.

Sub boucleprestations()

Dim Ctrl As Control
Dim Nb As Integer
Dim b As Integer
Nb = 10 'Nombre de rangée dans le formulaire

On Error Resume Next
'Cint est une fonction de conversion de
'Texte en nombre de type entier
'Si l'usager tape une valeur non désiré
'cela provoque une erreur qui est intercepté
'et on sort de la procédure.
b = CInt(Txbprestations)
If Err > 0 Then
Err = 0
Exit Sub
End If

If b <= 0 Or b > Nb Then Exit Sub

For Each Ctrl In Me.MultiPage1.Pages(4).Controls
Select Case TypeName(Ctrl)
Case Is = "ComboBox"
Ctrl.Visible = False
If Val(Right(Ctrl.Name, 1)) < b Then
Ctrl.Visible = True
End If

Case Is = "TextBox"
Ctrl.Visible = False
If Val(Right(Ctrl.Name, 1)) < b Then
Ctrl.Visible = True
End If

Case Is = "CheckBox"
Ctrl.Visible = False
If Val(Right(Ctrl.Name, 1)) < b Then
Ctrl.Visible = True
End If
End Select
Next

For Each Ctrl In Me.MultiPage1.Pages(3).Controls
If TypeOf Ctrl Is ComboBox Then

If Left(Ctrl.Name, 9) = "ComboBox4" Then
Ctrl.RowSource = "Formateurs!Tab_prestations"
End If

If Left(Ctrl.Name, 9) = "ComboBox5" Then
Ctrl.RowSource = "Formateurs!Tab_vacataires"
End If
End If
Next

End Sub



Mes combobox se nommant ComboBox40, ComboBox41, ComboBox42, etc
et pour la deuxième série ComboBox50, ComboBox51, ComboBox52, etc


Voilà je mets ma solution en espérant que cela puisse servir...

jackadit


"jackadit" a écrit dans le message de groupe de
discussion :
Bonjour,

j'ai un petit souci pour programmer la chose suivante :

J'ai sur une page d'un userform deux séries de combobox qui ne s'affichent
que lorsque je remplie une valeur dans un textBox.
(cette valeur est le nombre de lignes de ComboBox à afficher)

Chaque ligne de ComboBox comporte deux comboBox dont chacun à un contenu
différent.

Et c'est là que je bloque. Je n'arrive pas à définir la liste à afficher
pour chacun des Combobox.

J'ai pour l'instant le code suivant :

Sub boucleprestations()

Dim Ctrl As Control
Dim Nb As Integer
Dim b As Integer
Nb = 10 'Nombre de rangée dans le formulaire

On Error Resume Next
'Cint est une fonction de conversion de
'Texte en nombre de type entier
'Si l'usager tape une valeur non désiré
'cela provoque une erreur qui est intercepté
'et on sort de la procédure.
b = CInt(Txbprestations)
If Err > 0 Then
Err = 0
Exit Sub
End If

If b <= 0 Or b > Nb Then Exit Sub

For Each Ctrl In Me.MultiPage1.Pages(3).Controls
Select Case TypeName(Ctrl)
Case Is = "ComboBox"
Ctrl.Visible = False
If Val(Right(Ctrl.Name, 1)) < b Then
Ctrl.Visible = True
End If

Case Is = "TextBox"
Ctrl.Visible = False
If Val(Right(Ctrl.Name, 1)) < b Then
Ctrl.Visible = True
End If

Case Is = "CheckBox"
Ctrl.Visible = False
If Val(Right(Ctrl.Name, 1)) < b Then
Ctrl.Visible = True
End If
End Select
Next

For Each Ctrl In Me.MultiPage1.Pages(3).Controls
If TypeOf Ctrl Is ComboBox Then <----
c'est ici qu'il faut que je change quelque chose mais je n'arrive pas à
trouver la syntaxe
Ctrl.RowSource = "Donnees!Tab_prestations"
End If
Next

End Sub


En fait je cherche un truc du genre :

Si le texte du combobox contient ComboBox1... alors remplir avec ...
Sinon remplir avec ....

Quelle serait la piste à suivre ?

Merci de vos conseils

jackadit