Excel 2002

Transcription

Excel 2002
Excel
2002
VBA
Programmation
SOMMAIRE
Structures conditionnelles......................................................................................................... 3
A) L'instruction If............................................................................................................................. 3
B) L'instruction If … Then … Else ................................................................................................. 3
C) L'instruction If …Then … Elseif ............................................................................................... 4
D) L'instruction Select Case ............................................................................................................ 4
E) L'instruction Select Case avec regroupement de valeur .......................................................... 5
Structures itératives (boucles) ................................................................................................... 6
A) La boucle "For Each ... Next" ..................................................................................................... 6
1 - Syntaxe....................................................................................................................................................... 6
2 - Pour toutes les feuilles du classeur actif..................................................................................................... 6
3 - Pour toutes les feuilles sélectionnées du classeur de la macro ................................................................... 6
4 - Pour toutes les cellules sélectionnées de la plage....................................................................................... 7
B) La boucle FOR…NEXT .............................................................................................................. 8
1 - Syntaxe....................................................................................................................................................... 8
2 - Exemple ..................................................................................................................................................... 8
3 - Analyse ...................................................................................................................................................... 8
4 - Ecriture du code VBA................................................................................................................................ 9
5 - Autre exercice ............................................................................................................................................ 9
C) La boucle WHILE ..................................................................................................................... 10
1 - Syntaxe..................................................................................................................................................... 10
2 - Exemple ................................................................................................................................................... 10
3 - Analyse .................................................................................................................................................... 11
4 - Ecriture du code VBA.............................................................................................................................. 11
D) La boucle DO … UNTIL........................................................................................................... 12
1 - Syntaxe..................................................................................................................................................... 12
2 - Exemples.................................................................................................................................................. 12
Université de Marne-la-Vallée
Informatique / F. Petit
Excel 2002
Programmation VBA
mai 2008
Page 2
Structures conditionnelles
A) L'instruction If
Cette instruction permet d'exécuter une ou plusieurs instructions lorsqu'une condition
est remplie.
Exemple
Si Age >= 18 Alors
Afficher le message "Personne majeure"
Fin Si
En VBA, le code serait par exemple :
If vAge >= 18 Then
MsgBox "Personne majeure"
End If
B) L'instruction If … Then … Else
Il est possible de prévoir deux actions différentes, l'un pour les personnes majeures,
l'autre pour les personnes mineures.
Exemple :
Si vAge >= 18 Alors
Afficher le message "Personne majeure"
Sinon
Afficher le message "Personne mineure"
Fin Si
Le code est le suivant :
If vAge >= 18 Then
MsgBox "Personne majeure "
Else
MsgBox "Personne mineure"
End If
Voici un code équivalent qui est plus adaptable en cas de modification ultérieure :
If vAge >= 18 Then
message = "Personne majeure "
Else
message = "Personne mineure"
End If
MsgBox message
Exemple : créer la procedure statut( ) qui demande l'age de la personne dans une
boite de saisie et affiche le statut majeur ou mineur.
Université de Marne-la-Vallée
Informatique / F. Petit
Excel 2002
Programmation VBA
mai 2008
Page 3
C) L'instruction If …Then … Elseif
Exemple : créer la procedure rentree( ) qui demande le code de formation et qui affiche
la date de rentrée. La rentrée échelonnée des étudiants est prévue ainsi :
L1
lundi matin
L2
Mardi après-midi
L3
Jeudi matin
M1
Vendredi matin
Exemple :
Si vChoix = "L1" Alors
Le message est " rentrée LUNDI matin"
Sinon Si vChoix = "L2" Alors
Le message est " rentrée MARDI après-midi"
Sinon Si vChoix = "L3" Alors
Le message est " rentrée JEUDI matin"
Sinon
Le message est " rentrée VENDREDI matin"
Fin Si
Le code est le suivant :
If vChoix = "L1" Then
message= " rentrée LUNDI matin"
ElseIf vChoix = "L2" Then
message= " rentrée MARDI après-midi"
ElseIf vChoix = "L3" Then
message= " rentrée JEUDI matin"
Else
message= " rentrée VENDREDI matin"
End If
D) L'instruction Select Case
L'instruction Select Case peut remplacer avantageusement une série de Elseif en
offrant un code plus lisible :
Select Case vChoix
Case "L1"
message = "rentrée LUNDI matin"
Case "L2"
message = "rentrée MARDI après-midi"
Case "L3"
message = "rentrée JEUDI matin"
Case "M1"
message = "rentrée VENDREDI matin"
Case Else
Message= "erreur de code"
End Select
Université de Marne-la-Vallée
Informatique / F. Petit
Excel 2002
Programmation VBA
mai 2008
Page 4
E) L'instruction Select Case avec regroupement de valeur
L'instruction Select case permet les traitements de tranches de valeurs.
Attention aux bornes pour les chiffres décimaux…
vChoix = InputBox("Entrez l'age sous forme d'un entier")
Select Case vChoix
Case 0 To 17
message = "Enfant"
Case 18 To 64
message = "Adulte"
Case 65 To 130
message = "Senior"
Case Else
message = "Vous êtes sur de la saisie ?"
End Select
Université de Marne-la-Vallée
Informatique / F. Petit
Excel 2002
Programmation VBA
mai 2008
Page 5
Structures itératives (boucles)
Les boucles servent à répéter une série d'insctructions.
A) La boucle "For Each ... Next"
1 - Syntaxe
La boucle For Each permet de traiter chaque élément d'une collection d'objets.
La syntaxe est :
For each element In collection
Série d'instructions
Next element
Ou
For each element In collection
Série d'instructions
Next
2 - Pour toutes les feuilles du classeur actif
For each maFeuille In activeworbook.worksheets
Exemple : Sur chaque feuille du classeur actif, mettre en A1 un fond jaune
For Each feuille In activeWorkbook.Worksheets()
feuille.Range("B1").interior.color = vbYellow
Next
3 - Pour toutes les feuilles sélectionnées du classeur de la macro
For each maFeuille In ThisWorbooks.Wdows(1).SelectedSheets
Exemple : Sur chaque feuille sélectionnée du classeur, mettre un fond bleu à la
cellule A1
Université de Marne-la-Vallée
Informatique / F. Petit
Excel 2002
Programmation VBA
mai 2008
Page 6
4 - Pour toutes les cellules sélectionnées de la plage
For Each element In Selection
Exemple : Sur chaque cellule de la plage sélectionnée, mettre un fond rouge
For Each element In Selection
element.Interior.Color = vbRed
Next
Exemple : Sur chaque cellule de la plage sélectionnée, mettre sa référence
For Each element In Selection
element.Value = element.Address
Next
Exemple : Sur chaque cellule de la plage sélectionnée, mettre un n° de cellule (1
puis 2…)
Université de Marne-la-Vallée
Informatique / F. Petit
Excel 2002
Programmation VBA
mai 2008
Page 7
B) La boucle FOR…NEXT
1 - Syntaxe
Cette boucle permet de réaliser une série d'instructions un nombre de fois déterminé
à l'avance.
La syntaxe est la suivante :
For variableCompteur = x To y Step Pas
Série d'instructions
Next variableCompteur
x
y
Pas
représente la valeur initiale
représente la valeur à atteindre
valeur d'incrémentation de la variableCompteur
2 - Exemple
Exemple :
Pour un nombre d'étudiants donné (exemple nb =3) :
- demander le nom de l' étudiant, l'afficher dans la cellule de droite.
- demander sa note, l'afficher dans la cellule à droite
- recommencer pour l'étudiant suivant, une ligne en-dessous.
1
2
3
Durand
Dupont
Martin
15
16
20
3 - Analyse
L'utilisateur sélectionne avant la feuille et la cellule active.
Faire pour un nombre compteur de 1 à 3
Mettre le nombre compteur dans la cellule active.
Sélectionner la cellule suivante située à droite
Demander le nom de l'étudiant et le mettre dans la cellule active
Sélectionner la cellule suivante située à droite
Demander la note de l'étudiant et la mettre dans la cellule active
Changer de ligne pour se placer sur le début de la ligne suivante
Passer au suivant
Université de Marne-la-Vallée
Informatique / F. Petit
Excel 2002
Programmation VBA
mai 2008
Page 8
4 - Ecriture du code VBA
For compteur = 1 To 3
ActiveCell.Value = compteur
ActiveCell.Offset(0, 1).Select
nom = InputBox("Saisir le nom de l'étudiant")
ActiveCell.Value = nom
ActiveCell.Offset(0, 1).Select
note = InputBox("Saisir la note de l'étudiant")
ActiveCell.Value = note
ActiveCell.Offset(1, -2).Select
Next compteur
Exercice : Modifier le code pour que le programme
- affiche dans la boite de saisie le N° de l'étudiant
- demande préalablement à l'utilisateur le nombre total d'étudiants.
Remarque : On peut simplifier l'écriture de :
note = InputBox("Saisir la note de l'étudiant")
ActiveCell.Value = note
en mettant :
ActiveCell.value = InputBox("Saisir la note de l'étudiant")
On peut aussi affecter directement une valeur dans une cellule décalée sans avoir à
sélectionner cette cellule :
ActiveCell.Offset(0, 2).Value = InputBox("Saisir la note de l'étudiant")
Exercice : Ecrire le code pour que le programme
- affiche dans la boite de saisie le N° de l'étudiant
- demande préalablement à l'utilisateur le nombre total d'étudiants.
5-
Autre exercice
Exercice : Ecrire le code qui renomme chaque feuille d'un classeur feuillet x, x étant
sa position dans les onglets du classeur .
nbFeuille = ThisWorkbook.Worksheets.Count
For compteur = 1 To nbFeuille
Worksheets(compteur).Name = "Feuillet " & compteur
Next compteur
Université de Marne-la-Vallée
Informatique / F. Petit
Excel 2002
Programmation VBA
mai 2008
Page 9
C) La boucle WHILE
1 - Syntaxe
La boucle While permet de réaliser une série d'instructions tant qu'une condition est
vérifiée.
La syntaxe est la suivante :
Do While condition
Série d'instructions
Loop
Ou encore
While condition
Série d'instructions
Wend
Remarque : Si la condition n'est jamais vérifiée, la boucle peut être infinie.
Pour interrompre un programme qui tourne, appuyer sur les touches :
Ctrl + Pause
ou
Ctrl + Arrêt défilement
2 - Exemple
Exemple :
S'il y a un nom dans la cellule active :
- demander la note de l'étudiant de cette liste
- l'afficher dans la cellule située 2 colonnes plus loin à droite.
Recommencer pour la cellule du dessous
On a :
1
2
3
Durand
Dupont
Martin
15
16
20
1
2
3
Durand
Dupont
Martin
15
16
20
On obtient :
Université de Marne-la-Vallée
Informatique / F. Petit
Excel 2002
Programmation VBA
10
11
12
mai 2008
Page 10
3 - Analyse
L'utilisateur sélectionne avant la feuille et la cellule active (ex : Durand).
Faire tant que la cellule active n'est pas vide
Demander la note de l'etudiant dont le nom est dans la cellule active
Mettre sa note dans la cellule voulue
Changer de ligne pour se placer sur le début de la ligne suivante
Passer au suivant
4 - Ecriture du code VBA
Do While ActiveCell.value <> Empty
nom = ActiveCell.Value
note = InputBox("Saisir la note de l'étudiant " & nom)
ActiveCell.Offset(0, 2).Value = note
ActiveCell.Offset(1, 0).Select
Loop
Remarque : si la cellule contient des espaces, elle n'est pas vide !
Trim() est une fonction qui supprime les espaces situés à drote et à
gauche d'une chaîne de caractères.
On écrira par exemple : Trim(ActiveCell.Value)
Exercice : Modifier le code pour que le programme :
- demande le prénom d'un étudiant dont il affiche le nom
- insère une cellule dans lequel on place le prénom.
1
2
3
Durand
Dupont
Martin
Jean
Louis
Line
15
16
20
10
11
12
1
2
3
Durand
Dupont
Martin
Jean
Louis
Line
15
16
20
10
11
12
Pour trouver comment se fait une action en VBA, on peut déclencher
l'enregistrement d'une macro, faire l'action (ici insérer une cellule) puis 'étudier le
code enregistré.
L'ajout d'une cellule se fait avec la méthode : .Insert (xlToRight)
L'ajout se fait à gauche de la cellule indiquée.
xlToRight indique le sens du décalage des cellules restantes
Université de Marne-la-Vallée
Informatique / F. Petit
Excel 2002
Programmation VBA
mai 2008
Page 11
D) La boucle DO … UNTIL
1 - Syntaxe
Cette boucle permet de réaliser une série d'instructions jusqu'à ce qu'une condition
soit vérifiée.
La syntaxe est la suivante :
Do Until condition
Série d'instructions
Loop
2 - Exemples
Exemple :
Faire jusqu'à ce que la cellule de la colonne Nom soit vide,
- mettre en majuscules le nom
Exemple :
Afficher la 1ère lettre du nom et la première lettre du prénom dans une colonne libre
de la même ligne
On a
1
2
3
Durand
Dupont
Martin
1
2
3
Durand
Dupont
Martin
Jean
Line
15
16
20
10
11
12
15
16
20
10
11
12
On obtient
Jean
Line
DJ
D
ML
Ucase(chaine) est une fonction qui renvoie la chaine considérée mise en
majuscules.
Left(chaine, x) est une fonction qui renvoie une chaine comprenant les x caracteres
à gauche de la chaine considérée.
Université de Marne-la-Vallée
Informatique / F. Petit
Excel 2002
Programmation VBA
mai 2008
Page 12

Documents pareils