Cast ou transtypage ...

yakata

XLDnaute Nouveau
Bonjour à tous,

Je suis bloqué sur un problème depuis maintenant 2 jours. J'ai déjà tenté de trouver la réponse sur ce forum, mais je n'ai rien trouvé:(

Je vous explique :
J'ai une Userform classique. Au moment de l'initialisation de cette form, je créé autant checkbox qu'il y a de valeur sur une feuille excel. Jusque là tout va bien. J'utilise la méthode add de cette manière :

Dim newCtrl As Control
Set newCtrl = frmParam.frmList.Controls.Add("Forms.CheckBox.1", newCtrlName)


Je ne peux évidemment pas créer un évènement click pour chacun des checkbox créée de cette façon, je passe donc par un module de classe classique :

Option Explicit

' Mise en place des événements d'une feuille de calcul classique
Public WithEvents oneCheckBox As MSForms.CheckBox

' Quand on sélectionne un truc
Private Sub OneCheckBox_Click()

' Par défaut
frmParam.cmdSuppr.Enabled = False

' Recherche d'une checkbox cochée
Dim oneCheckBox As Control
For Each oneCheckBox In frmParam.frmList.Controls
If TypeName(oneCheckBox) = "CheckBox" Then
If oneCheckBox.value Then
frmParam.cmdSuppr.Enabled = True
Exit For
End If
End If
Next oneCheckBox

End Sub

Et voilà mon problème, mon module de classe attend en entrée un objet de type Checkbox et moi je n'ai qu'un objet de type Control à lui donner (celui provenant de la méthode Add). Donc voilà ma question : est-il possible de transtyper un Control en Checkbox ? Grosso-modo faire la même chose qu'un Cast en Java ...
 

mromain

XLDnaute Barbatruc
Re : Cast ou transtypage ...

bonjour Yakata

Je ne sais pas si le Cast existe en VBA, mais ne peux-tu pas contourner le PB comme ça?

PS: par contre, j'ai pas de quoi tester mon code

A+



Code:
Option Explicit

' Mise en place des événements d'une feuille de calcul classique
Public WithEvents oneCheckBox As MSForms.[COLOR="Red"][B]Control[/B][/COLOR]

' Quand on sélectionne un truc
Private Sub OneCheckBox_Click()

    [COLOR="red"][B]If Not TypeName(oneCheckBox) = "CheckBox" Then Exit Sub[/B][/COLOR]

    ' Par défaut
    frmParam.cmdSuppr.Enabled = False
    
    ' Recherche d'une checkbox cochée
    Dim oneCheckBox As Control
    For Each oneCheckBox In frmParam.frmList.Controls
    If TypeName(oneCheckBox) = "CheckBox" Then
    If oneCheckBox.Value Then
    frmParam.cmdSuppr.Enabled = True
    Exit For
    End If
    End If
    Next oneCheckBox

End Sub
 

Pierrot93

XLDnaute Barbatruc
Re : Cast ou transtypage ...

Bonjour Yakata, Romain

comprends pas tout de ton code, car si tu as bien initialisé ton module de classe par toutes les "checkbox" concernées, uniquement la "checkbox" clicquée répondra à l'événement "click" de ton module, ton code pourrait se résumer à ceci, sous réserve d'avoir toutes les données du problème :

Code:
Option Explicit
Public WithEvents oneCheckBox As MSForms.CheckBox
Private Sub OneCheckBox_Click()
frmParam.cmdSuppr.Enabled = False
If oneCheckBox.Value Then frmParam.cmdSuppr.Enabled = True
End Sub

sinon un petit fichier, sans données confidentielles, mais avec USF, nous aiderait à t'aider...

bon après midi
@+vv
 

yakata

XLDnaute Nouveau
Re : Cast ou transtypage ...

Bonjour Pierrot93,
En fait le code de l'évènement click était juste là pour l'exemple. Ce n'est pas lui qui me pose problème. En fait ce que je veux faire est assez simple : Je voudrais créer des checkbox à la volée (au moment de l'exécution) et en même temps écrire quelquechose pour leurs évènements click.

Bonjour mromain,
Malheureusement ta solution ne fonctionne pas, Excel me dit que Control ne gère pas les évènements.
 

yakata

XLDnaute Nouveau
Re : Cast ou transtypage ...

Youhou j'ai trouvé !!

En fait le cast fonctionne que dans un module de classe :rolleyes:

Allez savoir pourquoi mais grosso-modo avec le code suivant :
dim ctrl as Control
Set ctrl = frmParam.frmList.Controls.Add("Forms.CheckBox.1", newCtrlName)
dim chk as CheckBox
Set chk = ctrl


Si on le met dans un module classique ça plante, mais dans un module de classe pas de problème ... :confused:

voilou, à bon entendeur ...
 

Discussions similaires

Statistiques des forums

Discussions
312 923
Messages
2 093 665
Membres
105 780
dernier inscrit
Autric