Rendre enabled cases à cocher

Bonjour le forum,

est-il possible de rendre un contrôle enabled via VBA ?

J'ai sur un fichier un formulaire avec des boutons d'options et des cases à cocher.

Je voudrais rendre mes cases à cocher enabled lorsque mon bouton d'option non est coché.

J'ai tapé le code suivant:

If OptionButton3.Value = True Then
MsgBox "vous n'avez rien à saisir , cliquez directement sur sauvegarder", vbExclamation, "Information"
For Each CheckBox.Controls In UserForm1
Enabled = False
End If

If OptionButton4.Value = True Then
MsgBox "vous n'avez rien à saisir, cliquez directement sur sauvegarder ", vbExclamation, "Information"
For Each CheckBox.Controls In UserForm1
Enabled = False
End If

Mais mes cases à cocher restent accessibles !

savez vous pourquoi? Comment y remédier ?

Merci d'avance Siga

Bonjour,

Je propose de modifier le code ainsi :

    Dim oControl As Control
    If UserForm1.OptionButton3.Value = True Then
        MsgBox "vous n'avez rien à saisir , cliquez directement sur sauvegarder", vbExclamation, "Information"
        For Each oControl In UserForm1.Controls
            If Left(oControl.Name, 5) = "Check" Then
                oControl.Enable = False
            End If
        Next
    End If

    '....

Bonjour,

Comme ceci peut être :

Dim Ctrl As Control

For Each Ctrl In Me.Controls

    If TypeName(Ctrl) = "CheckBox" Then Ctrl.Enabled = False

Next Ctrl

Bonsoir Theve et GVIALLES,

je vais tenter vos solutions et je reviens vers vous,

le fait que mes boutons d'option et mes cases à cocher soient sur un mltipage et à des pages différentes

a-t-il selon vous une importance pour le code ?

MERCI

Siga

Bonjour à vous

Ce code affectera tous les contrôles du userform, si je ne me trompe pas!!!

Bye

Re,

Si tu vises une page particulière de ton MultiPage :

Dim Ctrl As Control

For Each Ctrl In Me.MultiPage1.Pages(1).Controls

    If TypeName(Ctrl) = "CheckBox" Then Ctrl.Enabled = False

Next Ctrl

Bonjour à tous,

cela ne fonctionne pas hélas.

J'ai essayé de ratttacher ce code à un bouton de commande, rien ne se passe.

Je l'ai aussi placé directement sur le bouton d'option aussi , idem ...

Merci tout de même Patty5046, Theve et GVIALLES.

Siga

Bonjour,

A mettre dans le module de ta Form et tester les quatre boutons d'option :

Private Sub OptionButton1_Click()

    'si le bouton d'option "Oui" est cliqué
    If OptionButton1.Value = True Then Griser OptionButton1, True

End Sub

Private Sub OptionButton3_Click()

    'si le bouton d'option "Oui" est cliqué
    If OptionButton3.Value = True Then Griser OptionButton3, True

End Sub

Private Sub OptionButton2_Click()

    'si le bouton d'option "Non" est cliqué
    If OptionButton2.Value = True Then

        MsgBox "vous n'avez rien à saisir, cliquez directement sur sauvegarder ", vbExclamation, "Information"
        Griser OptionButton2, False

    End If

End Sub

Private Sub OptionButton4_Click()

    'si le bouton d'option "Non" est cliqué
    If OptionButton4.Value = True Then

        MsgBox "vous n'avez rien à saisir, cliquez directement sur sauvegarder ", vbExclamation, "Information"
        Griser OptionButton4, False

    End If

End Sub

'proc commune
Private Sub Griser(Opt As MSForms.OptionButton, Actif As Boolean)

    Dim Ctrl As Control

    For Each Ctrl In Me.MultiPage1.Pages(Opt.Parent.Name).Controls

        If TypeName(Ctrl) = "CheckBox" Then Ctrl.Enabled = Actif

    Next Ctrl

End Sub

Bonjour Theze,

cela ne fonctionne pas non plus ... j'ai une erreur d'exceution 13 incompatibilité de type lorque je clique mon optionbutton 2 .

Lorsque je débogue une ligne de la procédure commune est surlignée en jaune

" For Each Ctrl In Me.MultiPage1.Pages(Opt.Parent.Name).Controls"

celà dit je ne suis pas certaine d'avoir bien procéder car tu évoques le module de mon form

J'ai donc placé au niveau du général , déclaration le code:

Private Sub Griser(Opt As MSForms.OptionButton, Actif As Boolean)

    Dim Ctrl As Control

    For Each Ctrl In Me.MultiPage1.Pages(Opt.Parent.Name).Controls

        If TypeName(Ctrl) = "CheckBox" Then Ctrl.Enabled = Actif

    Next Ctrl

End Sub

Ai-je bien procédé?

Je joins à nouveau le fichier MAJ selon tes instructions ainsi tu te feras une idée.

Merci d'avance ,

Siga

Bonjour

tu as mis:

Dim Ctrl As Controls

Il te faut enlever le s à Control:

Dim Ctrl As Control

Bye

MERCI Patty , effectivement ainsi ça fonctionne

Re,

ça ne fonctionne plus lorsque je transpose cette solution sur un autre fichier.

J'ai un message d'erreur:

err 430

je n'ai jamais vu cette erreur jusqu'ici

je ne comprends pas, la seule différence avec le fichier test est que dans le fichier pro, mon userform a un nom.

Donc, dans ma procédure commune, j'ai modifier une ligne puis que la procédure commune générait l'erreur

et que la ligne For Each Ctrl In Me.MultiPage1.Pages(Opt.Parent.Name).Controls était surlignais en jaune.

À la place de For Each Ctrl In Me.MultiPage1.Pages(Opt.Parent.Name).Controls, j'ai mis

For Each Ctrl In "NomduUserform".MultiPage1.Pages(Opt.Parent.Name).Controls

(je n'ai pas mis de guillemets, ici c'est juste pour illustrer mon souci !)

C'est pareil, à nouveau erreur 430.

J'ai à nouveau essayé avec

For Each Ctrl In Userform.MultiPage1.Pages(Opt.Parent.Name).Controls

Idem, erreur 430

Est-ce que ça vous parle?

Merci d'avance ,

Siga

Re,

"Me" est un mot générique qui représente l'instance de classe (ici, l'objet UserForm) donc, tu peux laisser Me.

Postes une copie de ton classeur pro après avoir modifié les données sensibles pour que nous puissions faire des tests car sinon, ça risque de prendre du temps avant d'arriver au bout !

Bonjour

Gros bazar:

Cela aurait peut-être un rapport avec :

la version de MDAC (Microsoft Data Access Components)

????

Bon courage

Bonjour à tous,

Comme proposé par Theze,

Voici mon fichier pro très édulcoré

Merci d'avance,

Siga

Hello Patty5046,

[quote=Patty5046 post_id=618525 time=1517499836 user_id=38819]

Gros bazar:

Cela aurait peut-être un rapport avec :

la version de MDAC (Microsoft Data Access Components)

à mon tour d'être dans le flou total...je vais voir ce qu'est le MDAC mais à mon avis seul l'administrateur aura accès à cette donnée

dans ma boite

Merci pour l'info,

Siga

Bonjour siga

ton fichier fonctionne chez moi

A+

Bon,jour,

Hé oui, c'est le problème quand on ne dit pas tout et que le classeur test ne ressemble pas vraiment au classeur définitif !

Tes cases à cocher et tes boutons d'option sont bien sur les pages du Multipage1 mais il sont surtout sur un Frame et donc, quand on indique un nom erroné ça plante :

MultiPage1.Pages(Opt.Parent.Name)

Opt.Parent.Name retourne non pas le nom de la page mais celui du Frame

Voici le code modifié en utilisant non pas le nom de la page mais la page active :

Private Sub Griser(Opt As MSForms.OptionButton, Actif As Boolean)

    Dim Ctrl As Control

    For Each Ctrl In Me.MultiPage1.SelectedItem.Controls

        If TypeName(Ctrl) = "CheckBox" Then Ctrl.Enabled = Actif

    Next Ctrl

End Sub

Bonjour Theve,

...et oui tu as tout à fait raison

MERCI de ton attention et de ta bienveillance en tout cas.

Bon weekend

Siga

Rechercher des sujets similaires à "rendre enabled cases cocher"