0% ont trouvé ce document utile (0 vote)
125 vues12 pages

L3-2011 Excel Cours 2 Vba

Le document décrit comment créer et modifier des macros dans Excel à l'aide du langage Visual Basic pour Applications (VBA). Il présente les étapes pour enregistrer une macro, l'exécuter et voir son code, puis comment modifier le code d'une macro existante.

Transféré par

albinkosova21
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats DOCX, PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
125 vues12 pages

L3-2011 Excel Cours 2 Vba

Le document décrit comment créer et modifier des macros dans Excel à l'aide du langage Visual Basic pour Applications (VBA). Il présente les étapes pour enregistrer une macro, l'exécuter et voir son code, puis comment modifier le code d'une macro existante.

Transféré par

albinkosova21
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats DOCX, PDF, TXT ou lisez en ligne sur Scribd
Vous êtes sur la page 1/ 12

Licence Sciences Economiques VBA: cours n° 2

PROGRAMMATION SOUS EXCEL ET


ELEMENTS DE LANGAGE VISUAL BASIC

1° approche : les macros enregistrées


Il est possible d'enregistrer une série de manipulations que l'on fait habituellement pour pouvoir la faire ensuite
exécuter automatiquement. Au moment de l'enregistrement, une traduction en langage VISUAL BASIC de
chaque manipulation est faite et stockée dans un programme (une macro) auquel on a préalablement affecté un
nom (voire une touche de raccourci). Les programmes sont stockés dans des feuilles de module accessibles
seulement au travers de Visual Basic Editor.
exemple : faire une macro "cadre" qui met les données d'une plage sélectionnée en gras et entoure le tableau
d'un cadre.
a) enregistrement de la macro
choisissez Outil / Macro - Enregistrer / Nouvelle macro

puis, renseignez la boîte de Dialogue ci-dessous en fixant éventuellement les options


En ce qui concerne les options, si on coche "touche de raccourci", on peut associer la macro à une lettre et
ultérieurement lancer l'exécution en tapant Ctrl + la lettre choisie
Effectuer ensuite les manipulations, à savoir, sélectionner la zone,
choisir dans le menu Format/Cellules/Police [style : Gras]
choisir dans le menu Format/Cellules/Bordure [ bordure : contour] [style : trait moyen]
Arrêter l'enregistrement : Outils/Enregistrer une macro/ Arrêter l'enregistrement
ou encore
Cliquer sur le bouton "Arrêter l'enregistrement" que l'on peut faire apparaître en
demandant par le menu Affiche d’activer le bouton Arrêter l'enregistrement .

b) Execution de la macro
Si une touche de raccourci a été prévue lancer la macro en combinant la touche Ctrl et la lettre choisie

J. Soichot 1 2011-2012
Licence Sciences Economiques VBA: cours n° 2

Sinon passez par le menu Outils/Macro.../[Nom de la macro: choisissez dans la liste] puis [Exécuter]

Application
Mettre l’ensemble de la feuille de calcul en caractères Arial de taille 12.
Inscrire quelques nombres dans les cellules B4 : B7
Lancer l’enregistrement
Sélectionner les cellules B4 :B7
Sélectionner le menu Format puis Cellules
Onglet Police
Mettre en Times New Roman de taille 10
Mettre en gras
Onglet Alignement
Centrer les données
Onglet Bordures
Faire un encadrement
Arrêter l’enregistrement
c) Contenu de la macro
Le texte du programme correspondant à la macro est inséré dans une feuille de module qui est dans « Microsoft
Visual Basic ». Pour voir ce programme
1° méthode : choisir le menu Visual Basic Editor dans le sous menu de Outils/ Macros

puis sélectionnez dans l’arborescence du projet « module 1 » dans le classeur des modules
2° méthode : sélectionnez dans la boite de dialogue sur les macros, la macro à consulter puis choisir le bouton
modifier

Sub Macro1()
' Selection.Borders(xlDiagonalDown).LineStyle =
' Macro1 Macro xlNone
' Macro enregistrée le 06/12/2000 par latec Selection.Borders(xlDiagonalUp).LineStyle =
' xlNone
' Touche de raccourci du clavier: Ctrl+a With Selection.Borders(xlEdgeLeft)
Range("B4:B7").Select .LineStyle = xlContinuous
With Selection .Weight = xlThin
.HorizontalAlignment = xlCenter .ColorIndex = xlAutomatic
.VerticalAlignment = xlBottom End With
.WrapText = False With Selection.Borders(xlEdgeTop)
.Orientation = 0 .LineStyle = xlContinuous
.ShrinkToFit = False .Weight = xlThin
.MergeCells = False .ColorIndex = xlAutomatic
End With End With
With Selection.Font With Selection.Borders(xlEdgeBottom)
.Name = "Times New Roman" .LineStyle = xlContinuous
.Size = 10 .Weight = xlThin
.Strikethrough = False .ColorIndex = xlAutomatic
.Superscript = False End With
.Subscript = False With Selection.Borders(xlEdgeRight)
.OutlineFont = False .LineStyle = xlContinuous
.Shadow = False .Weight = xlThin
.Underline = xlUnderlineStyleNone .ColorIndex = xlAutomatic
.ColorIndex = xlAutomatic End With
End With
Selection.Font.Bold = True Selection.Borders(xlInsideHorizontal).LineStyle
= xlNone
End Sub

J. Soichot 2 2011-2012
Licence Sciences Economiques VBA: cours n° 2

On reconnaît ici la traduction des différentes manipulations. Mais cette macro doit être modifiée pour deux
raisons. La première est que elle créera un cadre toujours au même endroit de la feuille de calcul (B4:B7). La
seconde est que l'on s'est trompé lorsqu'on a voulu mettre le paramètre de "centrage" que l'on a affecté par erreur
à l'alignement vertical et non pas horizontal. Enfin, on peut "dégraisser" ce programme qui reprend absolument
toutes les valeurs de paramètres, y compris celles qui sont mises par défaut. On verra qu'il suffit de ne
mentionner que les instructions qui modifient les valeurs de paramètres.

d) Modification d'une macro

Le texte des macros sont stockés dans des feuilles "module". Il suffit de cliquer sur l'onglet d'un module pour
accéder au texte de la macro. Un dossier Excel peut contenir plusieurs feuilles "module".
· Pour modifier une macro on peut utiliser les fonctions de traitement de texte (couper/copier/coller ...) On peut
en particulier effectuer des couper/coller ou des copier/coller d'une feuille module à une autre feuille et d'un
module à un autre. Il est donc possible de faire de petites macros pour les tester puis, une fois mises au point de
les assembler. On peut également enlever des instructions superflues qui ont été enregistrées et dont on n'a pas
besoin.
On propose ici la correction du programme. Pour une meilleure compréhension, on a laissé les instructions que
l'on voulait supprimer (typographie en italique) en les faisant précéder d'une apostrophe, ce qui a pour effet de
les transformer en "remarque"
.Sub cadre()
‘ Range("B4:B7").Select
With Selection
.HorizontalAlignment = xlCenter
‘ .VerticalAlignment = xlBottom
Après dégraissage
‘ .WrapText = False
Sub cadre()
‘ .Orientation = 0
Selection.HorizontalAlignment = xlCenter
‘ .ShrinkToFit = False
With Selection.Font
‘ .MergeCells = False
.Name = "Times New Roman"
End With
.Size = 10
With Selection.Font
End With
.Name = "Times New Roman"
Selection.Font.Bold = True
.Size = 10
With Selection.Borders(xlEdgeLeft)
‘ .Strikethrough = False
.LineStyle = xlContinuous
‘ .Superscript = False
.Weight = xlThin
‘ .Subscript = False
End With
‘ .OutlineFont = False
With Selection.Borders(xlEdgeTop)
‘ .Shadow = False
.LineStyle = xlContinuous
‘ .Underline = xlUnderlineStyleNone
.Weight = xlThin
‘ .ColorIndex = xlAutomatic
End With
End With
With Selection.Borders(xlEdgeBottom)
Selection.Font.Bold = True
.LineStyle = xlContinuous
‘Selection.Borders(xlDiagonalDown).Line Style
.Weight = xlThin
= xlNone
End With
Selection.Borders(xlDiagonalUp).LineStyle =
With Selection.Borders(xlEdgeRight)
xlNone
.LineStyle = xlContinuous
With Selection.Borders(xlEdgeLeft)
.Weight = xlThin
.LineStyle = xlContinuous
End With
.Weight = xlThin
‘ .ColorIndex = xlAutomatic
End With End Sub
With Selection.Borders(xlEdgeTop)
.LineStyle = xlContinuous
.Weight = xlThin
‘ .ColorIndex = xlAutomatic
End With
With Selection.Borders(xlEdgeBottom)
.LineStyle = xlContinuous
.Weight = xlThin
‘ .ColorIndex = xlAutomatic
End With
With Selection.Borders(xlEdgeRight)
.LineStyle = xlContinuous
.Weight = xlThin
‘ .ColorIndex = xlAutomatic
End With
‘ Selection.Borders(xlInsideHorizontal).LineStyle
= xlNone
End Sub

J. Soichot 3 2011-2012
Licence Sciences Economiques VBA: cours n° 2

e) quelques commentaires sur une macro.


Avant d'aller plus loin, la lecture de cette macro permet de mettre en évidence certains aspects
1- une macro commence toujours par le mot Sub suivi du nom de la macro suivi lui-même de parenthèses (ici
Cadre( ) ) et se termine par End Sub .
2 - les instructions se lisent de la droite vers la gauche . Ainsi Range("B4").Select signifie bien
évidemment sélectionner[action] la plage (c.a.d la cellule) B4 [objet] . Les différents mots du langage sont
séparés par des points.
3 - On peut affecter une valeur à une propriété (une caractéristique) d'un objet . Ainsi,
Selection.Font.Name = "Times New Roman" signifie que la police de caractères (Font) applicable à
la sélection de cellule est le Times New Roman et Selection.Font.Size = 10 choisit la taille 10 (points par
pouce) pour cette police. L'objet Font (Police) a donc diverses propriétés (nom, taille, style, ...) auxquelles on
peut associer des valeurs différentes . Celles-ci peuvent être une donnée texte ( c'est le cas du nom de la police),
un nombre (la taille), une valeur logique (si la propriété Superscript (exposant) est à vrai, alors le texte est
mis en exposant ) ou encore une constante prédéfinie xlNone, xlThin (xlAucun ; xlMince ... ) toutes les
constantes prédéfinies commencent par xl
4 - On constate aussi que VBA dispose d'instructions de structures. Dans l'exemple précédent, on trouve la
structure With …. End With (Avec .... Fin Avec) qui évite d'avoir à répéter certains mots (ici l'objet
sélectionné).
Au lieu d’écrire Selection.Font.Name = "Times New Roman"
Selection.Font.Size = 10

On peut écrire With Selection.Font
.Name = "Times New Roman"
.Size = 10

End With
f) autres modes de lancement des macros
création d'un bouton
Il est beaucoup plus facile pour l'utilisateur de faire démarrer une macro en ayant à cliquer sur un
bouton dessiné dans une feuille. Il y a deux façons de procéder. Dans la mesure où il y a deux barres d’outils qui
permettent d’insérer des objets dans la feuille de calcul :
Barre d’outils commandes

Barre d’outils Formulaires

On constate que l’on a presque les mêmes objets (on appelle cela des Contrôles). Il vaut mieux utiliser la barre
d’outils « commandes » dans la mesure où la seconde reste plus appropriée aux anciennes feuilles de dialogue.
A chaque objet est associé d’une part des propriétés, d’autre part (éventuellement ) du code. La différence est la
« localisation du code ». Il faut savoir, comme le montre la boîte ci-dessous que à un dossier est associé un
projet.

Le code associé à un objet commande dessiné sur une


feuille de calcul est lui-même associé à cette feuille.

Le code associé à un objet Formulaire dessiné sur une


feuille de calcul est inscrit dans un module.

J. Soichot 4 2011-2012
Licence Sciences Economiques VBA: cours n° 2

En ce qui concerne les manipulations des objets dessinés, on peut rappeler que ces objets peuvent être modifiés
dans leur taille (il suffit de tirer sur les poignées) mais aussi les déplacer, les dupliquer ou les supprimer. Il suffit
de les sélectionner en mode création soit en cliquant sur l’équerre si l’objet est un objet de la barre d’outil
commandes soit en maintenant la touche Ctrl appuyée et en allant cliquer sur l’objet s’il est un objet de la barre
d’outils Formulaire.
A partir de là, on peut déplacer l’objet, par glissement ; le copier par glissement en maintenant la touche Ctrl
appuyée ou le supprimer avec la touche Suppr.
A – à partir de la barre d’outils commandes
1 – Pour faire apparaître la barre d’outils « commandes »
menu Affichage  Barres d’outils  cocher « commandes »
2 - Dessin du bouton dans la feuille de calcul
Cliquer sur l'objet "bouton" ; une mire apparaît ( sous la forme d'une croix + )
Déplacer la mire dans la feuille de calcul jusqu'à l'endroit qui sera le coin supérieur gauche du bouton
puis "tirer" (i.e. maintien du bouton gauche de la souris appuyé et glisser vers ce qui sera le coin
inférieur droit du bouton). Quand vous relâchez la souris, le bouton est créé.

=INCORPORER("Forms.CommandButton.1";"")
Le bouton qui se présente ainsi est en mode creation. On peut en changer les propriétés où lui associer
du code de façon qu’il exécute bien la macro désirée.
3 – associer du code
Lorsque le bouton est sélectionné, l’utilisation de l’icône ‘modifier le code’ crée automatiquement un
sous-programme ‘vide’.
Private Sub CommandButton1_Click()
End Sub
Ce sous-programme (sub routine) est ce que l’on appelle une procédure événementielle : l’événement
est ici le Click sur le bouton qui en déclenchera automatiquement l’exécution. Or, ce que l’on veut
exécuter, c’est le (sous)programme Macro1. Il suffit d’écrire
Private Sub CommandButton1_Click()
Macro1
End Sub
On remarque donc que pour exécuter une procédure depuis une autre procédure, il suffit de la nommer.
Dit autrement, le nom du sous-programme (Macro1) constitue dans notre procédure
‘CommandButton1_Click ( ) une instruction d’appel.de la procédure macro1.

Dans le programme Macro1, rajouter l’instruction Selection.Select pour que VBA comprenne bien que
la sélection est une plage. Sinon, on aura un message d’erreur. Cette erreur ne se produit pas si on
lance la macro par le menu Outils / Macro / exécuter car la macro ayant été créée par enregistrement
dans une feuille de calcul, elle s’applique automatiquement à la sélection de cellule sur la plage.
En revanche, en passant par le code associé au bouton, VBA ne sait pas a priori si la sélection
concerne une plage ou un autre objet. C’est pourquoi l’instruction , apparemment idiote,
Selection.Select précise en fait qu’il s’agit des cellules sélectionnées.
4 – exécuter.
Il suffit de quitter le mode création (en cliquant sur l’équerre) et de cliquer sur le bouton.
B – à partir de la barre d’outils Formulaires – pour mémoire/ déconseillé
1 – Dessiner un bouton sur la feuille
La technique est la même que précédemment. Le bouton en mode création est entouré de stries.
Lorsqu'il apparaît sous cette forme (entourage strié), le bouton peut être modifié;

J. Soichot 5 2011-2012
Licence Sciences Economiques VBA: cours n° 2

- le nom "Bouton 1" , proposé par défaut peut, en particulier être modifié: en cliquant à l'intérieur du
bouton, on fait apparaître la barre d'insertion de texte et on peut effacer le texte pour le remplacer par un
autre. Remarquer que le contour hachuré disparaît. Pour "valider" le nouveau texte, cliquer en dehors du
bouton n'importe où sur la feuille de calcul
- on peut modifier la forme du bouton en tirant sur les poignées
2- Affecter un bouton à une macro
Jusqu'ici on n'a fait que créer, dessiner un bouton. Lorsque le dessin est terminé, une boite de dialogue
apparaît permettant de rattacher le bouton à une macro. Si la macro n'est pas encore écrite, il suffit de
fermer cette boite de dialogue en cliquant "Annuler", sinon, choisir dans la liste la macro que l'on veut

rattacher au bouton

Affecter un bouton à une macro peut se faire à tout moment. On accède à la boîte de dialogue en
sélectionnant dans les menus : Outils/ Affecter une macro ... / [Nom de la macro : ]
3 - lancement de la macro
Quand vous approchez la flèche de la souris du bouton de lancement, celle-ci se transforme en une
main. Il suffit de cliquer la souris pour déclencher la macro.

De quelques instructions utiles pour programmer en VBA pour Excel


Avertissement : les syntaxes sont toujours du type : Objet.Propriété ou Objet.Méthode
Les notes ci-dessous ont pour but de mettre l’accent soit sur les objets eux-mêmes, soit sur les
propriétés de ces objets, soit enfin sur les méthodes qui leur sont appliquées.
Complément sur les Déclarations
On peut, comme on l’a vu déclarer des variables de différents types
On peut également déclarer des objets, ce qui permettra de les utiliser en les nommant.
Dim nom_donné_à_un_objet_type AS type_d_objet
puis Affecter une valeur à cet objet
Set nom_objet = valeur

exemple : Dim P as Range


Set P = Range("Feuil1!C8:D10")
Afficher ou rendre active une feuille de calcul
Méthodes : Select et méthode Activate
Sheets(nom de la feuille).Select
exemple : si la feuille n°2 s'appelle param : Sheets(2).Select ou Sheets("param").Select
Sheets(nom de la feuille).Activate Sheets(2).Activate ou Sheets("param").Activate
ActiveSheet est une propriété de l’objet classeur et renvoie (ou fait référence) à la feuille active ce qui revient à
cliquer sur l’onglet. Appliquée aux feuilles de calcul …la méthode Select est équivalente ; elle doit être utilisée
pour sélectionner une plage de cellule de préférence à la méthode Activate
Travailler sur des plages (range ... )
L'objet Range est suivi de la ou des références de cellules
Range("A1") fait référence à la cellule A1 de la feuille active
Range("Feuil2!C3:D5") fait référence à la plage C3:D5 de la feuille "Feuil2" , donc quelle que soit
la feuille active. Remarquer l’usage du caractère !

J. Soichot 6 2011-2012
Licence Sciences Economiques VBA: cours n° 2

On voit que l’argument est une chaîne de caractères. Dans les exemples précédents, l’argument est une
constante puisqu’on a du texte entre doubles quotes (" "). Mais on pourrait tout aussi bien avoir une variable
ou une combinaison de variables de type chaîne.
Exemple : On suppose que les feuilles Excel d’un classeur s’appellent "Pierre" , "Paul" , "Jacques". Si dans le
programme on a créé une variable qui s’appelle « individu » et si on souhaite mettre à 0 la cellule B2 de la
feuille qui se rapporte aux données de cet individu, alors on peut écrire, s’il s’agit de l’individu "Paul"
individu = "Paul"
Range( individu + "!B2").value = 0
La propriété ActiveCell (cellule active) qui est une propriété de l’objet ActiveSheet est l'équivalent d'un objet
Range. On dit que cette propriété "renvoie" un objet plage. Les propriétés ou méthodes applicables aux objets
range, le sont à ActiveCell
La propriété Cells( indexligne, indexcolonne ) est une propriété d’une feuille de calcul ou de la feuille active
qui renvoie également un objet plage mais sous la forme d'une seule cellule. L'intérêt est que l'on peut
facilement "variabiliser" les références
Cells(3,5) fait référence à la cellule de la 3° ligne et 5° colonne . équivaut à Range("E3")
Exemple : tracer sur une feuille, le triangle de Pascal (qui correspond à la formule du binôme) pour les 10
premières puissances.
ce qu’il faut savoir : le triangle de Pascal donne les coefficients du binôme aux
puissances de 0 à n. Les éléments de la 1ère colonne sont égaux à 1 ; tous les autres
éléments sont la somme des deux éléments situés dans la ligne qui le précède de la
même colonne et de la colonne précédente. Une case non remplie est équivalente à 0
si k=6 (a+b)6 = a6 +6 a5b + 15a4b2 + 20a3b3 + 15a2b4 + 6ab5 + b6

1 Private Sub Pascal()


1 1 Dim i, j As Integer
1 2 1 Cells(1, 1).Value = 1
1 3 3 1 For i = 2 To 10
1 4 6 4 1 Cells(i, 1).Value = 1
1 5 10 10 5 1 Cells(i, i).Value = 1
1 6 15 20 15 6 1 For j = 2 To i
1 7 21 35 35 21 7 1 Cells(i, j).Value = Cells(i - 1, j - 1).Value + Cells(i - 1, j).Value
1 8 28 56 70 56 28 8 1 Next
1 9 36 84 126 126 84 36 9 1 Next
End Sub

Selectionner cellule : objet.select


Range(.”Feuil1!A2:B3” ).Select
Sheets(index) . Cells(indexligne, indexcolonne).Select

Les propriétés Cells peuvent être utilisées comme arguments de l'objet range
exemple comment affecter le style italique aux cellules A1: C5 dans la feuille Sheet1.
Worksheets("Sheet1").Activate
Range(Cells(1, 1), Cells(5, 3)).Font.Italic = True
Dans ce cas, les références données par la propriété Cells sont relatives à l’objet et non à la feuille.
Exemple : on nomme P un objet plage de référence B2 :D10 dans la feuille 2 ; ce petit programme fait référence
à la propriété Address d’un objet plage qui renvoie l’adresse, c’est-à-dire les références, de la plage sous la
forme d’une chaîne de caractères
Sub plage()
Dim P As Range
Set P = Range("Feuil2!B2:D10")
P.Cells(3, 2).Select
x = ActiveCell.Address
MsgBox (x) ‘  affichera la reference $C$4
End Sub

J. Soichot 7 2011-2012
Licence Sciences Economiques VBA: cours n° 2

Modification ou Mémorisation de propriétés d’une cellule ou d’une plage


- modifier la propriété d'une plage
Range( référence ). Propriété = expression
exemple : Range("Feuil2!c3").value = 10
Affecte une nouvelle valeur (ici 10) à la cellule C3 de la feuille 2
- mémoriser dans une variable la valeur d'une propriété
variable = Range( référence ). Propriété (ici l'adresse)
exemple : mémoriser l’adresse de la cellule active dans une variable nommée x
Dim x As Variant
....
x = ActiveCell.Address
- récupérer dans une variable la valeur contenue dans une cellule
Dim y As Integer
...
y = Range("Feuil2!.C5").Value
- initialiser une cellule (ici mise à rien)
Range(" Feuil1 !A1 :A20 ").value = ""

- modifier des attributs de police


exemple comment affecter le style italique aux cellules A1:C5 dans la feuille Sheet1.
Worksheets("Sheet1").Activate
Range(Cells(1, 1), Cells(5, 3)).Font.Italic = True

Propriété Offset(nblignes,nbcolonnes) (décaler)


Permet de faire référence depuis une cellule donnée, généralement la cellule active, à une cellule décalée de
nblignes et nbcolonnes.
Nbligne = 3 : 3 lignes + bas Nbligne = -1 : 1 ligne + haut Nbligne = 0 : sur la même ligne
Nbcolonne = 2 : 2 colonnes + à droite Nbcolonnes = -1 : 1 colonne + à gauche

Cells(15,3).Offset( 1) (c'est-à-dire avec un seul argument) équivaut à offset(1 , 0)


Exemple : affecter une valeur à une cellule décaler de 1 à droite
Activecell.Offset(0,1).value = expression

Attention : la propriété Offset renvoie un objet plage ; il faut donc soit lui accoler une propriété , soit une
méthode. la cellule désignée par la propriété offset ne devient pas la cellule active. Pour qu'elle devienne la
nouvelle cellule active, taper
ActiveCell.Offset( 0, 1).Select

Propriété End( direction ) où direction peut prendre les valeurs : xldown, xltoright, xlup, xltoleft
Cet exemple montre comment étendre la sélection de la cellule B4 à la dernière cellule de la ligne 4 contenant des données.
Worksheets("Sheet1").Activate
Range(("B4"),Range("B4").End(xlToRight)).Select

Propriété Address : cette propriété renvoie sous la forme d’une chaîne de caractères l’adresse d’une cellule ou
d’une plage de cellule.
Pour mémoriser l’adresse d’une plage de cellules sélectionnée dans la feuille 2
Dim refcell As String
Sheets(2).activate
Refcell = Selection.Address
‘Pour vérifier le contenu de Refcell, écrire sa valeur dans la cellule A1 de la feuille 1 :
Range(“Feuil1!A1”).Value = refcell
ou faire afficher par MsgBox( refcell )

Propriétés Rows ,Columns, Count

J. Soichot 8 2011-2012
Licence Sciences Economiques VBA: cours n° 2

Alors que jusqu’à présent on a considéré une plage comme un ensemble de cellules, on peut, avec les
propriétés Rows et Columns la voir comme un ensemble de lignes ou un ensemble de colonnes.
Si P est un objet plage : P.Rows ou P.Columns renvoient ce même objet sous la forme d’ une collection de
lignes ou une collection de colonnes.

La propriété Count permet, comme son nom l’indique de compter le nombre d’éléments constituant un
collection. On utilisera donc P.Rows.Count P.Columns.Count pour designer le nombre de lignes ou le
nombre de colonnes de la plage P

Rows(index) et Columns(index)font référence à la ligne ou à la colonne dont on donne le rang


le petit programme ci-dessous mémorise dans x et y le nombre de lignes et le nombre de colonnes de la plage P
Saurez-vous interpréter la dernière instruction ?
Sub essai()
Dim P As Range
Set P = Range("E7:G11")
x = P.Rows.Count
y = P.Columns.Count
MsgBox ("nombre de lignes de P : " & x)
MsgBox ("nombre de colonnes de P : " & y)
P.Rows(P.Rows.Count).Select
End Sub
Propriété Formula et propriété FormulaArray

La propriété Formula appliquée à un objet plage permet d’affecter une formule Excel dans une cellule. La
propriété FormulaArray permet de traiter les formules matricielles. La formule est écrite sous la forme d’une
chaîne de caractères a) qui commence par le signe = b) les références de cellules incluses dans la formule sont
données dans le mode RC (équivalent en L1C1) selon les conventions suivantes :
R et C sont les abréviations de Row (ligne), Column (colonne).
La lettre R ou la lettre C suivie d’un n° équivaut à une référence absolue sur la ligne ou la colonne
La lettre R ou la lettre C suivie d’un entier signé placé entre crochets indique une référence relative.
R ou C sans autre indication fait référence à la ligne ou la colonne courante.
Exemple : R3C5 (équivaut à l’adresse absolue de la cellule en 3°ligne et 5°colonne  $E$3
R[-2]C4 signifie dans la colonne 4 , 2 lignes avant
R[1]C[1] signifie une ligne plus bas et une colonne plus à droite
Remarque : le plus simple est d’enregistrer la manipulation sous Excel au cours de laquelle vous écrivez la
formule.
ActiveCell.FormulaR1C1 = "=COUNT(RC[-4]:R[448]C[-4])"
Selection.FormulaArray = "=TRANSPOSE(R[-3]C[-1]:R[-1]C[-1])"
Propriétés Columns( index) ou Rows( index)
Ces propriétés font en fait référence à la collection des colonnes ou des lignes d’une feuille ou d’un objet plage.
L’index correspond au n° de la colonne ou de la ligne. Ces propriétés renvoient donc un objet plage (pour un
exemple, voir ci-dessous avec la méthode ClearContents)

Méthodes s’appliquant à un objet plage


On peut par programme appliquer les méthodes affectant des objets plages :
Couper Copier Coller Supprimer Fusionner
Cut Copy Past Delete Merge
Pour examiner les syntaxes, il est recommandé de procéder à des enregistrements des manipulations.
Méthode ClearContents (effacer)
Efface les cellules de l’objet plage auquel s’applique cette méthode :
exemple 1 : Selection.ClearContents
exemple 2 : Sheets.columns(4).ClearContents
exemple 3 : si P est un objet plage préalablement déclaré
P.Rows(RowCount).ClearContents efface la dernière ligne de la plage P
Méthode Sort (trier)

J. Soichot 9 2011-2012
Licence Sciences Economiques VBA: cours n° 2

La méthode peut comporter plusieurs arguments qui correspondent aux différents parameters à saisir pour
procéder à une opération de tri.
Range("B1:C102").Select
Selection.Sort Key1:=Columns(3), Order1:=xlAscending, Key2:=Columns(2),
Order2:=xlDescending
D’une façon générale, lorsqu’une méthode comporte des arguments, ceux-ci sont identifies par des noms de
variables prédéfinis; le signe d’affectation := les valeurs affectées peuvent être des objets (par exemple , ci-
dessus, columns(3) est la plage de cellule qui compose la colonne 3, ou des constantes prédéfinies (xlAscending)
ou encore des constantes non prédéfinies.

Exploiter des données d’une feuille de calcul : déplacer ou non la cellule active
Si on veut parcourir des données organisées par exemple en colonne dans une feuille de calcul, il faut bien sûr
savoir repérer la 1ère donnée de la liste puis parcourir la série jusqu’à ce qu’il n’y ait plus de données.
Deux façons de parcourir :
a) on déplace la cellule active
b) on joue sur les indices, sans que cela déplace forcément la cellule active
a) on déplace la cellule active
Exemple : trouver la première cellule vide dans une série en colonne depuis la cellule A1
Sheets("Feuil1").Activate
With ActiveSheet
.Range("A1") . Select
While not IsEmpty(ActiveCell)
ActiveCell.Offset(1) . Select
Wend
End With

Exemple 2 Sheets("Feuil1").Activate
i=1
With ActiveSheet
.cells(i , 1).select
While not isempty(.cells(i , 1))
i = i+1
.cells( i , 1 ). Select
Wend
End With
Lorsque l’exécution du programme sera terminée, vous constaterez que la cellule active est en fin de liste

b) on joue sur les indices, sans que cela déplace forcément la cellule active
Exemple : on sait que la série est dans la colonne 1 ; on ne sait pas où elle commence (il y a des cellules vides au
départ) ni ou elle finit . On souhaite écrire à côté de chaque donnée son logarithme népérient (fonction log( )
Dim i As Integer
i=1
While isempty( Sheets(“Feuil1”).Cells(i,1)
i = i+1
Wend
While not isempty(Sheets(“Feuil1”).cells(iI,1)
Sheets(“Feuil1”).cells(i,2)=log(Sheets(“Feuil1”).cells(i,1))
i = i+1
Wend
Lorsque l’exécution du programme sera terminée, vous constaterez que la cellule active est toujours à la même
place

J. Soichot 10 2011-2012
Licence Sciences Economiques VBA: cours n° 2

2 ° approche : création de fonctions


La différence entre une fonction et une macro est que la fonction produit un résultat unique qui va être utilisé
dans la feuille de calcul. Il peut être intéressant de développer des fonctions utilisables dans une application
spécifique. Comme toutes fonctions, celles-ci est identifiée par un nom suivi de parenthèses à l'intérieur
desquelles figure la liste des arguments séparés par des points virgule.
a) écriture de la fonction
Avant d'écrire le programme correspondant à la fonction que l'on veut créer, il est nécessaire de bien
définir ce que l'on veut que la fonction nouvelle produise comme résultat et quels sont les arguments qu'il faudra
lui donner. La fonction suivante simule la fonction ARRONDI.AU.MULTIPLE qui n'a pas été installée. L'objet de
cette fonction, que l’on appellera ARRMUL est de produire un nombre arrondi au multiple d'un autre nombre. La
syntaxe devrait donc être la suivante : ARRMUL ( nombre à arrondir ; multiple ).
Ainsi ARRMUL ( 257 ; 20) doit arrondir au multiple le plus proche de 20 soit 260
Le texte du programme doit être écrit dans une feuille "module". Pour ouvrir une nouvelle feuille "module",
utilisez le chemin suivant : Outil / Macro / Visual Basic Editor puis Insertion / Module

Function ARRMUL(nb, mul)


x = Int((nb + mul / 2) / mul)
ARRMUL = x * mul
End Function

On aborde ici quelques notions de programmation.


Le texte du programme doit être entouré des mots Function et End Function .
Le mot Function est lui-même suivi du nom que l'on a décidé de donner à la fonction, (ici ARRMUL) suivi
d'une liste de noms de variables locales correspondant aux différents arguments. Ce sont ces variables (qui
s'appellent ici respectivement nb et mul ) qui reçoivent la valeur des différents arguments envoyés depuis la
feuille de calcul. [remarquer que les variables locales (qui servent d’arguments) sont séparés par une virgule et
non pas un point virgule]
Les instructions de programme exécutent les différentes phases de calcul. Ici, on voit que l'on utilise une variable
de travail que l'on a appelé x . On a en outre utilisé une fonction Int (partie entière de) qui est propre à Visual
Basic car on ne peut transposer dans ce programme la fonction Ent( ) qui n'opèrent que dans Excel.
Dans ce programme on comprendra facilement que Int( (nb+ mul/2)/mul) a pour but d'arrondir la division nb /
mul à l'entier le plus proche.

Enfin, il doit y avoir une instruction qui affecte le résultat définitif du calcul à la fonction; ARRMUL = x * mul
c'est cette instruction qui renvoie à la feuille de calcul appelante le résultat du calcul.
b) utilisation de la fonction dans une feuille de calcul

J. Soichot 11 2011-2012
Licence Sciences Economiques VBA: cours n° 2

La fonction que nous avons créée fonctionne comme une fonction bien classique. Elle est automatiquement mise
à la fin de la liste des fonctions, mais ici, elle n'appartient qu'au dossier en cours. Dans l'exemple ci-dessus, la
fonction est appelée par la formule de la cellule B5 ; elle fait référence au cellule B2 et B3 qui contiennent
respectivement 1278 et 25.

Les fonctions en VBA


Il existe dans la programmation VBA de nombreuses fonctions. On en donne ici quelques unes. Toutes les
fonctions figurent bien sûr dans l’Aide VBA
Abs(number) valeur absolue
Asc(string) code ascii du 1° caractère d'une chaîne
Chr(charcode) retourne le caractère dont on donne le code ACII
Cos(number) cosinus d'un nombre
transforme une chaîne composée de caractères
Fonctions de conversion
pouvant être lus comme … en une donnée de type ….
Cdate(string)
Cdouble(string )
CInt(string)
CLng(string)
CStr(expression) Transforme un nombre en chaîne
Date date système
Ajoute un nombre de jours ou de mois à une date
DateAdd(interval, number, date)
pour en obtenir une nouvelle
Day(date)
Exp(number) exponentielle
IIf(expr, truepart, falsepart) fonction conditionnelle fonctionnant comme sous Excel
InputBox(prompt[, title] [, default] [, xpos] [, ypos] [, helpfile, context])
InStr([start,]string1,string2[,compare]) recherche si une chaîne est dans une autre
Int(number) partie entière
IsEmpty(expression) teste si une cellule ou une variable est vide
teste si une cellule ou une expression retourne une
IsError(expression) valeur d'erreur
IsNumeric(expression) teste si une cellule ou une variable contient un nombre
LCase(string) convertit en minuscules
Left(string, length) retourne les n caractères les plus à gauches
Len(string | varname) retourne le nombre de caractères d'une chaîne
Log(number) logarithme
LTrim(string) élimine les blancs à gauche
RTrim(string) élimine les blancs à droite
Trim(string) élimine les blancs à gauche et à droite d'une chaîne
Mid(string, start[, length]) extrait n caractères à partir du ième
MsgBox(prompt[, buttons] [, title] [, helpfile, context])
Replace(expression, find, replace[, start[, count[, compare]]])
Right(string, length)
Rnd[(number)] renvoie un nombre aléatoire
Round(expression [,numdecimalplaces]) arrondi un nombre
Sgn(number) retourne +1 ou -1 selon le signe d'un nombre
Sin(number) sinus
Sqr(number) carré
---------Str(number) transforme un nombre en un type variant
Tan(number) tangente
UCase(string) transforme en majuscules
Val(string) transforme une chaîne de chiffres en un nombre

J. Soichot 12 2011-2012

Vous aimerez peut-être aussi