<< Retour au sommaire

 

VBA, la programmation orientée « Objets »

 

 

Table des matières

  1. présentation de la programmation orientée objets ;
  2. Un exemple dans WORD ;
  3. Modifier une classe.

 

Présentation de la programmation orientée objets

 

La programmation orientée objets permet de définir des procédures et des fonctions dans un modèle qui sera utilisable depuis toutes les applications VBA.

Le modèle est un fichier source dans lequel vous décrivez les procédures et les fonctions. Ce modèle est dite une « classe ».

 

Dès lors qu’une classe est écrite, qu’elle a un nom et qu’elle contient ses procédures et ses fonctions, vous pouvez l’utiliser dans n’importe quel module VBA depuis un objet.

Le fait d’associer un objet à une classe est dite « instance de classe ».

 

La syntaxe pour la classe que nous allons appeler ici « Classe1 » :

Sub Procédure1(paramètre)

Code VBA de la procédure1.

End Sub

Sub Procédure2(paramètre)

Code VBA de la procédure2.

End Sub

function Fonction1(paramètres)

Code VBA de la fonction1.

Fonction1 = Valeur à retourner.

End Function

function Fonction2(paramètres)

Code VBA de la fonction2.

Fonction2 = Valeur à retourner.

End Function

Etc.…

 

Voilà, ici nous avons défini 2 procédures et deux fonctions dans la « classe1 », Procédure1, Procédure2, Fonction1 et Fonction2.

Nous pouvons utiliser la classe depuis les macro mais pas depuis le nom de la classe, car une classe est un modèle, nous devons créer un objet, ici, nous allons continuer la description en créant un objet qui s’appellera MonObjet :

La syntaxe dans une macro :

Dim MonObjet as New Classe1

Voilà, MonObjet peut maintenant être utilisé !

Les procédures et les fonctions préalablement écrites dans la classe sont accessible depuis MonObjet, elles sont devenues les méthodes de l’objet et les paramètres à leur fournir, sont la partie signature de la méthode.

 Par exemple, :

MonObjet.Fonction1(Paramètre1,Paramètre2)

 

MonObjet est l’objet qui est basé sur le modèle Classe1.

Fonction1 est la fonction appelée, c’est la méthode.

Paramètre1 et Paramètres2 sont les valeurs passées en paramètre à la méthode Fonction1, c’est la signature de la méthode…

 


Un exemple dans WORD

 

L’exercice proposé reprend celui se trouvant dans le chapitre :

« 12 les fichiers de données séquentiel ».

 

Nous avions une première macro intitulée « Fonctionnaire »qui demandait à l’utilisateur de saisir le titre, le prénom, le nom et le service d’un fonctionnaire. Ces informations étaient ensuite enregistrées dans le fichier texte « Fonctionnaires.txt ».

Juste ci-après ce trouve le code VISUAL BASIC de cette macro, et ensuite, la même chose mais avec l’utilisation de l’objet intitulé MonObjet.

 

Voici donc le code classique sans objet…

Sub Fonctionnaire()

'

' Fonctionnaire Macro

' Macro enregistrée le 21/03/2008 par BOULANGER

'

' déclarations des variables de saisie

Dim Titre As String * 25

Dim Prénom As String * 25

Dim Nom As String * 25

Dim Service As String * 25

' saisie d'un contact par l'utilisateur

Titre = InputBox("Veuillez saisir le titre", "Titre du fonctionnaire")

Prénom = InputBox("Veuillez saisir le prénom", "Prénom du contact")

Nom = InputBox("Veuillez saisir le prénom", "Nom du contact")

Service = InputBox("Veuillez saisir le service administratif du fonctionnaire", "Service administratif")

' Ajout du fonctionnaire dans le fichier texte fonctionnaires.txt

Open "c:\fonctionnaires.txt" For Append As #1

Print #1, Titre

Print #1, Prénom

Print #1, Nom

Print #1, Service

Close #1

MsgBox ("Enregistrement du fonctionnaire réalisé avec succès")

End Sub

 


Bon maintenant nous allons modifier le code…

Pour commencer, nous allons créer la classe « classe1 ».

Ouvrez une macro, puis validez l’option de menu :

ALT, « Insertion », « Module de classe ».

Une page toute vierge apparaît à l’écran, nous sommes dans la classe « Classe1 », saisissons le code suivant :

 

Function DemanderChamp(Champ As String)

ValeurSaisie = InputBox(Champ, "Veuillez saisir le champ " + Champ)

DemanderChamp = ValeurSaisie

End Function

Function Enregistrer(Titre As String, Prénom As String, Nom As String, Service As String)

Open "c:\fonctionnaires.txt" For Append As #1

Print #1, Titre

Print #1, Prénom

Print #1, Nom

Print #1, Service

Close #1

Enregistrer = "Enregistrement de " + Titre + " " + Prénom + " " + Nom + " réalisé avec succès"

End Function

 

Super, vous venez de créer deux fonctions intitulées « DemanderChamp » et « Enregistrer ».

La première permet la saisie d’informations relatives à un fonctionnaire, la deuxième enregistre ces informations dans le fichier texte « fonctionnaires.txt ».

 

Voici maintenant le code de la macro qui va créer un objet pointant sur la classe « Classe1 », et par la même, utiliser les 2 méthodes…

 

Sub Fonctionnaire()

'

' Fonctionnaire Macro

' Macro enregistrée le 21/03/2008 par BOULANGER

'

' déclarations des variables de saisie

Dim Titre As String * 25

Dim Prénom As String * 25

Dim Nom As String * 25

Dim Service As String * 25

Dim MonObjet As New Classe1

' saisie d'un contact par l'utilisateur

Titre = MonObjet.DemanderChamp("Titre du fonctionnaire")

Prénom = MonObjet.DemanderChamp("Prénom du fonctionnaire")

Nom = MonObjet.DemanderChamp("Nom du fonctionnaire")

Service = MonObjet.DemanderChamp("Service du fonctionnaire")

' Ajout du fonctionnaire dans le fichier texte fonctionnaires.txt

Message = MonObjet.Enregistrer(Titre, Prénom, Nom, Service)

MsgBox (Message)

End Sub

 


Modifier une classe

 

Ultérieurement, pour modifier une classe, entrez dans n’importe quelle macro.

Ensuite, validez la commande du menu déroulant :

ALT, « Affichage », « Explorateur d’objets ».

Dans l’explorateur qui apparaît à l’écran, faites tabulation, vous êtes dans la liste des classes disponibles…

Recherchez la classe à modifier en utilisant les flèches verticales, ou en saisissant au clavier la première lettre du nom de la classe.

Ensuite, faites tabulation, vous êtes dans la liste des méthodes de la classe, choisissez l’une des méthodes et pressez la touche entrée.

Vous atterrissez directement dans le code de la méthode…

 

Philippe BOULANGER