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