Module de classe

Bonjour,

Petite question

Est-ce vraiment utile de créer des modules de classe ?

J'ai regardé sur le net des tutos mais je ne vois pas vraiment la différence (coté pratique).

Avez vous des exemples, ou des "fichiers" qui pourrait me convaincre ?

Il n'y a pas le feu pour les réponses, je veux juste comprendre

Bonjour

Un des exemple c'est le calendrier sous USF pour gérer le clic sur la quarantaine de label servant à designer les jours de chaque mois. Le clic sur ces labels déclenche la même action alors plutôt qu'une quarantaine de sub pour chaque label, le module de classe permet de le gérer plus "simplement"...

@ bientôt

LouReeD

Hello,

ça te permet d'avoir un code + structuré et auto documenté quand c'est bien fait

Les modules de classe souvent sont réutilisables dans d'autres projets, et du coup tu gagnes du temps.

Bonsoir,

ça te permet d'avoir un code + structuré et auto documenté quand c'est bien fait

Tout à fait d'accord.

En fait pour ma part, je connais 2 types d'utilisation des modules de classe :

1- pour gérer de multiples contrôles ActiveX ( réponse de LouReed) ou ceux créés dynamiquement, c'est à dire à l’exécution (procédure Sub) et non à la compilation (VBAProject - Userform)

2- pour gérer des accès aux données avec une interface intuitive rendant le code principal invariant même si l'organisation des données change auquel cas seul le module de classe est à mettre à jour. C'est particulièrement le cas si les données se trouvent dans un classeur différent de celui qui contient le code ou si les données sont issues de requêtes externes.

Bonjour et merci pour vos messages,

Il y a t-il moyen d'avoir un petit exemple parce que je dois avouer que j'ai du mal à comprendre.

Merci

Bonjour à tous,

Voici un exemple de code permettant d'automatiser le changement de couleur des textbox au double-clic :

'Module userform
dim tTx() as new classTx
Private Sub UserForm_Initialize()
for each ctrl in me.controls
    if typename(ctrl) = "TextBox" then Set ctrl.TargetTx = Tx
Next ctrl
End Sub

'module de classe "classTx" <<< bien la nommer !!!
Public WithEvents TargetTx As MSForms.TextBox
Private Sub TargetTx_DoubleClick()
with TargetTx
    select case .backcolor
        case RGB(0, 255, 0): .backcolor = RGB(255, 255, 255)
        case else: .backcolor = RGB(0, 255, 0)
    end select
end with
End Sub

Cdlt,

Merci 3GB

Si j'ai bien compris il faut créer un userform, puis un TextBox

Et coller ton programme dans un nouveau module de classe ?

Oui, exactement, une ou plusieurs textbox.

Il faut coller le premier code dans le module d'userform et le second dans un module de classe qu'il faut nommer "classTx".

Merci mais je n'y arrive pas voici mon fichier

52moduleexemple.xlsm (43.50 Ko)

Hello à tous,

Voici une autre approche des modules de classe.

C'est une classe très sommaire.

Elle réalise des calculs et elle est composée de 4 méthodes, une méthode d'addition, de multiplication, de soustraction et une méthode d'affichage du résultat.

La classe cls_calcul :

Sub retourne_msg(nb As Integer, msg As String)
    MsgBox msg & nb
End Sub

Function retourne_somme(num1 As Integer, num2 As Integer) As Integer
    retourne_somme = num1 + num2
End Function

Function retourne_multiplication(num1 As Integer, num2 As Integer) As Integer
    retourne_multiplication = num1 * num2
End Function

Function retourne_soustraction(num1 As Integer, num2 As Integer) As Integer
    retourne_soustraction = num1 - num2
End Function

Et voici le module classique qui l'utilise :

Sub Testing()

Const msg_addition As String = "La somme est égale à : "
Const msg_multiplication As String = "La multiplication est égale à : "
Const msg_soustraction As String = "La soustraction est égale à : "

Dim Calcul As New cls_calcul 'Variable Objet ==> en gros on declare notre classe sous forme de variable
'Variables classiques
Dim nb1 As Integer, nb2 As Integer
Dim resultat As Integer

nb1 = 30 ' 1er nombre destiné au calcul
nb2 = 100 ' 2eme nombre destiné au calcul

With Calcul ' Avec ma variable objet

    ' Ici je veux connaître le resultat des 2 nombres additionnés
    resultat = .retourne_somme(nb1, nb2) ' Appel de ma méthode de calcul
    .retourne_msg resultat, msg_addition ' Appel de ma méthode de message

    ' Ici je veux connaître le resultat des 2 nombres multipliés
    resultat = .retourne_multiplication(nb1, nb2) ' Appel de ma méthode de calcul
    .retourne_msg resultat, msg_multiplication ' Appel de ma méthode de message

    ' Ici je veux connaître le resultat des 2 nombres soustraits
    resultat = .retourne_soustraction(nb1, nb2) ' Appel de ma méthode de calcul
    .retourne_msg resultat, msg_soustraction ' Appel de ma méthode de message

End With

End Sub

C'est une classe très simple et à première vue sans grand intérêt, mais c'est pour illustrer mon propos sur la structure d'un projet via une classe + sur l'auto documentation du code.

Voila.

++

Merci Rag02700 mais ça ne marche pas .. je débute vraiment dans les classes

40classes.xlsm (14.36 Ko)

Bonjour,

pour résumer, un module de classe permet d'ajouter des nouvelles propriétés et méthodes à un objet.
eric

Rag02700, je n'arrive pas à comprendre cette erreur

capture 2021 08 06 a 19 50 48

C'est normal.

Dim Calcul As New cls_calcul

Fait référence à la classe "cls_calcul" et non "Classe1" comme dans ton fichier. Il faut renommer Classe1 en cls_calcul

image

Yes merci ça marche

Je vais pouvoir étudier ça merci à toi

Bonjour,

voila un autre exemple d'utilisation d'un module de class!

image

Merci tu fais comment pour le faire fonctionner ?

tu vas dan vba raccourci Clavier [ALT] + [F11]

tu Click sur Modul1, tu vas dans Sub test et tu fait plusieurs fois [F8] et tu regarde le code ce dérouler!

c'est un exemple purement pédagogique!

Oui merci on voit bien la manière que le programme se déroule, mais j'aurai aimé voir de l'action sur la feuille,

néanmoins je vois comment un programme se déroule surtout sur les déclarations

Encore merci.

en même temp un module de class c'est un concept différent des module standard!

les modules de class c'est de la programmation Objet et les module standard du procédural! il faut mettre les mains dans le cambouis pour en apprécier la différence.la programmation objet est souvent déroutante par ce qu'elle confit au objet une parti du code qui était à l'origine traité de façon totalement différente en procédurale!

Rechercher des sujets similaires à "module classe"