FAQ Excel
FAQ ExcelConsultez toutes les FAQ
Nombre d'auteurs : 46, nombre de questions : 845, dernière mise à jour : 30 mars 2022
Le 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 If
Dans 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 If
Dans 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
Sub
Seul 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".