Action à lancer à chaque click sur un CheckBox

Salut,

Voilà mon souci : j'ai 112 Checkbox répartis sur 16 UserForm (562 à 577) qui me servent à enregistrer le résultat d'une inspection. Ils sont différenciés par leur Caption (FC, NA ou Finding).

Quand l'opérateur active un CheckBox " Finding " je voudrais qu'une UserForm s'ouvre pour qu'il puisse saisir les informations du défaut trouvé, les solutions à apporter et le délai de traitement du défaut.

J'ai trouvé un Code avec Google qui me met notamment dans " ThisWorkbook ":

Private Sub Workbook_Open()

End Sub

J'ai aussi dans un module de classe :

Public WithEvents CheckBoxGroup As MSForms.Checkbox

End Sub

Et " maCollection " est bien déclaré en public dans un module standard.

Je ne vois pas comment remplacer le " Worksheets("Feuil1") " par la liste des 16 UserForm sur lesquels je veux agir.

Si vous avez une solution, comme d'hab je prends.

Merci

Manu

Bonjour,

Il te faut 2 boucles :

For each formulaire in VBA.Userforms (pour accéder à cette collection, il faut aller dans l'onglet développeur puis cliquer sur sécurité des macros et enfin cocher la case "Accès approuvé au modèle d'objet du projet VBA", si il te demande de valider tu valides)

For each controle in formulaire.controls

next controle

Next formulaire

Sinon 112 checkbox dans 16 formulaires, je ne vois pas ton fichier mais je pense que tu as besoin de faire du ménage...

Bonjour,

oui, cela me semble bien compliqué

sur la solution, il y a beaucoup plus simple : avec une seule macro, tu récupères le texte du bouton qui devient une variable pour lancer la procédure adhoc

Sinon 112 checkbox dans 16 formulaires, je ne vois pas ton fichier mais je pense que tu as besoin de faire du ménage...

Mon formulaire sert à enregistrer les résultats de chaque point à contrôler pendant l'audit. Il y a 112 points, et pour chacun d'entre eux il y a 3 possibilités. Le format du rapport d'audit est défini par la règlementation, je n'ai pas la possibilité d'y déroger.

Mon fichier sert de logiciel de gestion d'un atelier de maintenance aéronautique, il doit permettre le suivi des avions, des stocks, des audits, des contrôles qualité, des visites de maintenance... Il en est aujourd'hui à 85 UserForm et il me reste encore plusieurs modules à développer.

Si tu as une solution pour simplifier ça je prends. Mais je ne vois pas comment on pourrait se passer de toutes ces données.

sur la solution, il y a beaucoup plus simple : avec une seule macro, tu récupères le texte du bouton qui devient une variable pour lancer la procédure adhoc

Ok merci je vais regarder ça.

Manu

Steelson, ton exemple est sur des contrôles sur une feuille Excel. Comment est ce que je peux faire pour avoir la même chose sur plusieurs UserForm ?

Manu

Bonjour,

Steelson, ton exemple est sur des contrôles sur une feuille Excel. Comment est ce que je peux faire pour avoir la même chose sur plusieurs UserForm ?

Tu ne peux tout simplement pas car Steelson a utilisé des contrôles issus de la barre d'outils "Formulaire" alors que sur un UserForm ce sont des ActiveX !

A mettre dans le module de la Form :

Dim Chk() As New Classe1

Private Sub UserForm_Initialize()

    Dim Ctrl As Control
    Dim I As Integer

    For Each Ctrl In Me.Controls

        If TypeName(Ctrl) = "CheckBox" Then

            If Ctrl.Caption = "Finding" Then

                I = I + 1: ReDim Preserve Chk(1 To I)
                Set Chk(I).GroupeChk = Ctrl

            End If

        End If

    Next Ctrl

    Set Ctrl = Nothing

End Sub

Seuls les cases à cocher portant le caption "Finding" seront mise dans le tableau d'instance de classe.

A mettre dans le module de la classe nommée Classe1 (par défaut) :

Public WithEvents GroupeChk As MSForms.CheckBox

Private Sub GroupeChk_Click()

    If GroupeChk.Value = True Then UserForm580.Show

End Sub

Bonjour,

Steelson, ton exemple est sur des contrôles sur une feuille Excel. Comment est ce que je peux faire pour avoir la même chose sur plusieurs UserForm ?

Tu ne peux tout simplement pas car Steelson a utilisé des contrôles issus de la barre d'outils "Formulaire" alors que sur un UserForm ce sont des ActiveX !

Bonjour à tous

en effet, j'avais répondu sur le principe avant d'avoir le formulaire !

A mettre dans le module de la Form :

Dim Chk() As New Classe1

Private Sub UserForm_Initialize()

    Dim Ctrl As Control
    Dim I As Integer

    For Each Ctrl In Me.Controls

        If TypeName(Ctrl) = "CheckBox" Then

            If Ctrl.Caption = "Finding" Then

                I = I + 1: ReDim Preserve Chk(1 To I)
                Set Chk(I).GroupeChk = Ctrl

            End If

        End If

    Next Ctrl

    Set Ctrl = Nothing

End Sub

Seuls les cases à cocher portant le caption "Finding" seront mise dans le tableau d'instance de classe.

A mettre dans le module de la classe nommée Classe1 (par défaut) :

Public WithEvents GroupeChk As MSForms.CheckBox

Private Sub GroupeChk_Click()

    If GroupeChk.Value = True Then UserForm580.Show

End Sub

J'ai un message d'erreur : Erreur d'exécution 459 - L'objet ou la classe ne gère pas le jeu d'évènements.

Je sais pas si ça peut jouer, mais j'ai entre temps remplacé les CheckBox par des OptionButton, et j'ai modifié

        If TypeName(Ctrl) = "OptionButton" Then

Manu

Rechercher des sujets similaires à "action lancer chaque click checkbox"