jeudi 5 janvier 2012

Le modèle objet d’Excel et l’environnement de développement VBA Excel 2007 Programme VBA EXCEL

CHAPITRE V : Le modèle objet d’Excel et l’environnement de développement VBA

Les objets Excel : hiérarchie, collection d’objets

Le VBA est un langage de programmation orienté objet, c’est à dire qu’il permet de manipuler tous les objets inclus dans excel (ainsi que d’autres objets comme ceux d’Access, de Word,…).

Les objets sont hiérarchisés :

Application (Correspond à l’objet application Excel)
WorkBook : Objet Classeur
WorkSheet : Objet Feuille
Range : Objet plage de cellules

Les objets de même nature appartiennent à une collection d’objets. On accède à un objet d’une collection par un numéro d’index ou son nom :
Exemple :

Application.Workbooks(1).WorkSheets(« Feuil1 ») fait référence à la feuille « feuil1 » du classeur n° 1.
Remarque : le nom d’une collection correspond au nom d’objet auquel est ajouté un s

Propriétés d’un objet
Chaque objet possède des propriétés que l’on peut lire et/ou modifier par code Pour faire référence à une propriété, on fait suivre le nom de l’objet d’un point et du nom de la propriété

Exemples :

Debug.Print Application.Name
Affiche le nom de l’application en cours dans la fenêtre de déboguage (soit « Microsoft Excel »)

Si la cellule A5 contient la formule =SOMME(A1:A4) soit un total de 2000, le code VBA suivant :
Debug.Print Range(« A5 ») .Formula
Affichera : « SOMME(A1:A4) »
Et
Debug.Print Range(« A5 ») .Value
Affichera la valeur 2000

Méthodes d’un objet

Chaque objet comporte des méthodes : une méthode correspond à une action applicable à l’objet
Exemple 1 :
Application.Close
Ferme l’application en cours (soit Excel) La méthode Close est ici appliquée à l’objet Application
Exemple 2
Range(« A1 »).Copy
Range(« A2 »).PasteSpecial
Copie la cellule A1 (méthode Copy) et le colle dans la cellule A2 (Méthode PasteSpecial)
Remarque : les méthodes correspondent très souvent aux commandes de menu d’Excel

Définition et affectation d’une variable à un objet
L’utilisation d’une variable objet est souvent plus pratique que de manipuler l’objet lui même. La définition d’une variable objet en VBA se fait avec l’instruction Dim. L’affectation d’un objet à une variable objet se fait avec l’instruction Set (et non = comme pour les variables ordinaires).
Exemple :
Dim Classeur As Workbook
Déclare la variable Classeur en tant que WorkBook
Dim Feuille As Worksheet
Déclare la variable Feuille en tant qu’objet WorkSheet
Set Classeur = Application.ActiveWorkbook
Affecte à la variable objet Classeur, l’objet classeur actif de l’application courante
Set Feuille = Classeur.Sheets("Feuil2")
Affecte l’objet Feuille « Feuil2 » à la variable feuille
Debug.Print Feuille.Range("A1")
Affiche le contenu de la cellule A1 appartenant à l’objet


Sans les 4 premières instructions, le résultat aurait été obtenu directement par l’instruction suivante :
Debug.Print Application.ActiveWorkbook.Sheets("Feuil2").Range("a1")

Ce qui peut s’avérer fastidieux si dans la suite du code on est amené à utiliser souvent la feuille « Feuil2 »

Remarque : pour manipuler des cellules, on peut aussi utiliser la propriété Cells(NumLigne, NumColonne). RANGE(« C1 ») devient alors RANGE(Cells(1,3),Cells(1,3)) ou si les variables i et j contiennent respectivement les valeurs 1 et 3, on pourra écrire Range(Cells(i,j),Cells(i,j)). Range(« A1 :C4 ») équivaut à Range(Cells(1,1),Cells(4,3))

Libération de la mémoire
Lorsqu’on n’a plus besoin d’utiliser une variable objet, il faut libérer l’occupation mémoire utilisée grâce à l’instruction Set NomVariableObjet=Nothing

Exemple :

Set Feuille=Nothing
Set Classeur=Nothing
Set WorkBook=Nothing

L’environnement de développement integré (IDE) de VBA

Cet environnement est accessible depuis l'onglet Développeur – Visual Basic

L’éditeur de code VBA comporte des fonctionnalités intéressantes comme :
  • la vérification automatique de la syntaxe : la première lettre des mots clés se met automatiquement en majuscule, ce qui garantit une syntaxe correcte
  • La frappe de certains mots clés comporte une aide contextuelle (Infos expresses) qui facilitent l’écriture du code.
Exemple :


- La frappe de certains mots clés provoque l’affichage de méthodes et propriétés en rapport avec le mot clé.
Exemple :



Utilisation de l’aide de VBA

La manipulation de code VBA passe nécessairement par le recours aux fichiers d’aide VBA (à moins de recopier du code, ce qui ne présente aucun intérêt). Dans l’aide figure de plus de nombreux exemples de codes pouvant être repris.

L’aide peut s’utiliser de différentes manières :

- Dans l’éditeur de code : sélectionnez un mot clé et appuyez sur la touche de fonction F1 :



Exemple : MsgBox

- Par le menu ? :

On peut alors consulter l’aide par rubrique :

ou faire une recherche intuitive en saisissant une phrase significative :




Compléments

Parcours d’une collection d’objets

Pour parcourir l’ensemble des objets appartenant à une collection, on utilise une boucle For Each… Next
Exemple : affichage du nom de toutes les feuilles ouvertes du classeur actif
Public Sub LireCollectionFeuilles()

Dim Classeur As Workbook
Déclaration de la variable Classeur en tant qu’objet WorkBook
Dim Feuille As Worksheet
Déclaration de la variable Feuille en tant qu’objet WorkSheet
Set Classeur = ActiveWorkbook
Affectation de l’objet ClasseurActif à la variable classeur
For Each Feuille In Classeur.Sheets
Pour Chaque Feuille de la collection Sheets du classeur actif
Debug.Print Feuille.Name
Afficher nom de la feuille
Next
Suivant
End Sub


Le bloc d’instructions With… End With

Ce bloc permet de lire ou de modifier plus rapidement plusieurs propriétés pour un même objet.

Exemple :
Le code ci-dessous modifie la police de caractères utilisée dans les cellules A1 à A5 de la feuille active (nom : Arial, gras, couleur : vert, taille : 14)
Public Sub SansWith()
Range("A1:A5").Font.Name = "Arial"
Range("A1:A5").Font.Bold = True
Range("A1:A5").Font.Color = vbGreen
Range("A1:A5").Font.Size = 14
End Sub

Ce code est correct d’un point de vue syntaxique mais est long à rédiger et difficile à lire.

Avec With …et End With le code devient le suivant :

Public Sub AvecWith()
With Range("A1:A5").Font
.Name = "Arial"
.Bold = True
.Color = vbGreen
.Size = 14
End With
End Sub

---------------------------------------------------------------------------------------------------

0 commentaires:

Enregistrer un commentaire

Share

Twitter Delicious Facebook Digg Stumbleupon Favorites

 

IP