VBA "Erreur d'exécution '438' " [Résolu/Fermé]

Signaler
-
 Willie -
Bonjour tout le monde,

Je suis en train de coder une fenêtre Userform et après avoir adapté mon code voilà qu'il ne marche plus... Et qu'une erreur 438: ''propriété ou méthode non gérée par cet objet'' apparaît.

Vous trouverez ci-dessous le code de mon Userform mais j'aimerais vous expliquer un peu plus en détails ce que j'aimerais faire.
Je voudrais que l'utilisateur puisse cocher tous les bouttons de type "Checkbox" qu'il veut puis un boutton dans le "frame" (qui sont tous des options button) pour finalement cliquer sur "show the data". Les différents options button vont chercher les data souchaitées dans differents onglets et il y a différents modules "tri..." car il y a certaines data qui possèdent un tri personnalisé.

Je précise qu'une fois la macro lancée toutes les data sortent et lorsqu'elle a finit elle bloque sur le premier "If..." en affichant l'erreur 438.


Private Sub DataButton_Click()
Dim ctrl As Control
Dim ctrlbutton As Control
Sheets("Retreatments").Cells.ClearContents

For Each ctrl In Me.Controls
If TypeName(ctrl) = "CheckBox" And ctrl.Value = True Then
For Each ctrlbutton In Me.Frame1.Controls
If ctrlbutton.Value = True And ctrlbutton.Caption = "Fund" Then
Call Module1.CreationData("Asset level", "%Weight", ctrl.Caption)
If ctrl.Caption <> "Maturity" And ctrl.Caption <> "Rating" Then
Call Module1.TriDécroissant(ctrl.Caption)
ElseIf ctrl.Caption = "Maturity" Then
Call Module1.Tri_Maturity
ElseIf ctrl.Caption = "Rating" Then
Module1.Tri_Rating
End If
ElseIf ctrlbutton.Value = True And ctrlbutton.Caption = "Benchmark" Then
Call Module1.CreationData("Benchmark", "%Weight", ctrl.Caption)
If ctrl.Caption <> "Maturity" And ctrl.Caption <> "Rating" Then
Call Module1.TriDécroissant(ctrl.Caption)
ElseIf ctrl.Caption = "Maturity" Then
Call Module1.Tri_Maturity
ElseIf ctrl.Caption = "Rating" Then
Module1.Tri_Rating
End If
ElseIf ctrlbutton.Value = True And ctrlbutton.Caption = "Vs Benchmark" Then
Call Module1.CreationData("Asset level", "%Weight", ctrl.Caption)
If ctrl.Caption <> "Maturity" And ctrl.Caption <> "Rating" Then
Call Module1.TriDécroissant(ctrl.Caption)
ElseIf ctrl.Caption = "Maturity" Then
Call Module1.Tri_Maturity
ElseIf ctrl.Caption = "Rating" Then
Module1.Tri_Rating
End If
Call Module1.CreationData("Benchmark", "%Weight", ctrl.Caption)
Sheets("Retreatments").Cells(3, 1000).End(xlToLeft) = "Benchmark"
Call Module1.TriDécroissant("Benchmark")
End If
Next ctrlbutton
End If
Next ctrl
Me.Hide
End Sub
>

2 réponses

Bonjour

For Each ctrl In Me.Controls balaye tous les contrôles de l'USF; Certains contrôles possédent la propriété Value et d'autres non ( comme les Labels)

If TypeName(ctrl) = "CheckBox" And ctrl.Value = True Then teste la propriété Value de l'objet ctrl, et s'il s'agit d'un Label => plantage

il faudrait faire le test en deux fois

If TypeName(ctrl) = "CheckBox"  Then
If ctrl.Value = True Then


A+
Bonjour Paf,

Oui en effet cela fontionne merci beaucoup !
J'ai également trouvé quelque chose de très bien: utiliser plusieurs "Frame" !
J'ai ainsi regroupé toutes mes checkbox dans une frame, toutes mes optionbuttons dans une autre, puis un for each chacun = plus de plantage !

Mais ton explication m'a permis de comprendre réellement mon erreur, alors merci encore ;)