Microsoft 365 Créer module de classe

pompaero

XLDnaute Impliqué
Bonjour le forum

Dans mon projet ci joint, j'ai besoin de case à cocher en lien avec des textbox, chose que j'ai mis en place avec pour chaque checkbox (24 en tout) ce code
VB:
Private Sub CheckBox1_Click()

 CheckBox1.ForeColor = IIf(CheckBox1.ForeColor = 255, 0, 255)

 If CheckBox1.Value = False Then
  TextBox1.Visible = False
 Else
  TextBox1.Visible = True
 End If
End Sub
Cela permet si checkbox est vrai de mettre son texte en rouge et rendre visible le textbox, sinon son texte en noir et textbox non visible.
J'aimerai améliorer ces codes en passant par un module de classe que je ne maîtrise pas, j'ai tout de même tenté de créer un code dans le module de classe1.
Pourriez-vous m'aider la dessus ?
Merci

Cdlt
pompaero
 

Pièces jointes

  • Inspection aire de mouvement v0.xlsm
    594.7 KB · Affichages: 10

Robert

XLDnaute Barbatruc
Repose en paix
Bonjour Pompaero, bonjour le forum,

En pièce jointe ton fichier modifié. Le code qui alimente le tableau des Checkboxes se trouve dans le composant
ThisWorkbook.
 

Pièces jointes

  • Pompaeao_ED_v01.xlsm
    465.2 KB · Affichages: 15

patricktoulon

XLDnaute Barbatruc
Bonjour le fil
je soulève une question puisqu'elle ne l'a pas été
Cela permet si checkbox est vrai de mettre son texte en rouge et rendre visible le textbox, sinon son texte en noir et textbox non visible.

réfléchissez ;)

robert bonjour

tu peux m'expliquer l'utilité de la boucle dans l’Événement de substitution
VB:
Private Sub CB_Click()
Dim O As Worksheet 'déclare la variable O (Onglet)
Dim I As Byte 'déclare la variable I (Incrément)

Set O = Worksheets("Ficheairedemvt") 'définit l'onglet O
For I = 1 To 24 'boucle sur les 24 CheckBoxes
    O.Shapes("TextBox" & I).Visible = O.OLEObjects("CheckBox" & I).Object.Value 'Affiche / Masque la TextBox associée
    'définit la couleur du texte de la CheckBox
    O.OLEObjects("CheckBox" & I).Object.ForeColor = IIf(O.OLEObjects("CheckBox" & I).Object = True, 255, 0)
Next I 'prochaine ChekBox de la boucle
End Sub
 

patricktoulon

XLDnaute Barbatruc
re

voila comment je classe en jumelant textbox et checkbox
dans le module thisworkbook
VB:
Private cl As New ClassCB
Private Sub Workbook_Open()
cl.init
End Sub
j'ai supprimé tout les événements checkbox(x)_click de la feuille

le module classe maintenant
j'ai ajouté le réinit des checkboks et textbox dans la classe qui sera piloté par la sub réinitialise dans la feuille
en effet quand tu enregistre vers ton pdf il faut bien les remettre a zero

VB:
Option Explicit
Public WithEvents CBX As MSForms.CheckBox
Public feretextbox As MSForms.TextBox
Dim cls() As New ClassCB

Private Sub CBX_Click()
    CBX.ForeColor = Abs(CBX.Value) * vbRed
    feretextbox.Visible = CBX.Value
End Sub
Function init()
    Dim I&
    With Worksheets("Ficheairedemvt")
        For I = 1 To 24
            ReDim Preserve cls(1 To I)
            Set cls(I).CBX = .OLEObjects("CheckBox" & I).Object
            Set cls(I).feretextbox = .OLEObjects("TextBox" & I).Object
        Next
    End With

End Function
Function réinit()
    Dim I&
    With Worksheets("Ficheairedemvt")
        For I = 1 To 24    'boucle sur les 24 CheckBoxes
            .OLEObjects("CheckBox" & I).Object.Value = False
         .OLEObjects("TextBox" & I).Visible = False
      Next I    'prochaine ChekBox de la boucle
    End With
End Function

en haut de module feuille j'instancie une classe
VB:
Dim clcb As New ClassCB

et la sub
VB:
Sub Reinitialise()    'Remet fiche à l'état initiale
Dim O As Range
   Application.ScreenUpdating = False
    For Each O In Range("CaseaCocherGpr1")
        If O = Chr(254) Then O = Chr(168)
    Next
    [D5,D7] = ""
    [E16:E17,I16:I17,E34:E35,I34:I35,E51:E52,I51:I52] = "Sélection"
    [C65:K72,B74,G74,C104:C106,G104:G106] = ""
    [C104,G104] = "Fiche"
    ButonValMat.Visible = False: ButonValApr.Visible = False
    [A15].Activate
clcb.réinit
End Sub
voila
 

Pièces jointes

  • Pompaeao_ED_v Pat 01.xlsm
    371.1 KB · Affichages: 6

dysorthographie

XLDnaute Accro
Bonsoir,
Private Sub CheckBox1_Click()

CheckBox1.ForeColor = IIf(CheckBox1.ForeColor = 255, 0, 255)

If CheckBox1.Value = False Then
TextBox1.Visible = False
Else
TextBox1.Visible = True
End If
End Sub
Pour info il est inutile de tester un booléen pour appliquer la même valeur à un autres booléen !
Code:
TextBox1.Visible =CheckBox1.Value
 
Dernière édition:

pompaero

XLDnaute Impliqué
Bonsoir patricktoulon, dysorthographie, le fil

merci pour vos conseils, patricktoulon j'ai mis mon fichier à jour avec tes codes et ça fonctionne.. Reste a trouver de l'aide sur mon autre fil afin d'améliorer mes autres codes et pouvoir travailler sereinement avec cette fiche.
Cdlt
pompaero
 

Discussions similaires

Statistiques des forums

Discussions
312 175
Messages
2 085 953
Membres
103 058
dernier inscrit
florentLP