[VBA]erreur 459

Luki

XLDnaute Accro
Bonsoir le forum :)

Absent depuis quelques temps pour cause de grosse surcharge de boulot, j'ai subi en plus le vol de mon Pc portable :mad:
Je ne vous parle pas du temps passé à essayer de retrouver une config portable qui remplace l'ancienne.... et à réinstaller mes outils....(Par contre pas de soucis côté sauvegardes, je le fais très régulièrement ! ouf!)

Donc, suite à la réinstallation de tout le bazar, xp, office et les servicepack qui vont avec, une de mes macros (qui me permet de consulter les tarifs de mes fournisseurs sur des fichiers xl fermés) me pond un petit bug : erreur 459, l'objet ou la classe ne gère pas le jeu d'évènement.

Après une rapide analyse, je vois que c'est un msforms.checkbox dans mon userform qui pose problème à l'initialisation de mon userform. Jamais eu ce bug auparavant.

Je crée des collections de mes contrôles via des classes avec public with events

Ci_dessous le code qui rempli les collections et ensuite, le module de classe incriminé.

A noter que je n'ai pas de soucis avec les autres contrôles que je gère de la même manière...
Le module du User form
Code:
Option Explicit
Private All_Buttons() As New Cl_EventBt
Private All_Chekboxs() As New Cl_EventCb
Private All_Listboxs() As New Cl_EventLb
Private All_OptionButtons() As New Cl_EventOb

----------------------------------
Private Sub UserForm_Initialize()
Dim MyCtl As Control
Dim iBt%, iCb%, iLb%, iOb%, iLv%, i%

'> mise à zéro de la clé de la collection 'TheMaterios'
    MatKey = 0
'> Inhibition de l'événement clic au chargerment du UForm
    Vp_InhibClic = True
    
'> Initialisation des classes de controles
    iBt = 0:    iCb = 0:    iLb = 0:    iOb = 0:    iLv = 0
        
    For Each MyCtl In Me.Controls
        Select Case True
            Case TypeOf MyCtl Is MSForms.CommandButton
                                    ReDim Preserve All_Buttons(0 To iBt)
                                    Set All_Buttons(iBt).TheBt = MyCtl
                                    iBt = iBt + 1
[COLOR=Blue]'en passant ces lignes en commentaire, le reste de la macro et le Uf fonctionnent bien.[/COLOR]
[B][COLOR=Blue]             Case TypeOf MyCtl Is MSForms.CheckBox
                                    ReDim Preserve All_Chekboxs(0 To iCb)
                                    Set All_Chekboxs(iCb).TheCb = MyCtl
                                    iCb = iCb + 1

[/COLOR][/B]             Case TypeOf MyCtl Is MSForms.ComboBox
                                    ReDim Preserve All_Listboxs(0 To iLb)
                                    Set All_Listboxs(iLb).TheLb = MyCtl
                                    iLb = iLb + 1
             Case TypeOf MyCtl Is MSForms.OptionButton
                                    ReDim Preserve All_OptionButtons(0 To iOb)
                                    Set All_OptionButtons(iOb).TheOb = MyCtl
                                    iOb = iOb + 1
                                   
        End Select
    Next MyCtl

ETC....

le module de classe
Code:
'Classe d'événement de chekbox
Option Explicit
Public WithEvents TheCb As MSForms.CheckBox

Private Sub TheCb_Click()
    If Vp_InhibClic Then Exit Sub
    
    With TheCb
       F_WksVal(.Name).Value = IIf(.Value = True, True, False)
        
        Select Case .Name
                Case "CB_SubFolder"
                
                                    B_UpDateFilesList
                                    UserForm1.Lb_Files.ListIndex = 0  'Ceci génère l'event 'clic' de 'lb_Files'
                Case "CB_LR"
                                    With UserForm1.Lb_Files
                                        B_UpDateListView
                                    End With
                Case Else
                
        End Select
    End With
    
End Sub
Pour info, j'ai vérifié les références, Msforms 2.0 Object library est bien activée... et toutes celles que j'utilisais sur l'ancien poste semblent être activées....

Je sèche :eek:

Avez-vous une idée?

Merci d'avance et à bientôt
 

skoobi

XLDnaute Barbatruc
Re : [VBA]erreur 459

Bonjour Luki, ça fait plaisir de te relire :),

Bizarre ce qui t'arrive......
A tout hasard, essaie en remplaçant:

Code:
[COLOR=black]Case TypeOf MyCtl Is MSForms.CheckBox[/COLOR][B][B][/B][/B]

par

Code:
Case TypeName(MyCtl) ="CheckBox"

Il m'ai déjà arrivé de devoir déclarer un controle comme ceci:

Code:
Public WithEvents TheCb As MSForms.CheckBox

car ceci ne passait pas:

Code:
Public WithEvents TheCb As CheckBox

alors que pour un Combobox ça passait sans "MSForms"....
 

Discussions similaires

Réponses
29
Affichages
775

Statistiques des forums

Discussions
312 103
Messages
2 085 317
Membres
102 862
dernier inscrit
Emma35400