MSForms.CheckBox prend en compte option button, checkbox,...

Résolu
TonyLucky - 22 mars 2022 à 17:52
 TonyLucky - 23 mars 2022 à 08:07
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


Le fichier exemple est sur
https://www.cjoint.com/c/LCwqXDc8Zja


Merci par avance de votre temps et de votre aide.
A voir également:

3 réponses

cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 137
22 mars 2022 à 18:52
Bonjour,

voir ceci:

https://silkyroad.developpez.com/VBA/ControlesUserForm/#LI-B

ce qui donne cela:

Private Sub test()
Dim Ctrl As Control
For Each Ctrl In Controls
    If TypeName(Ctrl) = "CheckBox" Then MsgBox Ctrl.Name
Next Ctrl
End Sub

0
dysorthographie Messages postés 92 Date d'inscription jeudi 27 janvier 2022 Statut Membre Dernière intervention 3 avril 2024 5
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
0
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
0
Rejoignez-nous