Bonjour à tous,
Il m'arrive quelque chose de très curieux avec les checkbox dans un USF.
Je veux les intégrer dans un module de classe, mais MSForms.checkbox boucle sur les checkbox, mais aussi sur les option button et même les barres de défilement... Je suis surpris !!! Cela fonctionne très bien pour les autres types de contrôle, mais là, j'ai besoin d'un peu d'aide pour essayer de comprendre !
J'ai contourné le problème soit en utilisant une partie du nom du checkbox, soit avec son tag, mais cela m'ennuie de bloquer le tag pour cela, je risque d'en avoir besoin par ailleurs.
J'ai fait un petit fichier test que je joins à ce message et voici les lignes de code de mon exemple :
For Each ctl In Me.Controls
If TypeOf ctl Is MSForms.CheckBox Then 'prend optionbutton, checkbox,togglebutton
'If ctl.Name Like "CheckBox*" Then 'fonctionne correctement. Fonctionne aussi avec le tag
MsgBox "checkbox" & vbLf & ctl.Name
ElseIf TypeOf ctl Is MSForms.ComboBox Then
MsgBox "combo" & vbLf & ctl.Name
End If
Next ctl
dysorthographie
Messages postés64Date d'inscriptionjeudi 27 janvier 2022StatutMembreDernière intervention11 mars 20234 22 mars 2022 à 21:58
Bonsoir,
dans un module de classe que j'ai appelé MyControl
Private WithEvents txt As MSForms.TextBox, WithEvents CB As MSForms.ComboBox
Private WithEvents Lst As MSForms.ListBox, WithEvents Check As MSForms.CheckBox
Private WithEvents Opt As MSForms.OptionButton, WithEvents Scrol As MSForms.ScrollBar
Private WithEvents MultiP As MSForms.MultiPage, WithEvents Cmd As MSForms.CommandButton, WithEvents frm As MSForms.Frame
Public Property Set Ctrl(Value As Object)
Select Case TypeName(Value)
Case "TextBox": Set txt = Value
Case "ComboBox": Set CB = Value
Case "ListBox": Set Lst = Value
Case "CheckBox": Set Check = Value
Case "OptionButton": Set Opt = Value
Case "ScrollBar": Set Scrol = Value
Case "MultiPage": Set MultiP = Value
Case "CommandButton": Set Cmd = Value
Case "Frame": Set frm = Value
End Select
End Property
Private Sub txt_Change()
End Sub
dans ton UserForm
Dim CtrlS() As New MyControl
Private Sub CommandButton1_Click()
Dim i As Integer
ReDim CtrlS(0)
For Each ctl In Me.Controls
ReDim Preserve CtrlS(i)
Set CtrlS(i).Ctrl = ctl
i = i + 1
Next ctl
End Sub
Bonjour à tous les deux et merci de votre temps.
J'ai testé les deux solutions qui fonctionnent parfaitement. Il ne me reste plus qu'à choisir !
Je vous souhaite une bonne journée et encore merci.
Tony