Vous êtes sur la page 1sur 11

VISUAL BASIC POUR EXCEL 2007

EXCEL 2007
Excel 2007 a un nouveau look, une nouvelle interface utilisateur, et contient plus d'un million de lignes. Il
introduit aussi de nouveaux objets, de nouvelles méthodes, et de nouvelles propriétés.
Si vous devez distribuer vos fichiers Excel VBA à d’autres utilisateurs, assurez-vous de la version d'Excel qu’ils
utilisent.
Par exemple, si vous écrivez un code VBA qui une adresse de cellule XFD1048576 (la dernière cellule dans une
feuille), ceux qui utilisent une version précédente auront une erreur parce qu'avant Excel 2007, les feuilles
avaient seulement 65.536 lignes et 256 colonnes (la dernière cellule est IV65536)
VBA sous EXCEL 2007
L’écran VBA doit être rajouté à la fenêtre d'application d’Office 2007.
Le Bouton Office est un nouvel élément graphique dans l'interface utilisateur. C'est un bouton circulaire sur le
côté supérieur gauche d'Excel.

1. Cliquer sur cette icône (ou Alt + F) pour ouvrir le menu Office.
2. Dans Options Excel, Standard, cocher Afficher l’onglet Développeur dans le Ruban
3. Dans Personnaliser cocher Afficher la barre d’outils accès rapide.
4. Cliquer OK.

Activer les macros


1. Cliquer l’onglet Développeur.
2. Dans le groupe Code, activer Utiliser les Références Relatives : la couleur de ce bouton change.

Fev 2011 ORDISWEET | Activer les macros 1


VISUAL BASIC POUR EXCEL 2007
Vient ici la partie manuelle. Suivre ces instructions
soigneusement :
Dans Outils> Macro>Macros complémentaires,
désactiver la macro Euro
Activer les macros: Assistance Somme
conditionnelle - Complément Solveur - Utilitaire
d'analyse - Utilitaire d'analyse VBA
Cette précaution nous délivre des macros inutiles
et installe les compléments indispensables pour
une utilisation avancée d'Excel. En effet certaines
fonctions ne seraient pas activées sans cela.

Gérer les macros


Comme précisé plus haut, cette macro n'a pas été enregistrée dans ce classeur "Paie.xls". Sinon elle ne serait
accessible que si ce classeur Paie.xls est ouvert. Aussi, pour accéder à cette macro à partir de tout autre
classeur, il a été enregistré dans le classeur des macros personnelles, PERSO.XLS qui se trouve dans le dossier
Utilisateur>ApplicationData>Microsoft>Excel>XLSTART.
Pour enlever une macro de ce dossier, Menu Fenêtre>Afficher>"PERSO.XLS">OK. Le classeur PERSO.XLS est
affiché et ouvert.

Donc pour gérer les macros liées au classeur, on


passe directement dans la liste des macros. mais
pour modifier ou supprimer une macro partagée par
plusieurs classeurs, il faut afficher et ouvrir
PERSO.XLS.

Fev 2011 ORDISWEET | 2


VISUAL BASIC POUR EXCEL 2007

L'enregistreur de macro
Sans taper la moindre ligne de code, vous pouvez créer vos propres procédures (appelées macros). Vous
pourrez ensuite les modifier lorsque que vous connaîtrez mieux la syntaxe. Autre avantage de taille, si
vous ne savez pas comment faire quelque chose, enregistrez une macro qui le fait, et jetez ensuite un œil
au code.
Aller dans Outils...Macro...Nouvelle Macro. Vous avez alors une boite de dialogue qui s'affiche. Vous
pouvez saisir le nom de votre macro, un raccourci clavier (c'est à dire une combinaison de touches pour
exécuter votre macro) et des commentaires, qui vous aideront lorsque vous aurez écrit trop de macros et
que vous ne vous rappellerez plus a quoi elles servent.

1.Ouvrir le classeur "Employés.xls"


2. Outils>Macro>Nouvelle macro

3. Entrer le nom "Age" pour cette macro.


4. Cliquer dans la boîte de Raccourci et entrer Shift A (pour un A majuscule) comme touche de raccourci.
5. Assurez-vous que la Macro sera enregistrée dans "Classeur de macros personnelles"
6. Vous pouvez entrer du texte dans la boîte de Description mais ceci est facultatif.
6. Cliquer OK. La boîte de dialogue se ferme, et l'enregistreur de macro Excel est allumé. A partir de
maintenant, Excel suit tout ce que vous faites et le convertit en code VBA.
7. Saisir le contenu de J1 K1 et L1

8. En J2, saisir la formule qui calcule les années pleines d'ancienneté et en K2, les mois en plus.
9. Copier les formules pour toutes les lignes utiles

10. Centrer tout et arrêter l'enregistrement.

Fev 2011 ORDISWEET | L'enregistreur de macro 3


VISUAL BASIC POUR EXCEL 2007

VBA et VB
VBA est different de (Visual Basic). VB est un langage de programmation qui vous laisse créer des
programmes exécutables autonomes (de type .EXE). Bien que VBA et VB aient beaucoup en commun, ils
sont différents.
VBA Excel est utilisé pour automatiser certaines tâches d'Excel :
- Insertions répétitives de texte,
- Traitement mensuel de données, ou traitement identique sur plusieurs feuilles,
- Création de commande de menu personnelle, de bouton,
- Création d’une nouvelle fonction dans une feuille,
- Création d’application basée sur les macros, création d’additifs pour Excel.

Avantages et inconvénients VBA


+ Excel toujours exécute la tâche dans exactement la même façon.
+ Excel exécute la tâche beaucoup vite que vous.
+ Excel exécute la tâche sans erreurs, si vous êtes bon programmeur de macro,
+ Quelqu'un qui ne sait rien d’Excel peut exécuter la tâche.
+ Vous pouvez faire des choses dans Excel qui autrement serait impossible.
+ Pour les tâches longues, vous n'avez pas à rester devant votre ordinateur.
- Vous aurez à écrire des programmes en VBA mais ce n'est pas si difficile que vous le pensez.
- Les autres gens qui ont besoin d'utiliser vos programmes VBA doivent avoir leurs propres
installations d'Excel. Ce serait agréable si vous pourriez appuyer un bouton qui transformer votre
application Excel/VBA en programme autonome, mais cela n'est pas possible (et ne sera jamais
probablement).
- Vous ne pouvez pas supposer naïvement que votre programme VBA marchera toujours
correctement sous toutes circonstances. Obligation de déboguer et, si les autres utilisent vos
macros, d’apporter le soutien technique.
- Comme vous le savez, Excel évolue continuellement. Dans la compatibilité entre les versions, le
coVBA que vous avez écrit pour Excel 2007 ne marchera pas avec les versions plus anciennes ni
avec une future version d'Excel.

Terminologie
VBA nouveaux venus sont souvent dépassés par la terminologie qui est utilisée par le code VBA. J'ai mis
sur pied quelques définitions clés pour vous aider à garder les termes droites. Ces termes couvrent VBA et
formulaires utilisateur (boîte de dialogue personnalisée) — deux éléments importants qui sont utilisées
pour personnaliser Excel :
- Code : VBA les instructions qui sont produites dans une feuille de module lorsque vous enregistrez une
macro. Vous aussi pouvez saisir le code VBA manuellement.
- Contrôles : Objets sur un objet UserForm (ou dans une feuille de calcul) que vous manipulez. Par
exemple des boutons, cases à cocher et les zones de liste.
- Fonction : L'un des deux types de macros VBA que vous pouvez créer. (L'autre est une procédure Sub).
Une fonction renvoie une valeur unique. Vous pouvez utiliser les fonctions VBA dans d'autres macros VBA
ou dans vos feuilles de calcul.
- Macro : Un ensemble d'instructions VBA exécutées à la suite par déclenchement.
- Méthode : Une action exécutée sur un objet. Par exemple, l'application de la méthode Clear à un objet
Range efface le contenu et la mise en forme des cellules.
- Module : Conteneur de code VBA.

Fev 2011 ORDISWEET | VBA et VB 4


VISUAL BASIC POUR EXCEL 2007
- Objet : Un élément qui vous manipulez avec VBA. Par exemple des plages, graphiques, dessin objets et
ainsi de suite.
- Procédure : Un autre nom pour une macro.
- Propriété : Un aspect particulier d'un objet. Par exemple, un objet Range possède des propriétés, telles
que la hauteur, de style et de nom.
- Procédure Sub : un des deux types de macros Visual Basic que vous pouvez créer. L'autre est une
fonction.
- UserForm : Un conteneur qui possède des contrôles pour une boîte de dialogue personnalisée et détient
code VBA pour manipuler les contrôles.
- VBA : Visual Basic pour Applications. Le langage de macro est disponible dans Excel, ainsi que dans les
autres applications de Microsoft Office.
- VB éditeur : la fenêtre (distincte d'Excel) que vous utilisez pour créer des macros VBA et formulaires
utilisateur.

Fonctionnement de VBA
VBA manipule des objets. Excel contient un grand nombre d'objets: un classeur, une feuille de calcul, une
cellule ou plage de cellules, un graphique, ou un dessin. Vous pouvez les manipuler en utilisant en utilisant
l'Editeur (VBE) et les modules VBA qui regroupent les procédures:
Les procédures SUB(): c'est un code qui exécute une action sans retourner de valeur.
L'exemple suivant est une procédure appelée Bonjour. Ce programme souhaite la bienvenue !
Sub Bonjour()
Texte = « bienvenue dans cette formation»
MsgBox “Bonjour et “ & Texte
End Sub
Les procédures de FONCTION(). Une procédure de fonction renvoie une valeur. Vous pouvez l'appeler
d'une autre procédure VBA ou l'utiliser comme une fonction dans une feuille.
Un exemple de procédure de Fonction (nommé AddTwo) reçoit deux nombres (appelés arguments) et
retourne la somme de ces valeurs.
Function AddTwo(arg1, arg2)
AddTwo = arg1 + arg2
End Function
Les Objets
Les objets sont arrangés dans une hiérarchie. Les objets peuvent contenir d'autres objets.
En haut de l'hiérarchie d'objet, Excel lui-même est un objet appelé Application. L'objet d'Application
contient d'autres objets tels que Classeur ...
L'objet Classeur contient d'autres objets tels que Feuilles de calcul et Graphiques.
Un objet Feuille de calcul peut contenir des objets comme des Sélection et des Tables.
Une Collection
Les objets du même type forment une collection. de Feuilles comprend en tous les Feuilles de calcul dans
le Classeur. La collection de Graphiques comprend tous objets Graphiques dans un Classeur. Les
collections sont aussi des objets.
Vous vous référez à un objet en spécifiant sa position dans l'hiérarchie des objets, utilisant un
point comme séparateur. Par exemple, vous pouvez vous référer au Classeur Classeur1.xlsx de
cette façon :
Application.Workbooks(“Classeur1.xlsx”)

Fev 2011 ORDISWEET | Fonctionnement de VBA 5


VISUAL BASIC POUR EXCEL 2007
Ceci se réfère au Classeur Classeur1.xlsx dans la collection des Classeurs. La collection de
Classeurs est contenue dans l'objet d'Application (c à d Excel). En étendant à un autre niveau,
vous pouvez vous référer à Feuil1 dans Classeur1.xlsx par
Application.Workbooks(“Classeur1.xlsx”).Worksheets(“Feuil1”)
Selon l'exemple suivant, vous pouvez appliquer à un autre niveau et se référer à une cellule
spécifique (ici, la cellule A1) :
Application.Workbooks(“Classeur1.xlsx”).Worksheets(“Feuil1”).Range(“
A1”)
Si vous omettez des références spécifiques, Excel utilise les objets actifs.
Si Classeur1.xlsx est le classeur actif, vous pouvez simplifier la référence précédente comme suit :
Worksheets(“Feuil1”).Range(“A1”)
Si vous savez que Feuil1 est la feuille active, vous pouvez simplifier la référence encore plus :
Range(“A1”)
Les Propriétés.
Vous pouvez penser à une propriété comme un cadre pour un objet.
Par exemple, un objet Range a des propriétés telles que Valeur et Adresse.
Un objet Graphique a les propriétés telles que HasTitle et Type.
Vous pouvez utiliser VBA pour déterminer les propriétés d'un objet et aussi les changer.
Vous vous référez à une propriété d'un objet en combinant le nom de l'objet avec le nom de
propriété, séparé par un point. Par exemple, vous pouvez vous référer à la propriété Valeur
dans la cellule A1 sur Feuil1 comme suit :
Worksheets(“Feuil1”).Range(“A1”).Value
Vous pouvez assigner des valeurs aux variables. Une variable est un élément nommé qui
emmagasine l'information. Vous pouvez utiliser des variables dans votre code VBA pour
emmagasiner les choses telles que valeurs, le texte, ou les propriétés. Pour assigner la valeur de
la cellule A1 dans la feuille Feuil1 à une variable appelée Intérêt, utiliser l'instruction VBA suivante
:
Interest = Worksheets(“Feuil1”).Range(“A1”).Value
Les Méthodes
Les objets font l'objet de traitement appelés méthodes.
C'est une action qu'Excel exécute avec un objet. Par exemple, une des méthodes pour un objet Range est
ClearContents. Cette méthode efface le contenu de la sélection. Vous spécifiez une méthode en
combinant l'objet avec la méthode, séparée par un point.
Par exemple, l’instruction suivante efface les contenus de cellule A1
Worksheets(“Feuil1”).Range(“A1”).ClearContents
VBA inclut toutes les constructions de langages de programmation modernes, y compris les tableaux et les
boucles.

Les entrées et les sorties


Vous avez compris en regardant le code des macros que vous avez enregistrées, qu'il est possible de faire
appel aux cellules d'une feuille de calcul. Vous pouvez ainsi lire la valeur d'une cellule, ou bien la changer.
Il est possible également d'afficher des fenêtres pour saisir ou pour afficher des résultats.

Fev 2011 ORDISWEET | Les entrées et les sorties 6


VISUAL BASIC POUR EXCEL 2007
Vous avez du remarquer que les macros étaient enregistrées dans des modules. Avant de taper un
programme, vous devez créer un nouveau module. Pour cela, aller dans éditeur VB (dans la barre d'outils
VB), ou faite insérer un nouveau module, en fonction de la version de XL dont vous disposez.
Essayer donc de taper cette petite procédure dans un module (ou bien faite un copier coller). Elle affiche
des boites de dialogue de différents formats. Ca peut toujours servir pour rendre l'interface avec
l'utilisateur plus agréable.
Macro formats de boite de dialogue
Public Sub Messages()
' Ceci est une procédure qui affiche différents formats de boite de dialogue.
msg = "Petit message"
titre = "Ma boite a moi"
' Le message normal tout d'abord.
Style = procédures
réponse = MsgBox(msg, Style, titre)
' Le message critique.
Style = procédures + procédures
réponse = MsgBox(msg, Style, titre)
' Le message interrogatif.
Style = procédures + vbQuestion
réponse = MsgBox(msg, Style, titre)
' Le message exclamatif.
Style = procédures + vbExclamation
réponse = MsgBox(msg, Style, titre)
' Le message d'information.
Style = procédures + vbInformation
réponse = MsgBox(msg, Style, titre)
End Sub

La fonction utilisée est MsgBox. Cette fonction utilise des paramètres et elle renvoie une valeur (ici c'est la
variable Réponse qui n'est pas utilisée). Notez que plusieurs types de boites de dialogue sont disponibles,
et qu'il est possible de choisir les boutons (OK est un bouton) a afficher.
Le premier paramètre est le message ou la variable à afficher. Ce peut être une chaîne de caractères
entourée de " " ou une variable numérique. Le second paramètre concerne le type de boite. C'est en fait
une valeur numérique, qui ne peut prendre que certaine valeur. Constater juste les différences entre les
boites, l'explication de l'utilisation de ce type de variables viendra plus tard (Utiliser l'aide si vous ne
voulez pas attendre). Le dernier paramètre que j'utilise est le titre de la boite. Excepté le premier, les
autres paramètres sont facultatifs.
Voyons maintenant comment saisir une valeur. Tapez le code suivant, il permet de saisir une variable. La
variable tapée est affichée grâce a InputBox.
Macro affichage des valeurs saisies à l'aide de la fonction InputBox
Sub SaisieValeur()
' Cette petite procédure saisie des valeurs a l'aide de la fonction InputBox '
Style = procédures + vbInformation
MsgSaisie = "Saisissez votre valeur"
valeur = InputBox(MsgSaisie, " Phase de saisie")

Fev 2011 ORDISWEET | Les entrées et les sorties 7


VISUAL BASIC POUR EXCEL 2007
MsgReponse = "Vous avez tape " & valeur
réponse = MsgBox(MsgReponse, Style, "C'est la réponse")
End Sub

La fonction de saisie est donc InputBox. Cette fonction nécessite également des paramètres, et la valeur
renvoyée est la variable valeur. Le premier paramètre est le message a afficher, il s'agit donc d'une chaîne
de caractères, le second est le titre de la boite. Ce dernier est facultatif.
Notez l'utilisation du caractère &, il permet de créer une chaîne en unissant deux autres chaînes
(concaténation).
Vous voyez qu'il est possible de saisir et d'afficher des variables dans VB, grâce aux fonctions MsgBox et
InputBox. Vous voyez également que la saisie de nombreux paramètres, ou de paramètres de type
particulier (choix dans une liste par exemple), n'est pas très aisée. Vous verrez dans la partie deux,
comment améliorer cela. Il n'a pas non plus été tenu compte du type de variables utilisées (numériques,
alphanumériques, autres types ?).
Voyons comment travailler sur des feuilles de calculs. Vous allez apprendre a écrire sur des feuilles de
calcul, à lire des valeurs qui y sont déjà.
Macro saisie des valeurs a l'aide de la fonction InputBox
Sub EcritFeuille()
' Ce coup-ci, la valeur est saisie a l'aide de InputBox, et est renvoyée dans une feuille
' de calcul.
MsgSaisie = "Saisissez votre valeur"
valeur = InputBox(MsgSaisie, "Phase de saisie")
i = 3
j = 3
Worksheets("Feuil1").Cells(i, j).Value = valeur
End Sub

Visual Basic est un langage orienté objet, ce qui explique la ligne Worksheets("Feuil1").Cells(i, j).Value =
valeur. On fixe la valeur de la cellule i, j de la feuille de calcul Feuil1 à valeur. Il est possible d'écrire, mais
également de lire les valeurs qui sont écrites dans une feuille de calcul.
Macro lire des valeurs dans la feuille
Sub LitFeuille()
' Une valeur dans une des feuilles est lue.
Style = procédures + vbExclamation
i = 3
j = 3
' Ici se fait la lecture.
valeur1 = Worksheets("Feuil1").Cells(i, j).Value
msg = "La cellule C3 a la valeur : " & valeur1
réponse = MsgBox(msg, Style)
' Une chose utile a savoir.
valeur2 = Worksheets("Feuil1").Cells(i, j).Offset(2, 0).Value
msg = "Deux cellules en dessous, il y a " + _
"la valeur : " & valeur2
réponse = MsgBox(msg, Style)

Fev 2011 ORDISWEET | Les entrées et les sorties 8


VISUAL BASIC POUR EXCEL 2007
' Une autre chose d'utile a savoir. N'oubliez pas de vous placer dans la feuille avant de
lancer cette macro!
valeur3 = ActiveCell.Value
msg = "La cellule active a la valeur : " & valeur3
réponse = MsgBox(msg, Style)
End Sub
Pour lire une valeur, la syntaxe ressemble beaucoup à la lecture, sauf que la ligne
Worksheets("Feuil1").Cells(i, j).Value est maintenant placée après le signe égal.
Notez l'utilisation de offset, qui permet de lire une cellule placée à des coordonnées relatives.
Activecell correspond à la cellule active, c'est à dire qui est entourée en gros trait noir au moment
de l'exécution du programme.

Les redirections
Que faire de toutes ces valeurs? Il ne s'agit pas seulement d'écrire et de lire, il faut effectuer des calculs et
des tests. Ce premier programme demande un nombre entre 1 et 10. Si le nombre est correct, alors un
message s'affiche. S'il ne l'est pas, un autre message apparaît alors. L'instruction qui permet de faire ceci
est If.
Macro branchement conditionnel IF
Sub Redirection()
' La commande de redirection est ...If classique, différent de IIf
valeur = InputBox("Saisissez une valeur entre 1 et 10", "Phase de
saisie")
If (valeur >= 1 And valeur <= 10) Then
Style = procédures + vbExclamation
réponse = MsgBox("Correct", Style, "Yeeeesss!")
Else
Style = procédures + procédures
réponse = MsgBox("Incorrect", Style, "Ooouuuups!!")
End If
End Sub
Ce deuxième programme affiche une table de multiplication dans une feuille de calcul. L'instruction For
permet d'effectuer des bouclages, lorsque le nombre d'itération est connu.
Macro multiplication de vecteurs
Sub MulTable()
' Affiche une table de multiplication a l'aide' d'une boucle For ... Next
For i = 1 To 12
For j = 1 To 12
lig = i
col = j
Worksheets("Feuil1").Cells(lig, col).Value = i * j
Next
Next
End Sub
Il peut être intéressant de boucler sans connaître le nombre d'itérations à effectuer. Par exemple
lorsqu'on demande un code, il faut recommencer la saisie autant de fois que le code tapé est faux. Pour
cela, l'instruction Do…Loop While est préférée, comme dans le petit programme suivant.

Fev 2011 ORDISWEET | Les redirections 9


VISUAL BASIC POUR EXCEL 2007
Macro contrôle de code
Sub Code()
' Utiliser Do ... Loop pour faire un code. Recommencer la saisie tant que le code tape ne
correspond pas.
clef = "1234"
Do
valtapee = InputBox("Taper votre code")
Loop While (valtapee <> clef)
réponse = MsgBox("Code accepté")
End Sub
L'instruction If est utile lorsque seuls deux choix sont possibles. Dans le cas de plusieurs possibilités, VB
offre l'instruction Select…Case. Elle permet d'éviter l'empilement de If…Then. C'est souvent
pratique.
Macro sélection multiple
Sub ChoixMult()
' Utilisation de Select ... Case
' Permet d'éviter les If ... Then ... Else imbriqués.
MsgSaisie = "Saisissez une couleur"
valeur = InputBox(MsgSaisie)
Select Case valeur
Case "rouge"
msg = "Couleur de feu."
Case "vert"
msg = "Couleur d'espoir"
Case "bleu"
msg = "Couleur marine"
Case "marron"
msg = "Couleur de terre"
Case "noir"
msg = "Couleur discrète"
Case "violet"
msg = "Couleur de gloire"
Case "orange"
msg = "Couleur gourmande"
Case "rose"
msg = "Couleur tendre"
Case "jaune"
msg = "Couleur exotique"

Case Else
msg = "Je ne connais pas votre couleur"
End Select
Style = procédures + vbExclamation
réponse = MsgBox(msg, Style)
End Sub

Fev 2011 ORDISWEET | Les redirections 10


VISUAL BASIC POUR EXCEL 2007
Macros utiles
Macro supprimer le lignes vides sur XXX enregistrements
Public Sub Suppr_ligne_vide_1()
While ActiveCell.Row < XXX
Select Case ActiveCell.Value
Case Is = ""
ActiveCell.EntireRow.Delete
Case Else
ActiveCell.Offset(1, 0).Select
End Select
Wend
End Sub
-----------------------------------------------------------------------
Public Sub Suppr_ligne_vide_2()
For Each rw In Worksheets("Feuil1").Rows.Range("A1:AXXX")
If ActiveCell.Value = "" Then
ActiveCell.EntireRow.Delete
Else
ActiveCell.Offset(1, 0).Activate
End If
Next rw
End Sub

Macro transposer les lignes A1 à A900 horizontalement pour obtenir un tableau


Sub Transpose()
pas = 1
Range(Cells(1, 1), Cells(5, 1)).Select
Selection.Copy
Range("B1").Select
Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlNone,
SkipBlanks:= _
False, Transpose:=True
For r = 1 To 900
pas = pas + 5
fin = pas + 4
Range(Cells(pas, 1), Cells(fin, 1)).Select
Selection.Copy
Range("B1").Select
ActiveCell.Offset(r, 0).Select
Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlNone,
SkipBlanks:= _
False, Transpose:=True
Next r
End Sub

Fev 2011 ORDISWEET | Macros utiles 11

Vous aimerez peut-être aussi