• Aucun résultat trouvé

Procédures Property

Dans le document VBA et Excel (Page 154-160)

Une procédure Property (ou procédure de propriété) est une série d’instructions exécu-tant une tâche déterminée au sein du projet et manipulant des données de type Propriétés.

Il existe trois types de procédures Property :

Property Get. Elles renvoient la valeur d’une propriété qui sera ensuite exploitée par d’autres procédures.

Property Let. Ces procédures définissent la valeur d’une propriété.

Property Set. Elles établissent une référence entre un objet et une propriété.

Une propriété est un attribut nommé d’un objet, définissant ses caractéristiques ou son état. Par exemple, la propriété Address d’un objet Range renvoie l’adresse de cet objet (A1, par exemple). La propriété ColorIndex d’un objet Font renvoie la couleur de cet objet (une police de caractères).

Rappel

144 Excel et VBA

Procédures Property Get

Une procédure Property Get est structurée de la façon suivante :

Property Get NomDeLaProcédure () Instructions

...

NomDeLaProcédure = Expression ...

End Property

Les instructions Property Get et End Property déterminent le début et la fin de la procé-dure. NomDeLaProcédure correspond au nom attribué à la procédure et doit respecter les règles d’affectation de noms de Visual Basic. Ce nom est utilisé pour invoquer la procédure à partir d’une autre procédure.

Instructions correspond aux instructions qu’exécute la procédure.

NomDeLaProcédure = Expression affecte une valeur à la procédure de propriété. NomDeLa-Procédure est le nom affecté à la procédure dans l’instruction de déclaration Property Get, et Expression, une expression affectant une valeur à la procédure. Cette instruction d’af-fectation peut apparaître à plusieurs reprises et n’importe où dans le code de la procédure.

L’écriture d’une procédure Property Get se justifie lorsque la valeur de la propriété ne peut être renvoyée en une seule instruction Visual Basic – par exemple, lorsque l’on souhaite renvoyer sous forme de chaîne de caractères une propriété affectée à une constante.

La procédure de propriété suivante renvoie une chaîne de caractères représentant un commentaire fonction de la valeur de la cellule qui lui est passée. Cette information est renvoyée par la propriété Value de l’objet Cellule. En fonction de la valeur renvoyée, une chaîne de caractères est affectée à la procédure.

1: Property Get RenvoyerCommentaire(Cellule As Range) As String 2: Select Case Cellule.Value

Chapitre 5 Développer dans Visual Basic Editor 145

Ce listing est numéroté de façon à simplifier la présentation des différentes instructions de la procédure RenvoyerCommentaire. La présence de cette numé-rotation dans la procédure réelle générerait évidemment une erreur à l’exécution.

À la ligne 1, l’instruction Property Get déclare la procédure RenvoyerCommentaire, qui doit recevoir l’argument Cellule de type Range (Cellule As Range), et qui renvoie une valeur de type String (As String). Une instruction de contrôle Select Case est utili-sée pour tester la valeur renvoyée par l’expression Cellule.Value des lignes 2 à 13. Pour chacune des plages de valeurs testées, une chaîne de caractères est affectée à la procédure de propriété (RenvoyerCommentaire = "commentaire").

Les procédures Property Get peuvent très simplement être appelées à partir d’autres procédures. Lorsqu’une procédure Property Get est définie, vous pouvez l’utiliser dans n’importe quelle expression exploitant une valeur de propriété, c’est-à-dire en faisant appa-raître son nom suivi de la liste des éventuels arguments entre parenthèses.

Considérez les procédures suivantes :

Sub DefinirCommentaire() Dim LaCellule As Range

For Each LaCellule In Selection

LaCellule.AddComment (RenvoyerCommentaire(LaCellule)) Next LaCellule

End Sub

Property Get RenvoyerCommentaire(Cellule) As String Select Case Cellule.Value

Case Is < 10000

La sous-routine DefinirCommentaire appelle la procédure de propriété RenvoyerCommen­

taire. Une variable objet de type Range y est créée, et une structure For Each...Next est utilisée pour effectuer un traitement sur chaque cellule de la sélection en cours dans la  feuille de calcul active. N’essayez pas pour l’instant de comprendre ces instructions.

Attention

146 Excel et VBA

Les  variables et les structures de contrôle –  telles que les structures For Each Next et Select Case – sont présentées en détail dans les deux chapitres suivants.

La méthode AddComment est appliquée à chaque cellule afin d’insérer un commentaire.

Cette méthode s’utilise selon la syntaxe suivante :

Expression.AddComment(Texte)

Expression est une expression renvoyant un objet Range (une cellule ou une plage de cellules) et Texte, le texte du commentaire.

Plutôt qu’une chaîne de caractères, l’argument Texte reçoit ici pour valeur l’expression RenvoyerCommentaire(LaCellule). Cette expression appelle la procédure Property Get du même nom, en lui passant l’argument LaCellule. Cette procédure s’exécute et renvoie une chaîne de caractères. Celle-ci est passée à la procédure appelante qui l’affecte comme commentaire de la cellule (voir Figure 5.5).

Figure 5.5

Chacune des cellules comprises dans la sélection au moment de l’exécution de la macro s’est vue affecter un commentaire.

Procédures Property Let

Une procédure Property Let est structurée de la façon suivante :

Property Let NomDeLaProcédure (VarStockage) Instructions

End Property

Les instructions Property Let et End Property déterminent le début et la fin de la procé-dure. NomDeLaProcédure correspond au nom attribué à la procédure et doit respecter les règles d’affectation de noms de Visual Basic. Ce nom est utilisé pour invoquer la procédure à partir d’une autre procédure.

Instructions correspond aux instructions qu’exécute la procédure.

Chapitre 5 Développer dans Visual Basic Editor 147

VarStockage est la variable recevant la valeur passée par la procédure appelante et assimi-lée à la valeur affectée à la propriété. Comme vous le verrez dans l’exemple suivant, cette valeur peut ensuite être traitée par la procédure afin de déterminer la valeur devant être affectée à la propriété.

La procédure Property Let suivante est en quelque sorte la procédure miroir de la procé-dure Property Get, décrite plus haut. Cette procédure affecte une couleur de remplissage à chacune des cellules de la sélection en cours, en fonction du commentaire affecté à la cellule. La chaîne représentant le commentaire détermine la valeur de la variable numé-rique qui sera affectée à la propriété ColorIndex de l’objet Range (la cellule).

1: Property Let CouleurDeRemplissage(LaCellule As Range) 2: Dim IndexCouleur As Integer

3: Select Case LaCellule.Comment.Text 4: Case "Très mauvais"

13: LaCellule.Interior.ColorIndex = IndexCouleur 14: End Property

À la ligne  1, l’instruction Property Let déclare la procédure CouleurDeRemplissage, spécifiant que l’argument LaCellule de type Range doit être passé par la procédure appe-lante. La variable IndexCouleur est déclarée à l’aide de l’instruction Dim à la ligne 2. Une instruction de contrôle Select Case est ensuite utilisée pour tester la valeur de l’expression LaCellule.Comment.Text, qui renvoie le texte de commentaire de la cellule (lignes 3 à 12).

Si la valeur renvoyée est égale à Très mauvais, Mauvais ou Correct, une valeur représen-tant un index de couleur est affectée à la variable IndexCouleur. Si le commentaire de la cellule ne correspond à aucune de ces valeurs, IndexCouleur se voit affecter la constante xlColorIndexNone. Enfin, l’instruction de la ligne 13 affecte la valeur de IndexCouleur à la propriété ColorIndex de l’objet Interior de la cellule, c’est-à-dire applique une couleur de remplissage à la cellule.

Pour appeler une procédure Property Let, utilisez une instruction d’affectation, assimilable à l’affectation d’une propriété (Propriété = Valeur). Le nom de la procédure placé à gauche de l’instruction d’affectation sera assimilé à une expression renvoyant une propriété. L’ar-gument requis par la procédure Property Let placée à droite de l’expression sera assimilé à la valeur affectée à la propriété.

148 Excel et VBA

Considérez l’exemple suivant :

Sub DefinirRemplissage() Dim LaCellule As Range

For Each LaCellule In Selection CouleurDeRemplissage = LaCellule Next LaCellule

End Sub

Property Let CouleurDeRemplissage(LaCellule As Range) Dim IndexCouleur As Integer

Select Case LaCellule.Comment.Text Case “Très mauvais”

Dans la sous-routine DefinirRemplissage, l’instruction d’affectation CouleurDeRemplis­

sage = LaCellule est assimilée à une affectation de propriété. CouleurDeRemplissage est assimilé à une expression renvoyant une propriété et LaCellule, à la valeur affectée à cette propriété. La procédure CouleurDeRemplissage est donc appelée par cette instruction.

Elle s’exécute et interroge la valeur de la propriété Text de l’objet Comment de la variable LaCellule. La variable IndexCouleur reçoit une valeur, fonction du résultat retourné. Cette valeur est ensuite affectée à la propriété ColorIndex de l’objet Interior de la cellule. La procédure appelante reprend ensuite la main et procède de la même façon pour la cellule suivante de la sélection.

Syntaxe avancée

Au même titre que les instructions Sub et Function, les instructions de déclaration Property Get et Property Let peuvent être précédées des mots clés Private ou Public et/ou Static, afin de spécifier si la procédure est privée ou publique, et si ses variables locales sont statiques. Pour un rappel de ces concepts, reportez-vous à la section "Procédures Sub" de ce chapitre.

Chapitre 5 Développer dans Visual Basic Editor 149

Les instructions de déclaration Property Get et Property Let peuvent aussi spécifier des arguments dans les parenthèses suivant le nom de la procédure. Chacun des arguments répond à la syntaxe suivante :

[Optional] [ByVal | ByRef] [ParamArray] NomVariable [As type] [=ValeurParDéfaut]

Cette syntaxe est la même que celle utilisée pour les arguments des instructions de décla-ration Sub et Function. Pour un rappel de l’utilisation des différents éléments de cette syntaxe, reportez-vous à la section "Procédures Sub", plus haut dans ce chapitre.

Enfin, une instruction Property Get peut se terminer par l’argument As Type précisant le type de valeur renvoyé par la procédure. Il peut s’agir de l’un des types de variables présentés au Chapitre 6.

Dans le document VBA et Excel (Page 154-160)