IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Accéder et modifier les ComboBox de déclaration dans le CodeModule d'un userform


Sujet :

Macros et VBA Excel

  1. #1
    Membre confirmé
    Homme Profil pro
    Automaticien
    Inscrit en
    Décembre 2015
    Messages
    84
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Automaticien

    Informations forums :
    Inscription : Décembre 2015
    Messages : 84
    Par défaut Accéder et modifier les ComboBox de déclaration dans le CodeModule d'un userform
    Bonjour,

    Désolé si cette question a déjà été posée, mais je ne sais pas trop comment décrire de façon textuelle ma demande donc je ne trouve pas de réponse correspondant à mon besoin.

    En fait je cherche pour un CodeModule donné (entre autre celui d'un userform) à accéder aux deux ComboBox qui permettent de faire les déclarations en fonction des évènements.
    Le but est de dynamiquement ajouter des éléments à ces fameux ComboBox.

    En cherchant en ligne, j'ai vu que je pouvais déjà accéder (je n'ai pas tenté de les modifier) aux boutons File, Edit, View, Insert, etc mais pas moyen de trouver ces deux combobox !


    Merci d'avoir pris le temps de me lire, et merci à ceux qui tenteront de m'apporter leur aide
    Images attachées Images attachées   

  2. #2
    Membre Expert Avatar de Transitoire
    Homme Profil pro
    Auditeur informatique
    Inscrit en
    Décembre 2017
    Messages
    733
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Auditeur informatique

    Informations forums :
    Inscription : Décembre 2017
    Messages : 733
    Par défaut
    Salut, Vos copies d'écran ne montre pas de ComboBox. êtes vous sur d'être sur le bon UserForm.
    Pouvez vous nous mettre une copie du UF ouvert.
    Mettez vous sur le formulaire du UF et Double cliquez sur le Combo. aussitôt va s'ouvrir la feuille de code correspondante avec une procédure vide:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub ComboBox1_Click()
     
    End Sub
    Cordialement

  3. #3
    Membre confirmé
    Homme Profil pro
    Automaticien
    Inscrit en
    Décembre 2015
    Messages
    84
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Automaticien

    Informations forums :
    Inscription : Décembre 2015
    Messages : 84
    Par défaut
    Bonjour,

    Merci d'avoir pris le temps de répondre.

    Mes copies d'écran encadrent en rouge les ComboBox que je veux modifier, ce sont des éléments système (des listes déroulante de l'interface de développement).

    En fait, je gère des évènements avec un module de classe.
    Ces évènements vérifient l’existence de mes procédures dans le CodeModule de l'userform et si ils existent, ils y font appels.
    Et je voulais modifier les listes déroulantes système afin d'intégrer mes propres évènements qui sont créé par du code et qui sont défini à partir des éléments qui composent mon userform.

    Je ne sais pas si c'est plus clair... Bref, je cherche à atteindre des listes déroulantes de l'interface de développement !

    Par défaut, ces listes déroulantes affichent (General) et (Declarations)

  4. #4
    Membre Expert Avatar de Transitoire
    Homme Profil pro
    Auditeur informatique
    Inscrit en
    Décembre 2017
    Messages
    733
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Auditeur informatique

    Informations forums :
    Inscription : Décembre 2017
    Messages : 733
    Par défaut
    Re
    Pardonnez moi, vous me parlez d'un Combobox, mais ce que vous avez entouré de rouge, ce sont des CheckBoxs ???

    Cordialement

  5. #5
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Par défaut
    Bonjour,

    Nono02P parle bien de deux ComboBox et il a bien entouré de rouge les deux ComboBox situé juste au dessus de la zone d'édition !

    Je ne crois pas que tu puisses avoir accès à leurs listes car elles sont alimentées en fonction des procédures et fonctions qui sont créées dans la zone d'édition mais je peux me tromper !

  6. #6
    Membre confirmé
    Homme Profil pro
    Automaticien
    Inscrit en
    Décembre 2015
    Messages
    84
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Automaticien

    Informations forums :
    Inscription : Décembre 2015
    Messages : 84
    Par défaut
    Oui Theze, tu as compris !


    En tout cas j'ai vu qu'il était possible de changer les CommandBars en haut (File, Edit, View, etc)

    A l'exécution de Sub test() :
    Nom : Test.PNG
Affichages : 828
Taille : 63,8 Ko

    A l'exécution de Sub test2() :
    Nom : Test2.PNG
Affichages : 814
Taille : 68,5 Ko

    J'ai un espoir que ça soit possible d'atteindre les ComboBox, donc je continue à chercher !

  7. #7
    Membre Expert
    Avatar de pijaku
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    1 817
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Août 2010
    Messages : 1 817
    Billets dans le blog
    10
    Par défaut
    Bonjour,
    Pourrait on voir le code de ta classe qui gère tes événements?

  8. #8
    Membre confirmé
    Homme Profil pro
    Automaticien
    Inscrit en
    Décembre 2015
    Messages
    84
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Automaticien

    Informations forums :
    Inscription : Décembre 2015
    Messages : 84
    Par défaut
    Bonjour,

    Oui, voici ci-dessous une vue de l'ensemble (enfin si j'ai rien oublié )... Mon approche va peut-être paraître bizarre mais j'ai fait ça pour avoir le code écrit dans l'userform.

    Créer un module de classe nommé clsEvent :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
    232
    233
    234
    235
    236
    237
    238
    239
    240
    241
    242
    243
    244
    245
    246
    247
    248
    249
    250
    251
    252
    253
    254
    255
    256
    257
    258
    259
    260
    261
    262
    263
    264
    265
    266
    267
    268
    269
    270
    271
    272
    273
    274
    275
    276
    277
    278
    279
    280
    281
    282
    283
    284
    285
    286
    287
    288
    289
    290
    291
    292
    293
    294
    295
    296
    297
    298
    299
    300
    301
    302
    303
    304
    305
    306
    307
    308
    309
    310
    311
    312
    313
    314
    315
    316
    317
    318
    319
    320
    321
    322
    323
    324
    325
    326
    327
    328
    329
    330
    331
    332
    333
    334
    335
    336
    337
    338
    339
    340
    341
    342
    343
    344
    345
    346
    347
    348
    349
    350
    351
    352
    353
    354
    355
    356
    357
    358
    359
    360
    361
    362
    363
    364
    365
    366
    367
    368
    369
    370
    371
    372
    373
    374
    375
    376
    377
    378
    379
    380
    381
    382
    383
    384
    385
    386
    387
    388
    389
    390
    391
    392
    393
    394
    395
    396
    397
    398
    399
    400
    401
    402
    403
    404
    405
    406
    407
    408
    409
    410
    411
    412
    413
    414
    415
    416
    417
    418
    419
    420
    421
    422
    423
    424
    425
    426
    427
    428
    429
    430
    431
    432
    433
    434
    435
    436
    437
    438
    439
    440
    441
    442
    443
    444
    445
    446
    447
    448
    449
    450
    451
    452
    453
    454
    455
    456
    457
    458
    459
    460
    461
    462
    463
    464
    465
    466
    467
    468
    469
    470
    471
    472
    473
    474
    475
    476
    477
    478
    479
    480
    481
    482
    483
    484
    485
    486
    487
    488
    489
    490
    491
    492
    493
    494
    495
    496
    497
    498
    499
    500
    501
    502
    503
    504
    505
    506
    507
    508
    509
    510
    511
    512
    513
    514
    515
    516
    517
    518
    519
    520
    521
    522
    523
    524
    525
    526
    527
    528
    529
    530
    531
    532
    533
    534
    535
    536
    537
    538
    539
    540
    541
    542
    543
    544
    545
    546
    547
    548
    549
    550
    551
    552
    553
    554
    555
    556
    557
    558
    559
    560
    561
    562
    563
    Option Explicit
     
    'Private m_clsEvents As Collection
    Private m_objParent As clsEvents
     
    'Prendre l'habitude de mettre "MSForms." pour ne pas générer d'erreurs. En effet les objets de type TextBox sont différents des objets de type MSForms.TextBox
    Private WithEvents m_objLbl As MSForms.Label            'Variable qui correspond aux label(s) du formulaire
    Private WithEvents m_objChk As MSForms.CheckBox         'Variable qui correspond aux checkbox(s) du formulaire
    Private WithEvents m_objCbo As MSForms.ComboBox         'Variable qui correspond aux ComboBox(s) du formulaire
    Private WithEvents m_objImg As MSForms.Image            'Variable qui correspond aux Image(s) du formulaire
    Private WithEvents m_objLst As MSForms.ListBox          'Variable qui correspond aux ListBox(s) du formulaire
    Private WithEvents m_objMtp As MSForms.MultiPage        'Variable qui correspond aux MultiPage(s) du formulaire
    Private WithEvents m_objOpt As MSForms.OptionButton     'Variable qui correspond aux OptionButton(s) du formulaire
    Private WithEvents m_objCmd As MSForms.CommandButton    'Variable qui correspond aux CommandButton(s) du formulaire
    Private WithEvents m_objTxt As MSForms.TextBox          'Variable qui correspond aux TextBox(s) du formulaire
    Private WithEvents m_objSpn As MSForms.SpinButton       'Variable qui correspond aux SpinButton(s) du formulaire
     
    'A la fin de la classe, libère les objets de la mémoire
    Private Sub class_Terminate()
        Set m_objParent = Nothing
        Set m_objLbl = Nothing
        Set m_objChk = Nothing
        Set m_objCbo = Nothing
        Set m_objImg = Nothing
        Set m_objLst = Nothing
        Set m_objMtp = Nothing
        Set m_objOpt = Nothing
        Set m_objCmd = Nothing
        Set m_objTxt = Nothing
        Set m_objSpn = Nothing
    End Sub
     
     
    'Permet d'ajouter un Control en fonction du type et de le set dans la variable de module
    Public Property Set AjoutControl(ByVal objControl As Control)
        Select Case TypeName(objControl)
            Case "Label"
                Set m_objLbl = objControl
            Case "CheckBox"
                Set m_objChk = objControl
            Case "ComboBox"
                Set m_objCbo = objControl
            Case "Image"
                Set m_objImg = objControl
            Case "ListBox"
                Set m_objLst = objControl
            Case "MultiPage"
                Set m_objMtp = objControl
            Case "OptionButton"
                Set m_objOpt = objControl
            Case "CommandButton"
                Set m_objCmd = objControl
            Case "TextBox"
                Set m_objTxt = objControl
            Case "SpinButton"
                Set m_objSpn = objControl
        End Select
        Set objControl = Nothing
    End Property
     
    'Set un objet parent de type clsEvents
    Property Set Parent(ByRef objEvents As clsEvents)
        Set m_objParent = objEvents
    End Property
     
    'Get l'objet parent de type clsEvents
    Property Get Parent() As clsEvents
        Parent = m_objParent
    End Property
     
    ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    'Appel des procédures pour des Label(s)
    ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    Private Sub m_objLbl_Click()
        EvenementAExecuter "Click", m_objLbl
    End Sub
     
     
     
    ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    'Appel des procédures pour des CheckBox(s)
    ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    Private Sub m_objChk_BeforeDragOver(ByVal Cancel As MSForms.ReturnBoolean, ByVal Data As MSForms.DataObject, ByVal X As Single, ByVal Y As Single, ByVal DragState As MSForms.fmDragState, ByVal Effect As MSForms.ReturnEffect, ByVal Shift As Integer)
        EvenementAExecuter "BeforeDragOver", m_objChk, Cancel, Data, X, Y, DragState, Effect, Shift
    End Sub
     
    Private Sub m_objChk_BeforeDropOrPaste(ByVal Cancel As MSForms.ReturnBoolean, ByVal Action As MSForms.fmAction, ByVal Data As MSForms.DataObject, ByVal X As Single, ByVal Y As Single, ByVal Effect As MSForms.ReturnEffect, ByVal Shift As Integer)
        EvenementAExecuter "BeforeDropOrPaste", m_objChk, Cancel, Action, Data, X, Y, Effect, Shift
    End Sub
     
    Private Sub m_objChk_Change()
        EvenementAExecuter "Change", m_objChk
    End Sub
     
    Private Sub m_objChk_Click()
        EvenementAExecuter "Click", m_objChk
    End Sub
     
    Private Sub m_objChk_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
        EvenementAExecuter "DblClick", m_objChk, Cancel
    End Sub
     
    Private Sub m_objChk_Error(ByVal Number As Integer, ByVal Description As MSForms.ReturnString, ByVal SCode As Long, ByVal Source As String, ByVal HelpFile As String, ByVal HelpContext As Long, ByVal CancelDisplay As MSForms.ReturnBoolean)
        EvenementAExecuter "Error", m_objChk, Number, Description, SCode, Source, HelpFile, HelpContext, CancelDisplay
    End Sub
     
    Private Sub m_objChk_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
        EvenementAExecuter "KeyDown", m_objChk, KeyCode, Shift
    End Sub
     
    Private Sub m_objChk_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
        EvenementAExecuter "KeyPress", m_objChk, KeyAscii
    End Sub
     
    Private Sub m_objChk_KeyUp(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
        EvenementAExecuter "KeyUp", m_objChk, KeyCode, Shift
    End Sub
     
    Private Sub m_objChk_MouseDown(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
        EvenementAExecuter "MouseDown", m_objChk, Button, Shift, X, Y
    End Sub
     
    Private Sub m_objChk_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
        EvenementAExecuter "MouseMove", m_objChk, Button, Shift, X, Y
    End Sub
     
    Private Sub m_objChk_MouseUp(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
        EvenementAExecuter "MouseUp", m_objChk, Button, Shift, X, Y
    End Sub
     
     
     
    ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    'Appel des procédures pour des ComboBox(s)
    ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    Private Sub m_objCbo_BeforeDropOrPaste(ByVal Cancel As MSForms.ReturnBoolean, ByVal Action As MSForms.fmAction, ByVal Data As MSForms.DataObject, ByVal X As Single, ByVal Y As Single, ByVal Effect As MSForms.ReturnEffect, ByVal Shift As Integer)
        EvenementAExecuter "BeforeDropOrPaste", m_objCbo, Cancel, Action, Data, X, Y, Effect, Shift
    End Sub
     
    Private Sub m_objCbo_Change()
        EvenementAExecuter "Change", m_objCbo
    End Sub
     
    Private Sub m_objCbo_Click()
        EvenementAExecuter "Click", m_objCbo
    End Sub
     
    Private Sub m_objCbo_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
        EvenementAExecuter "DblClick", m_objCbo, Cancel
    End Sub
     
    Private Sub m_objCbo_DropButtonClick()
        EvenementAExecuter "DropButtonClick", m_objCbo
    End Sub
     
    Private Sub m_objCbo_Error(ByVal Number As Integer, ByVal Description As MSForms.ReturnString, ByVal SCode As Long, ByVal Source As String, ByVal HelpFile As String, ByVal HelpContext As Long, ByVal CancelDisplay As MSForms.ReturnBoolean)
        EvenementAExecuter "Error", m_objCbo, Number, Description, SCode, Source, HelpFile, HelpContext, CancelDisplay
    End Sub
     
    Private Sub m_objCbo_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
        EvenementAExecuter "KeyDown", m_objCbo, KeyCode, Shift
    End Sub
     
    Private Sub m_objCbo_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
        EvenementAExecuter "KeyPress", m_objCbo, KeyAscii
    End Sub
     
    Private Sub m_objCbo_KeyUp(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
        EvenementAExecuter "KeyUp", m_objCbo, KeyCode, Shift
    End Sub
     
    Private Sub m_objCbo_MouseDown(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
        EvenementAExecuter "MouseDown", m_objCbo, Button, Shift, X, Y
    End Sub
     
    Private Sub m_objCbo_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
        EvenementAExecuter "MouseMove", m_objCbo, Button, Shift, X, Y
    End Sub
     
    Private Sub m_objCbo_MouseUp(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
        EvenementAExecuter "MouseUp", m_objCbo, Button, Shift, X, Y
    End Sub
     
     
     
     
    ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    'Appel des procédures pour des Image(s)
    ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    Private Sub m_objImg_BeforeDragOver(ByVal Cancel As MSForms.ReturnBoolean, ByVal Data As MSForms.DataObject, ByVal X As Single, ByVal Y As Single, ByVal DragState As MSForms.fmDragState, ByVal Effect As MSForms.ReturnEffect, ByVal Shift As Integer)
        EvenementAExecuter "BeforeDragOver", m_objImg, Cancel, Data, X, Y, DragState, Effect, Shift
    End Sub
     
    Private Sub m_objImg_BeforeDropOrPaste(ByVal Cancel As MSForms.ReturnBoolean, ByVal Action As MSForms.fmAction, ByVal Data As MSForms.DataObject, ByVal X As Single, ByVal Y As Single, ByVal Effect As MSForms.ReturnEffect, ByVal Shift As Integer)
        EvenementAExecuter "BeforeDropOrPaste", m_objImg, Cancel, Action, Data, X, Y, Effect, Shift
    End Sub
     
    Private Sub m_objImg_Click()
        EvenementAExecuter "Click", m_objImg
    End Sub
     
    Private Sub m_objImg_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
        EvenementAExecuter "DblClick", m_objImg, Cancel
    End Sub
     
    Private Sub m_objImg_Error(ByVal Number As Integer, ByVal Description As MSForms.ReturnString, ByVal SCode As Long, ByVal Source As String, ByVal HelpFile As String, ByVal HelpContext As Long, ByVal CancelDisplay As MSForms.ReturnBoolean)
        EvenementAExecuter "Error", m_objImg, Number, Description, SCode, Source, HelpFile, HelpContext, CancelDisplay
    End Sub
     
    Private Sub m_objImg_MouseDown(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
        EvenementAExecuter "MouseDown", m_objImg, Button, Shift, X, Y
    End Sub
     
    Private Sub m_objImg_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
        EvenementAExecuter "MouseMove", m_objImg, Button, Shift, X, Y
    End Sub
     
    Private Sub m_objImg_MouseUp(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
        EvenementAExecuter "MouseUp", m_objImg, Button, Shift, X, Y
    End Sub
     
     
     
    ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    'Appel des procédures pour des ListBox(s)
    ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    Private Sub m_objLst_BeforeDragOver(ByVal Cancel As MSForms.ReturnBoolean, ByVal Data As MSForms.DataObject, ByVal X As Single, ByVal Y As Single, ByVal DragState As MSForms.fmDragState, ByVal Effect As MSForms.ReturnEffect, ByVal Shift As Integer)
        EvenementAExecuter "BeforeDragOver", m_objLst, Cancel, Data, X, Y, DragState, Effect, Shift
    End Sub
     
    Private Sub m_objLst_BeforeDropOrPaste(ByVal Cancel As MSForms.ReturnBoolean, ByVal Action As MSForms.fmAction, ByVal Data As MSForms.DataObject, ByVal X As Single, ByVal Y As Single, ByVal Effect As MSForms.ReturnEffect, ByVal Shift As Integer)
        EvenementAExecuter "BeforeDropOrPaste", m_objLst, Cancel, Action, Data, X, Y, Effect, Shift
    End Sub
     
    Private Sub m_objLst_Change()
        EvenementAExecuter "Change", m_objLst
    End Sub
     
    Private Sub m_objLst_Click()
        EvenementAExecuter "Click", m_objLst
    End Sub
     
    Private Sub m_objLst_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
        EvenementAExecuter "DblClick", m_objLst, Cancel
    End Sub
     
    Private Sub m_objLst_Error(ByVal Number As Integer, ByVal Description As MSForms.ReturnString, ByVal SCode As Long, ByVal Source As String, ByVal HelpFile As String, ByVal HelpContext As Long, ByVal CancelDisplay As MSForms.ReturnBoolean)
        EvenementAExecuter "Error", m_objLst, Number, Description, SCode, Source, HelpFile, HelpContext, CancelDisplay
    End Sub
     
    Private Sub m_objLst_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
        EvenementAExecuter "KeyDown", m_objLst, KeyCode, Shift
    End Sub
     
    Private Sub m_objLst_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
        EvenementAExecuter "KeyPress", m_objLst, KeyAscii
    End Sub
     
    Private Sub m_objLst_KeyUp(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
        EvenementAExecuter "KeyUp", m_objLst, KeyCode, Shift
    End Sub
     
    Private Sub m_objLst_MouseDown(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
        EvenementAExecuter "MouseDown", m_objLst, Button, Shift, X, Y
    End Sub
     
    Private Sub m_objLst_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
        EvenementAExecuter "MouseMove", m_objLst, Button, Shift, X, Y
    End Sub
     
    Private Sub m_objLst_MouseUp(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
        EvenementAExecuter "MouseUp", m_objLst, Button, Shift, X, Y
    End Sub
     
     
     
    ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    'Appel des procédures pour des MultiPage(s)
    ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    Private Sub m_objMtp_AddControl(ByVal Index As Long, ByVal Control As MSForms.Control)
        EvenementAExecuter "AddControl", m_objMtp, Index, Control
    End Sub
     
    Private Sub m_objMtp_BeforeDragOver(ByVal Index As Long, ByVal Cancel As MSForms.ReturnBoolean, ByVal Control As MSForms.Control, ByVal Data As MSForms.DataObject, ByVal X As Single, ByVal Y As Single, ByVal state As MSForms.fmDragState, ByVal Effect As MSForms.ReturnEffect, ByVal Shift As Integer)
        EvenementAExecuter "BeforeDragOver", m_objMtp, Index, Cancel, Control, Data, X, Y, state, Effect, Shift
    End Sub
     
    Private Sub m_objMtp_BeforeDropOrPaste(ByVal Index As Long, ByVal Cancel As MSForms.ReturnBoolean, ByVal Control As MSForms.Control, ByVal Action As MSForms.fmAction, ByVal Data As MSForms.DataObject, ByVal X As Single, ByVal Y As Single, ByVal Effect As MSForms.ReturnEffect, ByVal Shift As Integer)
        EvenementAExecuter "BeforeDropOrPaste", m_objMtp, Index, Cancel, Control, Action, Data, X, Y, Effect, Shift
    End Sub
     
    Private Sub m_objMtp_Change()
        EvenementAExecuter "Change", m_objMtp
    End Sub
     
    Private Sub m_objMtp_Click(ByVal Index As Long)
        EvenementAExecuter "Click", m_objMtp, Index
    End Sub
     
    Private Sub m_objMtp_DblClick(ByVal Index As Long, ByVal Cancel As MSForms.ReturnBoolean)
        EvenementAExecuter "DblClick", m_objMtp, Index, Cancel
    End Sub
     
    Private Sub m_objMtp_Error(ByVal Index As Long, ByVal Number As Integer, ByVal Description As MSForms.ReturnString, ByVal SCode As Long, ByVal Source As String, ByVal HelpFile As String, ByVal HelpContext As Long, ByVal CancelDisplay As MSForms.ReturnBoolean)
        EvenementAExecuter "Error", m_objMtp, Index, Number, Description, SCode, Source, HelpFile, HelpContext, CancelDisplay
    End Sub
     
    Private Sub m_objMtp_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
        EvenementAExecuter "KeyDown", m_objMtp, KeyCode, Shift
    End Sub
     
    Private Sub m_objMtp_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
        EvenementAExecuter "KeyPress", m_objMtp, KeyAscii
    End Sub
     
    Private Sub m_objMtp_KeyUp(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
        EvenementAExecuter "KeyUp", m_objMtp, KeyCode, Shift
    End Sub
     
    Private Sub m_objMtp_Layout(ByVal Index As Long)
        EvenementAExecuter "Layout", m_objMtp, Index
    End Sub
     
    Private Sub m_objMtp_MouseDown(ByVal Index As Long, ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
        EvenementAExecuter "MouseDown", m_objMtp, Index, Button, Shift, X, Y
    End Sub
     
    Private Sub m_objMtp_MouseMove(ByVal Index As Long, ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
        EvenementAExecuter "MouseMove", m_objMtp, Index, Button, Shift, X, Y
    End Sub
     
    Private Sub m_objMtp_MouseUp(ByVal Index As Long, ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
        EvenementAExecuter "MouseUp", m_objMtp, Index, Button, Shift, X, Y
    End Sub
     
    Private Sub m_objMtp_RemoveControl(ByVal Index As Long, ByVal Control As MSForms.Control)
        EvenementAExecuter "RemoveControl", m_objMtp, Index, Control
    End Sub
     
    Private Sub m_objMtp_Scroll(ByVal Index As Long, ByVal ActionX As MSForms.fmScrollAction, ByVal ActionY As MSForms.fmScrollAction, ByVal RequestDx As Single, ByVal RequestDy As Single, ByVal ActualDx As MSForms.ReturnSingle, ByVal ActualDy As MSForms.ReturnSingle)
        EvenementAExecuter "Scroll", m_objMtp, Index, ActionX, ActionY, RequestDx, RequestDy, ActualDx, ActualDy
    End Sub
     
    Private Sub m_objMtp_Zoom(ByVal Index As Long, Percent As Integer)
        EvenementAExecuter "Zoom", m_objMtp, Index, Percent
    End Sub
     
     
     
    ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    'Appel des procédures pour des OptionButton(s)
    ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    Private Sub m_objOpt_BeforeDragOver(ByVal Cancel As MSForms.ReturnBoolean, ByVal Data As MSForms.DataObject, ByVal X As Single, ByVal Y As Single, ByVal DragState As MSForms.fmDragState, ByVal Effect As MSForms.ReturnEffect, ByVal Shift As Integer)
        EvenementAExecuter "BeforeDragOver", m_objOpt, Cancel, Data, X, Y, DragState, Effect, Shift
    End Sub
     
    Private Sub m_objOpt_BeforeDropOrPaste(ByVal Cancel As MSForms.ReturnBoolean, ByVal Action As MSForms.fmAction, ByVal Data As MSForms.DataObject, ByVal X As Single, ByVal Y As Single, ByVal Effect As MSForms.ReturnEffect, ByVal Shift As Integer)
        EvenementAExecuter "BeforeDropOrPaste", m_objOpt, Cancel, Action, Data, X, Y, Effect, Shift
    End Sub
     
    Private Sub m_objOpt_Change()
        EvenementAExecuter "Change", m_objOpt
    End Sub
     
    Private Sub m_objOpt_Click()
        EvenementAExecuter "Click", m_objOpt
    End Sub
     
    Private Sub m_objOpt_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
        EvenementAExecuter "DblClick", m_objOpt, Cancel
    End Sub
     
    Private Sub m_objOpt_Error(ByVal Number As Integer, ByVal Description As MSForms.ReturnString, ByVal SCode As Long, ByVal Source As String, ByVal HelpFile As String, ByVal HelpContext As Long, ByVal CancelDisplay As MSForms.ReturnBoolean)
        EvenementAExecuter "Error", m_objOpt, Number, Description, SCode, Source, HelpFile, HelpContext, CancelDisplay
    End Sub
     
    Private Sub m_objOpt_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
        EvenementAExecuter "KeyDown", m_objOpt, KeyCode, Shift
    End Sub
     
    Private Sub m_objOpt_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
        EvenementAExecuter "KeyPress", m_objOpt, KeyAscii
    End Sub
     
    Private Sub m_objOpt_KeyUp(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
        EvenementAExecuter "KeyUp", m_objOpt, KeyCode, Shift
    End Sub
     
    Private Sub m_objOpt_MouseDown(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
        EvenementAExecuter "MouseDown", m_objOpt, Button, Shift, X, Y
    End Sub
     
    Private Sub m_objOpt_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
        EvenementAExecuter "MouseMove", m_objOpt, Button, Shift, X, Y
    End Sub
     
    Private Sub m_objOpt_MouseUp(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
        EvenementAExecuter "MouseUp", m_objOpt, Button, Shift, X, Y
    End Sub
     
     
     
    ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    'Appel des procédures pour des CommandButton(s)
    ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    Private Sub m_objCmd_BeforeDragOver(ByVal Cancel As MSForms.ReturnBoolean, ByVal Data As MSForms.DataObject, ByVal X As Single, ByVal Y As Single, ByVal DragState As MSForms.fmDragState, ByVal Effect As MSForms.ReturnEffect, ByVal Shift As Integer)
        EvenementAExecuter "BeforeDragOver", m_objCmd, Cancel, Data, X, Y, DragState, Effect, Shift
    End Sub
     
    Private Sub m_objCmd_BeforeDropOrPaste(ByVal Cancel As MSForms.ReturnBoolean, ByVal Action As MSForms.fmAction, ByVal Data As MSForms.DataObject, ByVal X As Single, ByVal Y As Single, ByVal Effect As MSForms.ReturnEffect, ByVal Shift As Integer)
        EvenementAExecuter "BeforeDropOrPaste", m_objCmd, Cancel, Action, Data, X, Y, Effect, Shift
    End Sub
     
    Private Sub m_objCmd_Click()
        EvenementAExecuter "Click", m_objCmd
    End Sub
     
    Private Sub m_objCmd_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
        EvenementAExecuter "DblClick", m_objCmd, Cancel
    End Sub
     
    Private Sub m_objCmd_Error(ByVal Number As Integer, ByVal Description As MSForms.ReturnString, ByVal SCode As Long, ByVal Source As String, ByVal HelpFile As String, ByVal HelpContext As Long, ByVal CancelDisplay As MSForms.ReturnBoolean)
        EvenementAExecuter "Error", m_objCmd, Number, Description, SCode, Source, HelpFile, HelpContext, CancelDisplay
    End Sub
     
    Private Sub m_objCmd_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
        EvenementAExecuter "KeyDown", m_objCmd, KeyCode, Shift
    End Sub
     
    Private Sub m_objCmd_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
        EvenementAExecuter "KeyPress", m_objCmd, KeyAscii
    End Sub
     
    Private Sub m_objCmd_KeyUp(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
        EvenementAExecuter "KeyUp", m_objCmd, KeyCode
    End Sub
     
    Private Sub m_objCmd_MouseDown(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
        EvenementAExecuter "MouseDown", m_objCmd, Button, Shift, X, Y
    End Sub
     
    Private Sub m_objCmd_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
        EvenementAExecuter "MouseMove", m_objCmd, Button, Shift, X, Y
    End Sub
     
    Private Sub m_objCmd_MouseUp(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
        EvenementAExecuter "MouseUp", m_objCmd, Button, Shift, X, Y
    End Sub
     
     
     
    ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    'Appel des procédures pour des TextBox(s)
    ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    Private Sub m_objTxt_BeforeDragOver(ByVal Cancel As MSForms.ReturnBoolean, ByVal Data As MSForms.DataObject, ByVal X As Single, ByVal Y As Single, ByVal DragState As MSForms.fmDragState, ByVal Effect As MSForms.ReturnEffect, ByVal Shift As Integer)
        EvenementAExecuter "BeforeDragOver", m_objTxt, Cancel, Data, X, Y, DragState, Effect, Shift
    End Sub
     
    Private Sub m_objTxt_BeforeDropOrPaste(ByVal Cancel As MSForms.ReturnBoolean, ByVal Action As MSForms.fmAction, ByVal Data As MSForms.DataObject, ByVal X As Single, ByVal Y As Single, ByVal Effect As MSForms.ReturnEffect, ByVal Shift As Integer)
        EvenementAExecuter "BeforeDropOrPaste", m_objTxt, Cancel, Action, Data, X, Y, Effect, Shift
    End Sub
     
    Private Sub m_objTxt_Change()
        EvenementAExecuter "Change", m_objTxt
    End Sub
     
    Private Sub m_objTxt_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
        EvenementAExecuter "DblClick", m_objTxt, Cancel
    End Sub
     
    Private Sub m_objTxt_DropButtonClick()
        EvenementAExecuter "DropButtonClick", m_objTxt
    End Sub
     
    Private Sub m_objTxt_Error(ByVal Number As Integer, ByVal Description As MSForms.ReturnString, ByVal SCode As Long, ByVal Source As String, ByVal HelpFile As String, ByVal HelpContext As Long, ByVal CancelDisplay As MSForms.ReturnBoolean)
        EvenementAExecuter "Error", m_objTxt, Number, Description, SCode, Source, HelpFile, HelpContext, CancelDisplay
    End Sub
     
    Private Sub m_objTxt_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
        EvenementAExecuter "KeyDown", m_objTxt, KeyCode, Shift
    End Sub
     
    Private Sub m_objTxt_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
        EvenementAExecuter "KeyPress", m_objTxt, KeyAscii
    End Sub
     
    Private Sub m_objTxt_KeyUp(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
        EvenementAExecuter "KeyUp", m_objTxt, KeyCode, Shift
    End Sub
     
    Private Sub m_objTxt_MouseDown(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
        EvenementAExecuter "MouseDown", m_objTxt, Button, Shift, X, Y
    End Sub
     
    Private Sub m_objTxt_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
        EvenementAExecuter "MouseMove", m_objTxt, Button, Shift, X, Y
    End Sub
     
    Private Sub m_objTxt_MouseUp(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
        EvenementAExecuter "MouseUp", m_objTxt, Button, Shift, X, Y
    End Sub
     
     
     
    ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    'Appel des procédures pour des SpinButton(s)
    ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    Private Sub m_objSpn_BeforeDragOver(ByVal Cancel As MSForms.ReturnBoolean, ByVal Data As MSForms.DataObject, ByVal X As Single, ByVal Y As Single, ByVal DragState As MSForms.fmDragState, ByVal Effect As MSForms.ReturnEffect, ByVal Shift As Integer)
        EvenementAExecuter "BeforeDragOver", m_objSpn, Cancel, Data, X, Y, DragState, Effect, Shift
    End Sub
     
    Private Sub m_objSpn_BeforeDropOrPaste(ByVal Cancel As MSForms.ReturnBoolean, ByVal Action As MSForms.fmAction, ByVal Data As MSForms.DataObject, ByVal X As Single, ByVal Y As Single, ByVal Effect As MSForms.ReturnEffect, ByVal Shift As Integer)
        EvenementAExecuter "BeforeDropOrPaste", m_objSpn, Cancel, Action, Data, X, Y, Effect, Shift
    End Sub
     
    Private Sub m_objSpn_Change()
        EvenementAExecuter "Change", m_objSpn
    End Sub
     
    Private Sub m_objSpn_Error(ByVal Number As Integer, ByVal Description As MSForms.ReturnString, ByVal SCode As Long, ByVal Source As String, ByVal HelpFile As String, ByVal HelpContext As Long, ByVal CancelDisplay As MSForms.ReturnBoolean)
        EvenementAExecuter "Error", m_objSpn, Number, Description, SCode, Source, HelpFile, HelpContext, CancelDisplay
    End Sub
     
    Private Sub m_objSpn_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
        EvenementAExecuter "KeyDown", m_objSpn, KeyCode, Shift
    End Sub
     
    Private Sub m_objSpn_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
        EvenementAExecuter "KeyPress", m_objSpn, KeyAscii
    End Sub
     
    Private Sub m_objSpn_KeyUp(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
        EvenementAExecuter "KeyUp", m_objSpn, KeyCode, Shift
    End Sub
     
    Private Sub m_objSpn_SpinUp()
        EvenementAExecuter "SpinUp", m_objSpn
    End Sub
     
    Private Sub m_objSpn_SpinDown()
        EvenementAExecuter "SpinDown", m_objSpn
    End Sub
     
    'Permet pour un évènement de control d'exécuter la procédure située dans l'USF correspondant (si cette procédure existe)
    Private Sub EvenementAExecuter(strNomFonction As String, objAppelant As Object, ParamArray vntArgs() As Variant)
        strNomFonction = TypeName(objAppelant) & "s_" & strNomFonction
        If MacroExists(m_objParent.Usf.Name, strNomFonction) Then
            On Error GoTo Erreur
            CallByName m_objParent.Usf, strNomFonction, VbMethod, m_objSpn, vntArgs
        End If
        Exit Sub
     
    Erreur:
        Select Case Err.Number
            Case 438
                MsgBox "Je n'en mettrai pas mon clavier à couper, mais je crois que tu as laissé le mot Private devant :" & vbCrLf & "Sub " & strNomFonction & "()" & vbCrLf & vbCrLf & "Si c'est ça, merci de virer le mot ''Private'' ! :)" & vbCrLf & vbCrLf & "Sinon vas dans ''clsEvent'' et cherche la procédure ''EvenementAExecuter'' puis retire sous la ligne Erreur le Case 438 pour rechercher le problème"
            Case 450
                MsgBox "Le nombre d'arguments écrit n'est pas le bon !" & vbCrLf & vbCrLf & "Merci de suivre cette syntaxe :" & vbCrLf & "Sub " & strNomFonction & "(obj As Object, ParamArray vntArgs() As Variant)"
            Case Else
                On Error GoTo 0
                Resume
        End Select
    End Sub
    Créer un module de classe nommé clsEvents :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    Option Explicit
     
    Private m_colEvents As Collection
    Private m_objUsf As Object
     
    'A l'initialisation de la classe, instancie une nouvelle Collection
    Private Sub Class_Initialize()
        Set m_colEvents = New Collection
    End Sub
     
    'A la fin de la classe, libère la Collection de la mémoire
    Private Sub class_Terminate()
        Set m_colEvents = Nothing
        Set m_objUsf = Nothing
    End Sub
     
    'Permet de renvoyer le nombre d'éléments dans la Collection
    Property Get Count() As Long
        Count = m_colEvents.Count
    End Property
     
    'Permet d'ajouter un élément de type clsEvent à la collection
    Public Sub Add(ByRef objEvent As clsEvent)
        m_colEvents.Add objEvent                'L'objet est inséré dans la collection puis on renseigne la propriété Parent
        Set objEvent.Parent = Me
        Set objEvent = Nothing
    End Sub
     
    'Permet de retirer un élément à la collection
    Public Sub Remove(ByVal Index As Variant)
        m_colEvents.Remove (Index)
    End Sub
     
    'Permet de sélectionner un élément de la collection via un Index
    Public Function Item(ByVal Index As Variant) As clsEvent
        Set Item = m_colEvents.Item(Index)
    End Function
     
    'Permet de construire tout le gestionnaire d'évènement avec l'ensemble des controls possible pour l'Userform envoyé en paramètre
    Public Property Set Usf(ByVal objUsf As Object)
        Dim objControl As Control                       'Un control est un élément de l'userform (bouton = CommandButton, text = TextBox, etc)
        Dim objEvent  As clsEvent
     
        Set m_objUsf = objUsf
        For Each objControl In objUsf.Controls 'Scrute l'ensemble des "controls" de l'userform. Les "controls" sont les objets (exemple: boutons, textbox, etc)
            Set objEvent = New clsEvent              'Une nouvelle classe d'objet doit être définie pour chaque control afin de pouvoir contrôler les évènements.
            Set objEvent.AjoutControl = objControl
            Me.Add objEvent                        'Ajoute l'objet module de classe (contenant le control) dans la Collection
        Next objControl
     
        Set objControl = Nothing
        Set objUsf = Nothing
    End Property
     
    'Permet de récupérer l'Userform qui a été chargé.
    Public Property Get Usf() As Object
        Set Usf = m_objUsf
    End Property

    Dans un module, cette fonction doit aussi être ajoutée :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    'Vérifie l'existance d'une procédure dans un module donné
    'Resultat : Boolean renvoyant True si existe sinon False
    'Necessite la référence :
        'Microsoft Visual Basic for Applications Extensibility 5.3
    Function MacroExists(strModuleName As String, strSubName As String) As Boolean
        Dim objModule As Object
        Dim lngLine As Long
     
        On Error Resume Next
        Set objModule = ActiveWorkbook.VBProject.VBComponents(strModuleName).CodeModule
        If Err.Number <> 0 Then
            MacroExists = False
            GoTo Sortie
        End If
     
        lngLine = objModule.ProcStartLine(strSubName, vbext_pk_Proc)
        If Err.Number <> 0 Then
            MacroExists = False
            GoTo Sortie
        Else
            MacroExists = True
            GoTo Sortie
        End If
     
    Sortie:
        Set objModule = Nothing
        Exit Function
    End Function
    Ajouter un module nommé blsGestionClasses contenant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Option Explicit
     
    'Permet d'instancier clsEvents à partir d'un autre fichier
    Public Function GetclsEvents() As clsEvents
        Set GetclsEvents = New clsEvents
    End Function

    Dans un userform tout neuf, ajouter des CommandButton, des SpinButton par exemple puis ajouter le code à mettre pour instancier le module de classe clsEvents :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    Option Explicit
     
    'Déclaration d'un module de classe clsEvents
    'Le but est de pouvoir faire la même action sur les évènements de tous les CommandButton(s), tous les TextBox(s), etc
    Private m_clsEvents As clsEvents
     
    'A l'initialisation de l'USF, charge l'USF dans la clsEvents afin d'ajouter tous les controls dans cet instance
    Private Sub UserForm_Initialize()
        Set m_clsEvents = blsGestionClasses.GetclsEvents
        Set m_clsEvents.usf = Me   'Envoi de l'USF à la classe clsEvents (collection de clsEvent) pour ajouter tous les éléments de l'usf
    End Sub
     
    'A la fermeture de l'USF, décharge clsEvents de la mémoire
    Private Sub UserForm_Terminate()
        Set m_clsEvents = Nothing
    End Sub
     
    'Pour utiliser le gestionnaire d'évènements sur un type de control, respecter cette syntaxe :
        'Sub Control.TypeName(s)_Evenement(obj As Object, ParamArray vntArgs() As Variant)
        'Attention à ne pas oublier le 'S' sur Control.TypeName(s)
    'Exemple :
        'Pour l'évènement erreur d'un CommandButton (nommé CommandButton1), l'éditeur VBA écrit cette syntaxe :
        'Private Sub CommandButton1_Error(ByVal Number As Integer, ByVal Description As MSForms.ReturnString, ByVal SCode As Long, ByVal Source As String, ByVal HelpFile As String, ByVal HelpContext As Long, ByVal CancelDisplay As MSForms.ReturnBoolean)
        'L'équivalent avec le gestionnaire d'évènement sera :
            'Sub CommandButtons_Error(obj As Object, ParamArray vntArgs() As Variant)
            'Sachant que vntArgs() est un Array qui contient :
                'Number, Description, SCode, Source, HelpFile, HelpContext, CancelDisplay
    Ensuite l'idée est pour faire la même action sur click d'un des CommandButton :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Sub CommandButtons_Click(obj As Object, ParamArray vntArgs() As Variant)
    Msgbox "Je suis un CommandButton nommé " & obj.Name
    'Code à exécuter...
    End Sub

  9. #9
    Rédacteur/Modérateur


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 125
    Billets dans le blog
    131
    Par défaut
    Salut.

    Module standard

    Un module standard affiche toujours (Général) dans le combo de gauche et dans celui de droite, (Déclarations) ainsi que les procédures et fonctions présentes dans le module standard.


    Module de classe
    Pour un module de classe
    (module de classeur, de feuille, de userform, de classe perso), Le combo de gauche affiche (Général) puis les objets du module qui possèdent des évènements gérés (ou gérables, grâce à WithEvents) par le code. La liste de droite affichera une liste dépendant de la sélection dans la liste de gauche. Lorsque je parles des objets du module, c'est l'objet lui-même (classeur, feuille, userform, classe), les objets déclarés dans le module mais aussi les objets placés sur l'objet du module (les contrôles placés dans un userform ainsi que les contrôles ActiveX placés sur une feuille Excel, notamment).

    Si dans la liste de gauche, tu choisis (Général), tu auras dans la liste de droite (Déclarations) et les procédures, fonctions et propriétés du module (PAS des objets déclarés dans ce module). Si à gauche, tu choisis un objet, tu auras à droite les évènements gérables de cet objet. Tu ne pourras donc voir dans la liste de droite que les noms des macros évènementielles liées à l'objet choisi à gauche, et pas les procédures, fonctions ou propriétés de cet objet, auxquelles tu accèderas par la notation pointée habituelle.

    Si tu déclares un objet de classe perso dans un autre module de classe, tu pourras le voir apparaître dans la liste de gauche à condition qu'il expose au moins un évènement ET que tu l'aies déclaré avec WithEvents. En le sélectionnant dans la liste de gauche, tu pourras alors voir dans celle de droite les évènements de cet objet que tu peux gérer. Attention, tu ne peux pas déclarer un objet avec WithEvents dans un module standard. Si, dans un module de classe, tu déclares un objet avec WithEvents alors qu'il ne dispose pas d'évènement,tu n'auras pas d'erreur de syntaxe, mais bien une erreur de compilation (et donc à l'exécution).

    J'en parle au chapitre IV-E de mon tuto sur les classes personnalisées en VBA.
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  10. #10
    Membre confirmé
    Homme Profil pro
    Automaticien
    Inscrit en
    Décembre 2015
    Messages
    84
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Automaticien

    Informations forums :
    Inscription : Décembre 2015
    Messages : 84
    Par défaut
    Bonjour,

    [Edit1] Ne perdez pas de temps à lire ce qui est barré, j'avais mal compris votre réponse ! C'est exactement ce que je cherche à faire ! Un grand merci à vous

    Oui cette histoire d'événements dans les modules de classes sont assimilés, d'ailleurs c'est comme ça que j'ai rempli quasiment toutes les lignes de clsEvent.

    Cependant mon but était d'avoir un "groupe de module de classe" standard pour tous les userforms et pour qu'il soit standard, je me suis dis que l'idéal serait qu'il fasse appel à une procédure stockée dans l'userform lui même... De cette manière mon code est standard côté module de classe (du coup je le garde dans un fichier add-in) et pourtant le traitement à faire peux être complètement différent entre deux userforms.

    Donc en quelque sorte je voulais pouvoir alimenter moi même les deux listes qui sont habituellement alimentées par le logiciel en fonction de ce qui compose l'userform.
    Je trouvais ça plus user-friendly que ce soit intégré à l'interface, mais bon c'est peut-être un peu du luxe parce qu'au pire je peux faire un custom menu avec les CommandBar.



    Par contre en parlant de custom menu, j'en ai profité pour essayer de jouer avec et j'ai vu à un endroit que c'était abordé sur le site. Mais quand j'affecte à un bouton.OnAction une procédure, celui-ci n’exécute pas la procédure.
    Dois je gérer ça dans un module de classe et créer des événements pour les CommandBar ou l'interface est sensée le gérer seule?

    Merci d'avoir pris le temps de lire mon pavé



    [Edit 2] : Votre tutoriel est superbe !
    J'ai cru comprendre que les parties 2 et 3 ne sont pas encore disponibles... Du coup, comment gérer efficacement mes évènements de la clsEvent au travers la clsEvents qui est en fait une collection (avec une relation parent-enfant)?

    Je suis sur de pouvoir faire en sorte que ça fonctionne en déclarant mes évènements de clsEvent dans clsEvents puis de créer des évènements dans clsEvents pour être utilisés dans mon userform... Mais j'ai le sentiment qu'il existe une solution plus puissante ! Avez vous un lien vers quelque chose qui en parle?

    Encore merci !

  11. #11
    Rédacteur/Modérateur


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 125
    Billets dans le blog
    131
    Par défaut
    Il faudrait que tu sois plus explicite sur ton histoire de custom.menu...

    (Mais dans une autre discussion stp pour ne pas mélanger les sujets de discussion... )
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  12. #12
    Membre confirmé
    Homme Profil pro
    Automaticien
    Inscrit en
    Décembre 2015
    Messages
    84
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Automaticien

    Informations forums :
    Inscription : Décembre 2015
    Messages : 84
    Par défaut
    Oui vous avez raison, je vais d'abord me documenter et chercher un peu par moi même d'abord, et j'ouvrirais une discussion si c'est nécessaire !

    Citation Envoyé par Nono02P Voir le message
    [Edit 2] : Votre tutoriel est superbe !
    J'ai cru comprendre que les parties 2 et 3 ne sont pas encore disponibles... Du coup, comment gérer efficacement mes évènements de la clsEvent au travers la clsEvents qui est en fait une collection (avec une relation parent-enfant)?

    Je suis sur de pouvoir faire en sorte que ça fonctionne en déclarant mes évènements de clsEvent dans clsEvents puis de créer des évènements dans clsEvents pour être utilisés dans mon userform... Mais j'ai le sentiment qu'il existe une solution plus puissante ! Avez vous un lien vers quelque chose qui en parle?

    Encore merci !
    Cependant concernant le même sujet, avez vous des infos sur comment procéder pour gérer les évènement d'un module clsEvent à partir du module clsEvents (qui est une collection de clsEvent)?

    Je ne sais pas si ma question est bien claire...


    [Edit]: Hummm pas si simple, je suis obligé de créer une Sub dans clsEvents (qui est ma collection d'instances de clsEvent) qui va faire un RaiseEvent. Puis dans clsEvent, j'appelle la sub du clsEvents...
    Mais je ne trouve pas ça super propre :/
    Je vais continuer de chercher une autre solution.

    [Edit2]: Pour ceux qui repassent par ici, j'ai trouvé la réponse à ma question ici :
    https://tissotemmanuel.developpez.co...lasse/#LIV-D-6


    Merci à tous d'avoir pris de votre temps pour m'aider !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [2.x] Modifier les nom des champs dans un formulaire
    Par marwazmandar dans le forum Symfony
    Réponses: 30
    Dernier message: 27/06/2012, 18h23
  2. Modifier les options de TLIB dans un projet C++ Builder XE2
    Par TsCyrille dans le forum C++Builder
    Réponses: 3
    Dernier message: 02/02/2012, 09h30
  3. Modifier les NULL par Zéro dans les selections
    Par tarek_ep dans le forum SQL
    Réponses: 1
    Dernier message: 02/06/2011, 10h19
  4. Modifier les mots de passe dans Windows
    Par Blizz4rd dans le forum API, COM et SDKs
    Réponses: 1
    Dernier message: 09/02/2010, 13h40
  5. [.NET]Modifier les variables d'environnement dans...
    Par GusS dans le forum Général Dotnet
    Réponses: 4
    Dernier message: 09/02/2005, 16h25

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo