FAQ ExcelConsultez toutes les FAQ

Nombre d'auteurs : 46, nombre de questions : 845, dernière mise à jour : 30 mars 2017 

 
OuvrirSommaireLes macros VBALes modules de classe

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.

Consultez le tutoriel.


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.

Consultez le tutoriel.


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.

Consultez le tutoriel.

Mis à jour le 18 novembre 2008  par Michel Blavin, Pierre Fauconnier, Emmanuel Tissot

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:

Vba
Sélectionnez

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:

Vba
Sélectionnez

Dim MaClasse As Classe1
 
Sub Test()
    'Set MaClasse = New Classe1 'Ne fonctionne pas
    Set MaClasse = GetClasse1 'Fonctionne    
End Sub

L'article de Tushar Mehta sur le site de Microsoft

Un exemple d'utilisation

Créé le 19 février 2008  par Emmanuel Tissot, SilkyRoad

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:

Vba
Sélectionnez

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:

Vba
Sélectionnez

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:

Vba
Sélectionnez

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".

Créé le 26 mai 2008  par Emmanuel Tissot
  

Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright © 2009 Developpez Developpez LLC. Tous droits réservés Developpez LLC. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.