Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Evênements des Checkbox

  • Initiateur de la discussion Initiateur de la discussion Dom
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

D

Dom

Guest
Bonjour,

Je suis en train d'essayer de faire un Userform avec VBA. La petite particularité est qu'un certain nombre de Checkboxes et de Listboxes sont rajoutées dynamiquement à l'activation de la fenêtre. Mon problème c'est que je voudrais rendre actives chaque listbox si la chackbox correspondate est cochées mais voilà: La fonction Checkbox1_Click fonctionne très bien avec des checkboxes préalablement crées masi pas avec les checkboxes dynamiques. Y'a t'il un moyen de faire une seule Sub pour toutes les Checkboxes car je ne sais pas à l'avance combien il va y en avoir et quel sera leur nom?

Merci,
Dom 🙁
 
Aïe...ça me paraît bien compliqué ton truc.

Bon moi j'aurais bien un p'tit truc du genre
en langage naturel:

Pour chaque checkbox de ma forme
Si checkbox coché est vrai alors
Listbox(avec le bon nom...) activée = vrai

La quantité n'est pas un problème dans la mesure où le parcours de chaque objet dans ta vbform suffit. Le vrai problème est le lien entre chaque checkbox et listform.
Il faut en fait utiliser le nom de la checkbox et en extraire le numéro et encore, je ne suis pas ceratin que cela fonctionne car cela dépendra de leur création.

HTH
MrExcel

PS.: utilises FOR EACH objet (un p'tit coup de F1 et toute l'aide sera dispo 😉
 
Bonjour Dom, le Forum (et MrExcel que je n'avais pas vu)

Si je comprends bien tu génères des Checkboxs (et ListBoxs) et RunTime.

En fait il faudrait voir ton code pour t'aider plus amplement, car tu dois bien leur donner un nom à ces CheckBoxs (même en RunTime)...

Sinon la méthode 'généraliste' pour toutes les CheckBoxs c'est d'en faire une collection :

Code:
Private Sub THeCheckBoxChecker()
Dim CTRL As Control

For Each CTRL In Me.Controls
    If TypeOf CTRL Is MSForms.CheckBox Then
        If CTRL.Value = True Then
        'Action Désirée... en Fonction du CTRL.Name (par exemple)
        End If
    End If
Next
End Sub

Un exemple dans cette Démo :

=> Lien supprimé

Bon Aprèm
@+Thierry

Message édité par: _Thierry, à: 28/02/2005 15:23
 
Merci pour votre aide Thierry et MrExcel,

Je joins une copie de mon code qui n'est surement pas dans les règles de l'art mais bon je n'ai que l'aide d'Excel pour me débrouiller et c'est pas ce qu'il y a de plus facile.

Grosso modo, j'ai une feuille de calcul avec 3 colonnes de données (entête en ligne 1 de chaque colonne):

Pilotes en C1
Course en C3
Résultat en C5

J'utilise la colonne course pour remplir une liste déroulante en haut de mon formulaire.

Ensuite je créé autant de Checkboxes que de pilotes et autant de listes déroulantes que de pilotes. Les Checkboxes s'appellent CBNom_du_pilote (exple CBDom1,CBDom2, CDDav1...) et les listes DDNom_du_pilote (DDDom1,DDDom2,DDDav1...).

J'ai auparavant fait un essai en créant une feuille de formulaire dans Excel directement qui marchait plutôt bien (j'utilisais .OnAction pour indiquer quelle sub lancer lorsque je cochais une Checkbox) mais ne me permettait pas d'éditer les feuilles de calcul lorsqu'il était activé. J'ai donc essayé de créer mon formulaire directement avec VBA mais ça ne marche pas.

L'idée, entre autre, c'est d'avoir les listes déroulantes (remplies par les valeurs de la colonne résultats) grisées lorsque la checkbox correspondante n'est pas tickée et vice-versa.

Salut,
Dom
 
Bonjour Dom, MrExcel, le Forum

Non pas du tout, c'est sûrement plutot parceque l'on n'a rien compris à ce que tu souhaites faire que tu n'as pas de réponse.

Ce que tu appelles 'Formulaire' c'est un UserForm ?

@Suivre... et bon après midi

@+Thierry
 
Euh oui, c'est un Userform. Qu'est-ce qui n'est pas clair?

Je vais réessayer: J'essaies de faire une feuille permettant de calculer les points de pilotes automobiles selon leur position.
* Je dispose sur une feuille de calcul d'une colonne contenant une liste de noms. Les pilotes . Cette liste peut varier dans le temps.
* Une autre colonne contient des résultats de course (1, 2 ...12, Abandon ... Casse moteur)

Sur mon Userform, je souhaite créer une checkbox et une liste déroulante pour chaque nom de la première colonne. La liste déroulante est remplie avec les résultats (2ème colonne). Ces menus déroulants doivent être désactivés par défaut.

Lorsque je saisis une course, je veux choisir les pilotes en cliquant sur le Checkbox correspondante. Cela doit activer la liste déroulante de résultats correspondant à ce pilote.

Le problème c'est que je créé et nomme mes checkbox et listes déroulantes dynamiquement (une Checkbox et sa liste se nommeront par exemple CBDom et DDDom). Quand je veux créer une sub CBDom1_Click(), celle-ci n'est pas exécutée lorsque je clique sur ma checkbox.

Je cherche donc comment faire pour que ça marche et que je puisse executer une sub lorsque je clique sur une de mes checkbox.

J'espère que c'est plus clair.
Merci
Dom
 
Re Dom, le Forum

Et bien donc en restant sur mon exemple d'hier, je ferai un truc dans ce Style :

Pour TOUTES Les CheckBoxs...
Code:
Option Explicit
Private Sub CBDom1_Click()
TheCheckBoxChecker
End Sub

Private Sub CBDom2_Click()
TheCheckBoxChecker
End Sub
Etc...


Ensuite la Macro 'Centrale'
Code:
Private Sub TheCheckBoxChecker()
Dim CTRL As Control

For Each CTRL In Me.Controls
    If TypeOf CTRL Is MSForms.CheckBox Then
        If CTRL.Value = True Then
            TheListBoxRunner Right(CTRL.Name, Len(CTRL.Name) - 2)
            Exit For 'Si on veut ne traiter qu'une seule ListBox, sinon virer...
        End If
    End If
Next
End Sub


Et enfin la Sub recevant l'argument...
Code:
Private Sub TheListBoxRunner(ListBoxName As String)
    Me.Controls('DD' & ListBoxName).Enabled = True
End Sub

Evidemment il serait peut-être bon de mettre une gestion d'erreur si la ListBox correspondante n'existe pas...

Voilà, sinon c'est que je n'ai toujours rien de rien compris !!! lol

Bonne Fin de Journée
@+Thierry
 
Bon ben je ne suis vraiment pas doué pour expliquer mais on s'approche...

Mon problème c'est que je créé mes checkbox de manière dynamique et que je ne connais pas leur nom à l'avance (cela dépend de la listede pilotes). Ce qui fait que je ne peux pas créer non plus à l'avance les Sub CBDom1_Click, CBDom2_Click...

De toute façon, j'ai essayé d'en créer une dans laquelle j'ai mis une Msgbox et quand je clique sur la checkbox correspondante il ne se passe rien.

Je ne sais plus quoi faire...

Dom 🙁
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD
Assurez vous de marquer un message comme solution pour une meilleure transparence.
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…