Checkbox

apdf1

XLDnaute Impliqué
Bonjour,

J'ai un USF avec Plusieurs CheckBox et un CdeButton. Est il possible d'avoir un code qui me permet d'avoir le CdeButton visible que si j'ai sélectionné un CheckBox.

Ci-joint mon fichier qui seras plus parlant.

Je vous remercie par avance et vous souhaite une bonne journée

Cordialement

Max
 

Pièces jointes

  • Checkbox.xlsm
    36.8 KB · Affichages: 57
  • Checkbox.xlsm
    36.8 KB · Affichages: 57
  • Checkbox.xlsm
    36.8 KB · Affichages: 57

laetitia90

XLDnaute Barbatruc
Re : Checkbox

bonjour apdf1 , Caillou
je pense que tu c'est faire les class.. imagine que tu as 30 Checkboxs!!
code non simplifier pas le temps
le bouton non visible dans proprieté par defaut
 

Pièces jointes

  • Checkbox.zip
    32.3 KB · Affichages: 39
  • Checkbox.zip
    32.3 KB · Affichages: 41
  • Checkbox.zip
    32.3 KB · Affichages: 42

apdf1

XLDnaute Impliqué
Re : Checkbox

Bonjour Caillou, Laetitia,et merci

C'est vraiment la grande classe..... J'ai pas 30 CheckBoxs mais 16 et avec un code simplifier c'est vraiment génial....!

Quoi dire de plus un grand et ne change rien. Bonne journée à tous

Max
 

_Thierry

XLDnaute Barbatruc
Repose en paix
Re : Checkbox

Bonjour Caillou, Max, le Forum

Une approche "Cousine" de Caillou

Code:
Sub CheckBox_Check()
Dim CheckBox_Ticked As Boolean
Dim CTRL As Control
CheckBox_Ticked = False
    For Each CTRL In Me.Controls
 
            If Left(CTRL.Name, 8) = "CheckBox" Then 
'NB CheckBox doit être indiqué avec la casse exact (sinon Option Compare Text
 
                If CTRL.Value = True Then
                    CheckBox_Ticked = True
                End If
            End If
 
    Next CTRL
If CheckBox_Ticked = True Then
    Me.CommandButton1.Visible = True
Else
    Me.CommandButton1.Visible = False
End If
 
End Sub
Private Sub CheckBox1_Click()
    CheckBox_Check
End Sub
Private Sub CheckBox2_Click()
    CheckBox_Check
End Sub
Private Sub CheckBox3_Click()
    CheckBox_Check
End Sub
Private Sub CheckBox4_Click()
    CheckBox_Check
End Sub
Private Sub CheckBox5_Click()
    CheckBox_Check
End Sub
Private Sub CheckBox6_Click()
    CheckBox_Check
End Sub

Une autre variante avec TypeName du Contrôle (plus sure, mais TOUTES Lex CheckBox seront vues, avec la méthode au dessus on peut finter avec le nom du contrôle pour être vu ou non... (Voir aussi le TAG du Contrôle qui peut être utile aussi)

Code:
Sub CheckBox_Check()
Dim CheckBox_Ticked As Boolean
Dim CTRL As Control
CheckBox_Ticked = False
    For Each CTRL In Me.Controls
 
 
            If TypeName(CTRL) = "CheckBox" Then  
'Les NAMES des CheckBox n'ont pas d'importance, c'est le type qui est comparé.
 
                If CTRL.Value = True Then
                    CheckBox_Ticked = True
                End If
            End If
 
    Next CTRL
If CheckBox_Ticked = True Then
    Me.CommandButton1.Visible = True
Else
    Me.CommandButton1.Visible = False
End If
 
End Sub


Cordialement

@+Thierry

EDIT Bonjour Laetitia, oui un Module de Class est bienvenu dans ce cas là, peut-être sur le TypeName plutot que sur le Name du Contrôle.
 
Dernière édition:

_Thierry

XLDnaute Barbatruc
Repose en paix
Re : Checkbox

Re Hello

Avant de partir j'ai retrouvé deux fils interressants au cas où


https://www.excel-downloads.com/threads/boucle-avec-des-checkbox.16453/

https://www.excel-downloads.com/threads/commandbutton-x-le-x-en-variable.34800/

Dans le second j'ai redécodé le code (format HTML naze dans le fil)

Code:
'CREATION USERFORM à la volée ! (nécessite de cocher "Accès approuvé au modèle d'objet du projet VBA
Option Explicit
 
Const Sign As String = "Thierry 's Truc sur [URL="https://www.excel-downloads.com/"]www.Excel-Downloads.com[/URL], March 2005"
Const TxbWidth As Integer = 65
Const TxbHeigth As Integer = 15
Const TxbLeft As Integer = 90
Const TxbTop As Integer = 15
Const LblWidth As Integer = 70
Const LblHeigth As Integer = 15
Const LblLeft As Integer = 10
Const LblTop As Integer = 15
Sub MyUserFormAutoBuilder()
Dim ObjUSF As Object
Dim ObjTextBox As Object, ObjLabel As Object, CmdB As Object, LstB As Object
Dim TopPlusHeight As Integer
Dim X As Byte
Dim VLblLeft As Integer
Dim VTxbLeft As Integer
Set ObjUSF = ThisWorkbook.VBProject.VBComponents.Add(3)
With ObjUSF
.Properties("Caption") = Sign
.Properties("Width") = 660
.Properties("Height") = 195
.Properties("ShowModal") = True
End With
For X = 1 To 40
    Set ObjTextBox = ObjUSF.Designer.Controls.Add("Forms.TextBox.1")
    Set ObjLabel = ObjUSF.Designer.Controls.Add("Forms.Label.1")
 
    Select Case X
        Case 1 To 10
        If X = 1 Then TopPlusHeight = LblTop
        VLblLeft = LblLeft
        VTxbLeft = TxbLeft
        Case 11 To 20
        If X = 11 Then TopPlusHeight = LblTop
        VLblLeft = LblLeft + 160
        VTxbLeft = TxbLeft + 160
        Case 21 To 30
        If X = 21 Then TopPlusHeight = LblTop
        VLblLeft = LblLeft + 320
        VTxbLeft = TxbLeft + 320
        Case 31 To 40
        If X = 31 Then TopPlusHeight = LblTop
        VLblLeft = LblLeft + 480
        VTxbLeft = TxbLeft + 480
    End Select
 
 
    With ObjLabel
        .Caption = "Label TextBox " & X
        .Left = VLblLeft: .Top = TopPlusHeight: .Width = LblWidth: .Height = LblHeigth
        .Tag = "Thierry's Demo"
        .Name = "LblDemo" & X
    End With
    With ObjTextBox
        .Left = VTxbLeft: .Top = TopPlusHeight: .Width = TxbWidth: .Height = TxbHeigth
        .Tag = "Thierry's Demo"
        .Name = "TxbDemo" & X
'        .TextAlign = fmTextAlignRight
    End With
 
    TopPlusHeight = TopPlusHeight + 15
Next
VBA.UserForms.Add(ObjUSF.Name).Show
Set ObjUSF = Nothing
Set ObjTextBox = Nothing
Set ObjLabel = Nothing
End Sub

A essayer dans un classeur vierge


Et pour fabriquer les macros :

Code:
Sub MacroWrite() 'lol !!
Dim I As Byte
Dim MyString As String
For I = 1 To 40
MyString = MyString & "Private Sub TxbDemo" & I & "_Change()" & vbCrLf & _
"TheTextBoxChecker" & " " & I & vbCrLf & _
"End Sub" & vbCrLf & vbCrLf
Next
With New DataObject
.SetText MyString
.PutInClipboard
End With
End Sub
 
'A COLLER DANS LE MODULE DU USERFORM (CTRL + V)

Bon amusement

@+Thierry
 

Robert

XLDnaute Barbatruc
Repose en paix
Re : Checkbox

Bonjour le fil, bonjour le forum,

Désolé je n'apporte rien à cette discussion mais voyant l'appartition d'un extra-terrestre rolling stonien je ne peux m'empêcher de le saluer bien bas tout en le pourrissant pour la raritude de ses interventions.
 

_Thierry

XLDnaute Barbatruc
Repose en paix
Re : Checkbox

Hello merci à tous

Bravo Fo_Rum très bien l'idée de la ListBox. Merci Laetitia, Re-Salut Robert, Heureux pour Max

J'avais écrit un long post, mais bon, boum plantage en envoie et tout perdu... Enfin salut à tous

@+Thierry
 

Habitude

XLDnaute Accro
Re : Checkbox

Bonjour à tous


En reprenant le code de Laeticia90

Avec 2 module de classes
Un objet général qui contrôles un vecteur d'objets
Tu peux ajouter ou enlever des checkbox sans avoir a modifier le code de l'objet
 

Pièces jointes

  • Checkbox.xls
    60 KB · Affichages: 52
  • Checkbox.xls
    60 KB · Affichages: 52
  • Checkbox.xls
    60 KB · Affichages: 54

laetitia90

XLDnaute Barbatruc
Re : Checkbox

rebonjour tous
Habitude :):) a mon avis pas la peine de passer par 2 classes dans ce cas la ...une suffit??

un code adapte pour supprimer ou ajouter. CheckBox renommée ou pas
en utilisant ReDim Preserve
 

Pièces jointes

  • Checkbox.zip
    29.5 KB · Affichages: 34
  • Checkbox.zip
    29.5 KB · Affichages: 32
  • Checkbox.zip
    29.5 KB · Affichages: 33

Habitude

XLDnaute Accro
Re : Checkbox

Re

Il est déconseillé d'appeler Userform1 directement dans la classe
Il est préférable de lui passer au préalable le parent avec ME.
Si tu te déclare un nouvel objet userform1 ou si tu renome userform1, l'objet ne marche plus.
Il faut tenir compte, à mon avis, qu'un objet classe doit être exportable en OCX.
 

laetitia90

XLDnaute Barbatruc
Re : Checkbox

re,:):)
j'ai precise "dans ce cas la"
j'ai deja du mal a concevoir qu'un utilisateur a accés pour modifier le programme suppression ajout ect renommer enfin bon!!!
sur ta reflexion on peut changer le nom de l'user & plusieurs users egalement
pour le bouton tu le changes dans proprietees & initialisation
je le change egalement dans proprietees & module de classe
dans ce cas la bien oblige d'utiliser ME & set

a+ leti
 

Pièces jointes

  • Checkbox3.zip
    20.8 KB · Affichages: 32

Discussions similaires

Membres actuellement en ligne

Aucun membre en ligne actuellement.

Statistiques des forums

Discussions
312 294
Messages
2 086 896
Membres
103 404
dernier inscrit
sultan87