FAQ Excel

FAQ ExcelConsultez toutes les FAQ
Nombre d'auteurs : 46, nombre de questions : 845, dernière mise à jour : 30 mars 2022
Sommaire→Les macros VBA→Les modules de classeLe tutoriel de Michel Blavin présente les modules de classes et la Programmation Orientée Objets (POO) avec Visual Basic pour Application (VBA). Après un bref rappel sur les objets, l'article propose une mise en application les principes et fonctionnalités des Modules de classes. Ce cours utilise des exemples Access, mais fonctionne aussi dans Excel.
Le tutoriel de Pierre Fauconnier : Grâce aux classes personnalisées, créez vos propres objets, maintenez facilement votre code, réutilisez rapidement votre code dans de nouvelles applications.
L'article d'Emmanuel Tissot vous propose également de découvrir les fonctionnalités des modules de classe, du langage VBA pour les applications Office.
Si vous souhaitez que tous les classeurs Excel puissent disposer d'une même classe, placez le module de classe dans un complément (macro complémentaire).
Pour chaque module de classe de la macro complémentaire :
Affichez la fenêtre "propriétés" du complément (Raccourci clavier F4 lorsque vous êtes dans l'éditeur de macros).
Choisissez la valeur PublicNotCreatable pour la propriété Instancing.
Vous pouvez renommer le projet: Menu Outils/Propriétés/Champ "Nom du projet"/Cliquez sur le bouton OK.
Ajoutez une fonction publique dans un module standard du complément, renvoyant une instance de la classe.
Exemple si votre classe s'appelle Classe1 :
Public Function GetClasse1() As Classe1
Set GetClasse1 = New Classe1
End Function
Ensuite, dans chaque classeur utilisant les classes de la macro complémentaire, activez la référence vers celle-ci :
Dans l'éditeur de macros,
Menu Outils
Références
Cochez la ligne correspondant au nom du projet.
Cliquez sur le bouton OK pour valider.
Vous pouvez ainsi déclarer des variables du type de vos modules de classe, en dehors de la macro complémentaire.
Par contre, pour créer les objets, vous devez impérativement passer par les fonctions publiques de la macro complémentaire.
Exemple :
Dim MaClasse As Classe1
Sub Test()
'Set MaClasse = New Classe1 'Ne fonctionne pas
Set MaClasse = GetClasse1 'Fonctionne
End Sub
Vous possédez par exemple un programme Excel qui peut utiliser deux types d'API différentes en fonction de l'ordinateur
sur lequel il se trouve, pour accéder à des données (seul l'un des deux est installée sur chaque ordinateur).
L'utilisation de l'API en elle même est donc "interfacée" dans deux classes.
Supposons que votre première classe s'appelle "ClasseWinXp" et l'autre "ClasseWin98" et que vous souhaitez compiler l'une ou
l'autre en fonction de votre version Windows installé.
Menu Outils
Propriétés de VBAProject
Dans le champ "Arguments de compilation conditionnelle", déclarez une constante comme ceci: WinXp=-1
Dans votre module de classe ClasseWinXp :
Option Explicit
#If WinXP Then
Private clsValue As Long
Private Sub Class_Initialize()
clsValue = 1
End Sub
Property Get Value() As Long
Value = clsValue
End Property
#End IfDans votre module de classe ClasseWin98 :
Option Explicit
#If WinXP = False Then
'Pour l'exemple clsValue n'est pas déclaré,
'ca ne devrait pas compiler a cause de l'option explicit
Property Get Value() As Long
Value = clsValue
End Property
Private Sub Class_Initialize()
clsValue = 1
End Sub
#End IfDans un module standard :
Option Explicit
Sub TestCompilation()
#If WinXP Then
Dim Instance As New ClasseWinXp
#Else
Dim Instance As New ClasseWin98
#End If
MsgBox Instance.Value
End SubSeul le code du module ClasseWinXp est compilé, celui du module ClasseWin98 est ignoré et le projet compile correctement. Même chose dans le module standard, seule la première déclaration est compilé, le code s'exécute donc normalement. Selon la machine sur laquelle votre projet tourne, vous modifiez la valeur de la constante (True=-1, False=0) dans la boîte de dialogue "Propriété du projet".



