Action à lancer à chaque click sur un CheckBox

Y compris Power BI, Power Query et toute autre question en lien avec Excel
M
Manu31
Membre habitué
Membre habitué
Messages : 88
Inscrit le : 14 mars 2014
Version d'Excel : 2007 FR

Message par Manu31 » 22 octobre 2018, 15:53

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()

Dim Obj As OLEObject
Dim maClasse As Classe1

Set maCollection = New Collection

For Each Obj In Worksheets("Feuil1").OLEObjects
If TypeOf Obj.Object Is MSForms.Checkbox Then
Set maClasse = New Classe1
Set maClasse.CheckBoxGroup = Obj.Object
maCollection.Add maClasse
End If
Next Obj

End Sub


J'ai aussi dans un module de classe :

Public WithEvents CheckBoxGroup As MSForms.Checkbox
Private Sub CheckBoxGroup_Change()

If CheckBoxGroup.Caption = "Finding" Then UserForm580.Show

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
Avatar du membre
Ausecour
Membre impliqué
Membre impliqué
Messages : 1'912
Appréciations reçues : 202
Inscrit le : 31 mai 2018
Version d'Excel : 2010 FR, 2013 FR

Message par Ausecour » 22 octobre 2018, 16:12

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... 8[]
Plus un sujet a un titre précis, des explications claires, et un fichier Excel bien préparé, plus il a de chances d'avoir une réponse qui répond au besoin, mettez toutes les chances de votre côté :bien:
"100% des gagnants auront tenté leur chance" :trfl:
Avatar du membre
Steelson
Fanatique d'Excel
Fanatique d'Excel
Messages : 10'369
Appréciations reçues : 490
Inscrit le : 13 octobre 2014
Version d'Excel : 2013 FR

Message par Steelson » 22 octobre 2018, 16:33

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
bouton appel variable procedure.xlsm
(18.48 Kio) Téléchargé 13 fois

O.o°• ♪♪♫ °º¤ø,¸¸,ø¤º°`°º¤ø,¸ O.o°• ♪♪♫ °º¤ø,¸¸,ø¤º°`°º¤ø,¸
PI = 3.14159 26535 89793 23846 26433 83279 50288 41971 69399 37510 58209 74944 59230 78164 06286 20899 86280

( ͡• ͜ʖ ͡• )
M
Manu31
Membre habitué
Membre habitué
Messages : 88
Inscrit le : 14 mars 2014
Version d'Excel : 2007 FR

Message par Manu31 » 22 octobre 2018, 16:43

Ausecour a écrit :
22 octobre 2018, 16:12
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.
Rapport d'examen de navigabilité.docx
(124.21 Kio) Téléchargé 10 fois
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.
Steelson a écrit :
22 octobre 2018, 16:33
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
M
Manu31
Membre habitué
Membre habitué
Messages : 88
Inscrit le : 14 mars 2014
Version d'Excel : 2007 FR

Message par Manu31 » 24 octobre 2018, 05:46

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
T
Theze
Passionné d'Excel
Passionné d'Excel
Messages : 3'312
Appréciations reçues : 213
Inscrit le : 26 janvier 2011
Version d'Excel : 2007

Message par Theze » 24 octobre 2018, 07:06

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 (°v°)° 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
Avatar du membre
Steelson
Fanatique d'Excel
Fanatique d'Excel
Messages : 10'369
Appréciations reçues : 490
Inscrit le : 13 octobre 2014
Version d'Excel : 2013 FR

Message par Steelson » 24 octobre 2018, 10:00

Theze a écrit :
24 octobre 2018, 07:06
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 (°v°)° 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 !

O.o°• ♪♪♫ °º¤ø,¸¸,ø¤º°`°º¤ø,¸ O.o°• ♪♪♫ °º¤ø,¸¸,ø¤º°`°º¤ø,¸
PI = 3.14159 26535 89793 23846 26433 83279 50288 41971 69399 37510 58209 74944 59230 78164 06286 20899 86280

( ͡• ͜ʖ ͡• )
M
Manu31
Membre habitué
Membre habitué
Messages : 88
Inscrit le : 14 mars 2014
Version d'Excel : 2007 FR

Message par Manu31 » 19 novembre 2018, 11:28

Theze a écrit :
24 octobre 2018, 07:06
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
Répondre Sujet précédentSujet suivant
  • Sujets similaires
    Réponses
    Vues
    Dernier message