Saisie du contenu : - dans la cellule elle-mme - dans la barre des formules
Figure 2
Validation avec : Entre, ! , cliquer sur une autre cellule
Correction avec : la barre des formules
Annulation de la dernire modification : cliquer sur la croix rouge
Suppression : - slectionner les cellules (touche CTRL enfonce si non connexes) puis - utiliser la touche clavier Suppr ou bien - Dans la barre Menu : Edition/Effacer (tout ou formules)
Fusion : Format/cellule/Alignement/fusionner
Dplacer une plage de cellules : slectionner la plage ; cliquer avec le bouton droit sur lun des quatre bords ; dplacer la plage bouton enfonc ; lacher le bouton lemplacement dsir.
Copier une plage de cellules : utiliser la poigne de copie (voir plus loin, la propagation) ou slectionner la plage avec la souris, taper la donne dans lune des cellules et faire CTRL + ENTREE.
Intersection de plages de cellules : utiliser la touche espace du clavier comme oprateur dintersection. Elles ne fonctionnent pas avec les rfrences 3D (voir plus loin).
Figure 3
Note. Le signe : dsigne un intervalle et le signe ; spare des lments.
Menu Contextuel et Format :
Affichage du menu contextuel de la cellule avant et aprs validation.
Afin quapparaisse le menu contextuel, se placer lintrieur de la cellule et cliquer sur le bouton droit de la souris. Ci-dessous, le contenu de la cellule nest pas encore valid.
Dans cette figure, le contenu de la cellule a t valid. Le menu contextuel a t modifi et le contenu de la cellule a t interprt par Excel. On note la diffrence entre laffichage dans la cellule et le contenu de la barre des formules.
Figure 5
En demandant le Format dans le menu contextuel, nous observons celui choisit par dfaut par Excel. Il est possible alors de le modifier.
Dans Outil/Options/Gnral, nous changeons pour adopter un autre systme que $A$1. Nous lui prfrerons le systme matriciel L1C1 (voir Figure 7).
Dans ce systme matriciel, sont dfinis trois types de rfrences :
Rfrence absolue : LiCj dsigne la cellule ligne i colonne j
Si la cellule active est LiCj alors pour deux entiers relatifs k et l
Rfrence relative : L(k)C(l) dsigne la cellule ligne i+k colonne j+l Rfrence mixte : L(k)Cl dsigne la cellule ligne i+ k colonne l.
Figure 7
Astuce : Pour passer dune rfrence lautre automatiquement, tapez sur F4 lorsque La cellule ou le groupe de cellules est slectionn.
Note : - Par dfaut, les noms utilisent toujours des rfrences absolues aux cellules. - Dans lautre mode, $A$1 est une rfrence absolue et A1 est une rfrence relative. - voir Outils/Options/Formules.
Rfrence une feuille et un classeur
[NomClasseur]NomFeuille !PlageCellules
Exemple : [NotesPremierSemestre]Feuil2 !L1C1:L4C4
La mise jour est ralise si le classeur contenant la liaison est ouvert. Si le classeur source (contenant les donnes) nest pas ouvert, il faut rfrencer en donnant le chemin : "C:\...\...\ [NomClasseur]NomFeuille !PlageCellules" .
Rfrence 3D : NomFeuille1 : NomFeuille2 !
Contenu dune cellule
! Les valeurs ISUP - UMPC VBA & EXCEL & ACCESS 1-9 Annick Valibouze 22/01/2010 Les diffrents types sont : Boolen : VRAI ou FAUX avec un affichage centr. Un nombre entier ou rel : 12 ou 12,7 (voir les formats) avec affichage droite. Une date, une heure (voir formats) avec affichage droite. Un texte avec affichage gauche. ! Les formules Chaque cellule peut tre le rsultat dune formule. Une formule commence par le signe =. Elle peut utiliser " Des oprateurs arithmtiques : +, -, *, / " Des oprateurs de comparaisons : <, <=, >=, =, <> " Des oprateurs boolens : ET, OU, NON " Des fonctions : Des fonctions prdfinies apparaissent dans la zone nom si on clique sur sa flche.
Figure 8
La moyenne est slectionne et Excel nous propose la liste des cellules sur lesquelles soprera cette moyenne : de la cellule C(-3) la cellule C(-1) de la mme ligne. Astucieusement, Excel propose les formules avec des rfrences relatives.
Figure 9
Une fois valid : le contenu de la cellule affiche lvaluation de la fonction alors que la barre des formules affiche son corps.
Pour viter de rpter la formule sur toute la colonne, on utilise la propagation de valeurs ou de formules en activant la cellule o est enregistre la formule et en dfinissant la zone de propagation en cliquant sur le carr noir en bas droite de la cellule (la poigne de copie) et en propageant en tenant le bouton gauche appuy ; puis Copier les cellules .
Figure 13
Note : pour faire apparatre le menu de copie, il faut cliquer sur la poigne avec le bouton droit et tirer dessus.
Utilisations de la zone : supprimer tout son contenu propager une formule ou une valeur propager linairement (i.e. le long dune ligne ou le long dune colonne) une srie ; Excel interprte 2 puis 4 comme la suite ;
Note. Vous pouvez renommer cette feuille 1 en NotesPremierSemestre : cliquez gauche sur le nom Feuille 1 en bas de la feuille puis choisir Renommer .
Donner et utiliser un Nom
Montrons ci-dessous comment nommer Admissibilit toutes les cellules de la colonne C5. Slectionner la colonne puis Aller dans Insertion/Nom/Dfinir (ou bien CTRL+F3).
Figure 14
ISUP VBA & EXCEL & ACCESS 1-12 Annick Valibouze 22/01/2010 De la mme manire, les cellules de la colonne C4 sont dfinies avec le nom Moyenne . Nous pouvons alors utiliser ce nom dans les fonctions en remplacement de la rfrence la cellule. La formule dadmissibilit de L2C5 est modifie en remplaant LC(-1) par Moyenne ; cette formule est propage dans les lignes du dessous dans la colonne C5.
Figure 15
On peut de la mme faon ne nommer quune cellule ou une ligne.
Notes : - pas de distinction entre majuscule et minuscule. - utilisent par dfaut des rfrences absolues aux cellules.
Etiquettes pour les formules
Il est possible dutiliser les titres, appeles tiquettes, figurant en tte des lignes ou des colonnes. Par dfaut Excel ne reconnat pas les tiquettes dans les formules. Pour cela, dans Outils/Options/Calcul activer Accepter les tiquettes dans les formules. Dans notre exemple, supprimons le nom Moyenne et tiquetons la colonne C5.
Figure 16
Excel considre que le Moyenne du Si est encore le nom. La balise active nous claire sur cette erreur. Il faut ressaisir Moyenne dans le Si.
Une fois la formule propage (voir au-dessus), nous obtenons le tableau suivant :
Moyenne El Braim 15 18 14,00 15,6666667 Admis Ulmer 14 8 12,50 11,5 Admis Morales 3 7 14,00 8 Non Admis Bledian 5 10 8,00 7,66666667 Non Admis
Notes : - voir aussi Insertion/Nom/Etiquette pour ajouter une plage dtiquettes. - il est possible de rentrer un nombre en tant que texte ou tiquette.
Les tris prdfinis
Nous avons insr une colonne afin dy rentrer les noms des lves (Insertion dans menu contextuel de la colonne 1) ; cette opration aurait pu se faire aprs le tri. Nous dsirons trier les lves selon la colonne (du haut vers le bas) des moyennes (colonne 5). Nous slectionnons auparavant la zone de tri puis Donnes/Trier. Le tri sopre automatiquement. Si des notes sont modifies, il sappliquera avec la modification.
Figure 19
Figure 20
Exercice. Trier en fonction de lordre alphabtique des noms dlves.
Les graphiques
Ralisons un histogramme des lves. Pour ce faire, nous utilisons les graphiques. ISUP VBA & EXCEL & ACCESS 1-14 Annick Valibouze 22/01/2010 Pour quune feuille graphique se ralise automatiquement, il faut slectionner la plage de cellules puis taper sur la touche F11. Pour obtenir des graphiques personnaliss nous allons procder comme dcrit par la suite. Nous allons dans Affichage/Barre doutils/Graphique :
Figure 21
Crons une zone graphique en cliquant sur longlet type graphique et dplaons cette zone dans la feuille laide du Copier/Coller.
Figure 22
Nous rentrons dans le menu contextuel de cette zone : ISUP - UMPC VBA & EXCEL & ACCESS 1-15 Annick Valibouze 22/01/2010
Figure 23
Nous choisissons notre type graphique :
Figure 24
Nous slectionnons notre plage de donnes (Donnes Sources) : ISUP VBA & EXCEL & ACCESS 1-16 Annick Valibouze 22/01/2010
Figure 25
Figure 26
Lorsque la plage de donnes est slectionne (faire Entre), une fentre reprsentant le graphique apparat. Choisir srie pour slectionner, ventuellement, laxe des abscisses. Si celui propos par dfaut convient alors faire OK sinon le slectionner (toujours de la mme manire : la souris ou en rentrant la main ).
Figure 27
ISUP - UMPC VBA & EXCEL & ACCESS 1-17 Annick Valibouze 22/01/2010 Terminer avec OK.
Figure 28
NOTES
1. Copier/Coller : Seules les formules sont copies. Pour copier seulement une valeur, garder Le clic droit enfonc en vous mettant sur le bord de la cellule, dplacez-vous sur la cellule devant recevoir la valeur, lchez le clic et choisissez ce que vous voulez copier. Pour dsactiver la cellule que vous avez copie, faites ENTREE.
2. Faire afficher les dpendances : OUTILS/AUDIT DES FORMULES 3. Faire afficher les formules la place des rsultats : dans OUTILS/AUDIT DES FORMULES choisir Mode Audit des formules (ou bien directement CTRL+ "). 4. Ajuster une colonne : voir FORMAT 5. Se dplacer parmi des cellules slectionnes : TAB ; MAJ + TAB ; ENTREE ; MAJ ENTREE
EXERCICES ( rendre imprativement au prochain cours)
1. Utilisez la propagation pour faire afficher tous les mois de lanne. Attention : avec la propagation, certaines donnes peuvent tre effaces. 2. Ralisez un histogramme sur la moyenne gnrale des lves. 3. Gnrez dans une colonne des nombres alatoires ; puis dans la colonne suivante calculez -1/2*ln(cellule prcdente). Dans une cellule, calculer le max des valeurs de la deuxime colonne. Puis recopier cette dernire cellule pour calculer le maximum de nouvelles valeurs (la fonction alea() est recalcule automatiquement). Que ce passe-t-il ? Que proposez-vous pour y remdier ? 4. Utilisez le cours pour crer les tables daddition et de multiplication dans le corps Z/7Z. Vous utiliserez la propagation pour inscrire sur une ligne 0,,6 et de mme sur la colonne. Vous utilisez les fonctions (la fonction MOD qui retourne le reste de la division entire) pour calculer i+j modulo 7 (idem pour *). Vous propagerez ensuite la formule. Vous changerez aussi le Format des colonnes avec le mode audit des formules. Vous navez donc pas grand-chose faire. Pour laddition vous obtiendrez le tableau TAB 1. 5. Refaire lexercice prcdent en nommant la ligne des titres et la colonne des titres. La formule sera alors le produit de ces noms modulo 7.
Reprenons notre exemple de notes dlves. Nous recherchons la frquence des notes avec les 7 intervalles : [0,5],]5,7],]7,10],]10,12],]12,15],]15,18],]18,20]. Nous devons slectionner lespace de cellules o apparatra le rsultat sous forme de vecteur colonne dans . Nous tapons = dedans car la forme matricielle que nous nous apprtons calculer est le rsultat dune fonction, la fonction FREQUENCE. Le symbole = a pour effet de rendre accessibles des fonctions travers la zone nom. La fonction FREQUENCE est une de celles proposes par dfaut.
Figure 29
Figure 30
Dans la zone nom, slectionnons la fonction FREQUENCE. Nous rentrons le tableau des donnes (i.e. Tableau_donnes) ; comme elles sont dans la feuille, nous les slectionnons la souris pour le dterminer. Nous rentrons la Matrice_intervalles la main mais nous aurions pu utiliser la mme mthode que pour le tableau des donnes si ces valeurs avaient t celles de cellules adjacentes. ISUP VBA & EXCEL & ACCESS 2-20 Annick Valibouze 22/01/2010
Figure 31
Pour que cette fonction soit enregistre comme une forme matricielle, il faut valider avec CTRL + MAJ + ENTREE. Le contenu de la barre des formules est entour daccolades. Il y a 1 note infrieure 5, 1 note dans ]5,7], 3 dans ]7,10],
Figure 32
Notes : - les paramtres des fonctions sont spars par des points virgules. - nous avions slectionn trop de lignes. Vous ne pourrez plus rien y faire. La dimension restera fixe. Si vous chercher changer une cellule de la matrice et quExcel vous linterdit, vous serez certainement amen vous servir de la croix rouge de la barre des formules pour vous dbloquer.
Nous pouvons alors construire lhistogramme. Nous introduisons les valeurs 5,7,10,12,15,18 dans G1 :G6. Nous slectionnons la plage de donnes la souris (i.e. G1 :F7). Avec Insertion/Graphique (ou bien F11), nous choisissons le premier type dhistogramme. Dans lassistant, nous choisissons des titres.
Nous slectionnons la srie 1. Nous indexons les intervalles (i.e. en ne prenant que le vecteur frquence F1 :F7 comme donne) ; puis nous tenons compte des intervalles (en slectionnant G1 :G6 pour les abscisses). Nous supprimons la srie 2.
Les diffrents formats de la reprsentation graphique : Nous dsirons modifier la largeur des intervalles sur le graphique. Dans la barre graphique, nous slection notre srie : srie 1. Puis nous cliquons sur longlet Format de la srie de donnes pour faire apparatre son format.
Figure 36
Nous choisissons 0 dans Options/Largeur dintervalle.
Figure 37
Le Solveur
Excel dispose dun solveur permettant de rsoudre des systmes linaires dquations et des programmes doptimisation. La feuille de calcul doit contenir : # Des cellules qui contiendront les valeurs des variables en fin de rsolution (les cellules variables) # Des cellules fonctions contenant les fonctions des variables ; ce seront soit des fonctions objectif, soit des contraintes.
Voici donc ce que devra contenir votre feuille de calcul pour rsoudre le systme : X+3Y= 12 et X+4Y=-1. ISUP - UMPC VBA & EXCEL & ACCESS 2-23 Annick Valibouze 22/01/2010
Figure 38
Ensuite dans Outils/Solveur dfinissez la cellule cible, les cellules variables et les contraintes.
Figure 39
Note : Si Solveur nest pas dans Outils, linstaller avec Outils/Macros Complmentaires. Tapez Solveur dans Recherche pour en savoir plus.
Graphe de dpendances
Un graphe orient est compos de sommets et darcs orients. Si a et b sont des sommets, tels que a $b soit un arc, a est appel un prdcesseur (i.e. un antcdent) de b et b est appel un successeur (i.e. un dpendant) de a. Un chemin dans un graphe orient est une suite de sommets tels quil existe toujours un arc dun lment de la suite vers le suivant. Un cycle est un chemin dont le premier et le dernier lment sont identiques.
Nous avons vu que des cellules dpendent dautres cellules. Cela peut se traduire par un graphe de dpendances. Les graphes de dpendances sont orients et heureusement acycliques.
Pour faire apparatre les cellules dont une cellule dpend et celles qui en dpendent, nous irons dans Outils/Audit des Formules. Pour simplifier les manipulations, slectionnons Afficher la barre doutils Audit des formules.
Pour faire afficher toutes les dpendances : entrons = dans une cellule vide puis slectionnons la zone de cellules pour laquelle doivent safficher les dpendances et terminons en cliquant autant de fois que ncessaire (pour faire apparatre les dpendances des diffrents niveaux) sur Reprer les Antcdents. ISUP VBA & EXCEL & ACCESS 2-24 Annick Valibouze 22/01/2010
Note. Quand on modifie une formule, il faut mettre jour le graphe de dpendance.
Figure 40
Note. Pour afficher un commentaire, dans la barre Audit de formules choisir Nouveau Commentaire ou bien dans le menu contextuel ou bien avec la touche ALT+F2. Pour afficher ou masquer des commentaires et leurs indicateurs, aller dans Outils/Options/Affichage. Pour effacer un commentaire, slectionner la cellule puis aller dans Edition/Effacer/commentaire.
Les fonctions statistiques dExcel
Un certain nombre de fonctions ont dj t tudies. Certaines, comme la somme, sont directement applicables depuis la barre doutil standard (symbole "), dautres depuis la zone nom (ex. SI, SOMME.SI, FREQUENCE, MOYENNE, SOMME, Autres fonctions), dautres depuis Outils/Macro (voir plus loin) ou bien Outils/Macros Complmentaires (voir Complment Solveur). Si la syntaxe de la fonction est connue, il est toujours possible de la saisir dans la barre des formules.
Voici comment accder aux fonctions prdfinies : Dans la zone nom slectionner Autres fonctions et dans Insrer une fonction slectionner La catgorie Statistiques ou Finances :
Figure 41
ISUP - UMPC VBA & EXCEL & ACCESS 2-25 Annick Valibouze 22/01/2010 Figure 42 Les Bases de donnes
Utilisons les donnes dappart.xls. Nous avons la colonne tiquete prix, la colonne tiquete surface et nous rajoutons une colonne ( calculer avec = A2 /B2) : prix/m^2. Allons dans Donnes/Formulaire :
Figure 43 Nous passons dune fiche la suivante ; nous pouvons modifier des donnes sauf celles dj calcules ; balayer les fiches selon des critres :
Figure 44 EN slectionnant Donnes/Filtrer/Filtre automatique, Excel place des flches de liste droulante sous les tiquettes de la base :
Figure 45 Choisissons avec un filtre personnalis les appartements moins de 21 euros de mtre carr :
Figure 46 Pour annuler tous les critre la fois : Donnes/Filtrer/Afficher tout.
Pour laborer des filtres plus complexes : recopier la ligne (resp. colonne) des tiquettes (laisser au moins une ligne despace) ; dfinir les critres en dessous ; cliquer sur une des cellules de la plages (ici $A$1:$C$29) puis slectionner Donnes/Filtrer/Filtre labor :
Figure 47
Figure 48
Figure 49
Attention : les numios ue lignes n'ont pas changs. Essayons ue calculei la moyenne ues valeuis filties uans la colonne C en les slectionnant la souiis : nous tiouvons une moyenne 2S euios 68 qui est supiieuie 21. C'est la moyenne ues cellules CS C24, mme celles non appaientes, qui est faite.
Les tableaux croiss
ISUP - UMPC VBA & EXCEL & ACCESS 2-27 Annick Valibouze 22/01/2010 Ils constituent une mthode dynamique danalyse et dexploitation des donnes saisies. LAssistant utilise des donnes dune feuille de calcul ou dune liste ou dune liste de donnes existante ; on peut exploiter des donnes provenant de sources externes (Access, dBase, ). Les domaines dapplication les plus courants sont : les rapports de suivi de ventes, les analyses de stock, les statistiques du personnel, lexploitation de relevs statistiques,
Vous pourrez retrouver une partie de ce qui suit dans le livre Excel 2003 de Jack Steiner diter chez Eyrolles.
Avec Donnes/Rapport de tableau crois dynamique, souvre la boite de dialogue
Figure 50
Nous slection Liste ou base de donnes Microsoft Office Excel et Tableau crois dynamique ; puis nous cliquons sur Suivant. Dans la boite de dialogue suivante, une plage de cellule est propose par dfaut. Cest notre tableau qui est propos. Nous choisissons ensuite si le tableau doit tre ralis dans le mme feuille ou dans une autre. Nous arrivons alors cette tape :
Si nous cliquons sur Disposition, souvre alors une boite de dialogue reprsentant le modle du tableau dynamique. Nous faisons glisser les onglets Rgl, Client, Date et Montant HT, comme ci-dessous :
Figure 52
Note : Quand on slectionne longlet Montant HT et quon le place dans la zone Donnes, nous obtenons automatiquement Somme de Montant. Tapons OK ; puis Terminer. Comme nous lavons spcifi, nous obtenons dans une nouvelle feuille le tableau suivant :
Figure 53
Apparat galement la barre doutils des tableaux croiss dynamiques.
Figure 54
Comme nous le constatons lors du cours, il est impossible de modifier les valeurs dans ce tableau. Seul le tableau source est modifiable. Cependant, si nous modifions une valeur du ISUP - UMPC VBA & EXCEL & ACCESS 2-29 Annick Valibouze 22/01/2010 tableau source, ce tableau nest pas actualis. Il faut utiliser longlet Actualiser les donnes de la boite de dialogue ou par le menu contextuel du tableau dynamique :
Figure 55
On peut faire glisser les champs et trier ainsi autrement (voir dmo en cours) :
Somme de Montant HT Client Rgl Date Al Am Bm Cp Fg Mg Rcp Rs Uf Wn Total Non 29/09/2003 150 150 30/09/2003 1500 1500 01/10/2003 820 650 1470 26/09/2005 200 200 02/10/2005 28 28 Total Non 820 200 1500 28 800 3348 Oui 26/09/2003 100 100 28/09/2003 350 350 29/09/2003 550 600 1150 30/09/2003 700 700 01/10/2003 120 120 15/09/2005 1000 1000 Total Oui 1350 800 550 120 600 3420 Total 1350 820 200 800 550 1500 120 600 28 800 6768
Note : nous verrons en cours que nous pouvons aussi choisir la disposition aprs en avoir terminer avec lassistant.
Les Macros
Excel vous offre la possibilit dutiliser des macros.
En programmation, une macro diffre dune fonction, en ce sens que cest le texte de son corps qui est dabord valu. Une fonction prend des paramtres rels et selon son processus de liaison avec les paramtres formels, elle les associe, puis value son corps dans lenvironnement de cette association. Pour les macros, cest diffrent. Une pr-valuation du corps est effectue avant la premire excution ; ce qui empche toute association des paramtres formels aux valeurs des paramtres rels qui ce stade sont inconnus. Selon les langages, les macros prennent diffrentes formes et respectent diffrentes rgles. Nous les tudierons dans la prochaine partie de ce cours.
1. Calculer la moyenne, lcart-type avec les modalits {0,1,2,,20} et faire afficher lhistogramme de la frquence pour des valeurs prises entre 0 et 20. 2. Faire le tour de ces fonctions et en appliquer quelques-unes. En particulier, utiliser DROITEREG(), CROISSANCE() et rendre des exemples personnels traits (travail individuel ; donc aucun exemple en commun). 3. Utilisez le solveur pour rsoudre le problme : Max((x-y)(z+y)) sous les contraintes x+2y<3 ; x,y,z >0 ; x< 50 ;
Afin de faciliter votre CR dexercices : utiliser Edition/Presse-papier Office permettant de rcuprer des copies dcran dans Word ou des copies dExcel Word. Pour rogner les images : Affichage/Barres doutils/Image ; cliquer sur limage puis utiliser longlet rogner de la barre Image en tirant sur les poignes situes aux quatre coins de limage et au centre des cots (poignes dhomothtie de limage si on ne rogne pas).
Barre d'outils Image
ISUP - UMPC VBA & EXCEL & ACCESS 3-31 Annick Valibouze 22/01/2010 "FGHIJKL 7 Enregistrer et Modifier des macros
Note. A partir de ce chapitre, certaines parties seront inspires du livre de Mikal Bidault (EXEL & VBA 2003 2000/XP ; CampusPress ; www.pearsoneducation.fr).
Quest-ce quune macro en programmation ?
En programmation, une macro diffre dune fonction, en ce sens que cest le texte de son corps qui est dabord valu. Une fonction prend des paramtres rels et selon son processus de liaison avec les paramtres formels, elle les associe, puis value son corps dans lenvironnement de cette association. Pour les macros, cest diffrent. Une pr-valuation du corps est effectue avant la premire excution ; ce qui empche toute association des paramtres formels aux valeurs des paramtres rels qui ce stade sont inconnus. Selon les langages, les macros prennent diffrentes formes et respectent diffrentes rgles.
Le code est le texte crit dans le langage de programmation. Le codage est la gnration du code.
Excel et les macros
Excel vous offre la possibilit dutiliser des macros. Les commandes Excel (lapplication hte), les barres doutils, les raccourcis clavier, les dplacements dans un classeur, la modification du classeur peuvent tre enregistres pour coder une macro.
Le codage dune macro Excel est ralisable de deux faons diffrentes :
# Par enregistrement de macros ; # avec la fentre code de Visual Basic Editor.
Ce chapitre sappliquera vous expliquer lutilisation de lenregistreur de macros. Nous aborderons VBA (Visual Basic pour Application) dans les chapitres suivants aprs vous avoir initi la philosophie des langages objets.
Enregistrement de macros
La mthode que nous allons suivre est : A. Dclenchement de lEnregistreur de macros. B. Enregistrer le code de la macro.
A. Dclenchement de lEnregistreur de macros
1) Slectionner une cellule (de rfrence) laquelle sera attribue la suite de commandes (i.e. le codage de la macro). 2) Avec Outil/Macro/Nouvelle Macro (ou bien Alt + F8) ouvrir la boite de dialogue Enregistrer une macro : ISUP VBA & EXCEL & ACCESS 3-32 Annick Valibouze 22/01/2010
Figure 56
3) Choisir un nom (qui ait un sens). 4) Ecrire la description. 5) Saisir une lettre pour la Touche de raccourci. Si la lettre est b (resp. B), CTRL b (resp. B) dclenchera lexcution de la macro. Attention de ne pas craser une touche de raccourci dj existante ! (on pourra la modifier ultrieurement en slectionnant le nom de la macro dans Outils/Macro puis en cliquant sur Options)
Figure 57
6) Cliquer sur OK. La barre doutils Arrt de lenregistrement saffiche lcran indiquant que lenregistrement de la macro est commenc :
Slectionner la cellule laquelle doit sappliquer la macro et excuter la macro dans Outil/Macro/Macros (ou bien, utiliser le raccourci CRTL b).
Figure 60
Notes 1. Scurit et macros : Outils/Macro/Scurit
Figure 61
Voir le code de la macro en VBA
# Outils/Macro/ # Slectionnez la macro # Cliquez sur Modifier
Nous ouvrons ainsi Visual Basic et nous avons accs au code de la macro. ISUP VBA & EXCEL & ACCESS 3-34 Annick Valibouze 22/01/2010
Figure 62 Nous constatons que - le mode LiCi (RiCi, dans VBA) est repr avec FoimulaR1C1 - AvERAuE (pour Moyenne) est mal appliqu - Que seule la cellule active (i.e. ActiveCell) peut accepter la macro ce qui nous empche de lexcuter des plages de cellules slectionnes (i.e. Selection).
Nous modifions simplement le code (voir dmo en cours) pour obtenir le code suivant :
Sub NaxBesNotes() ' ' NaxBesNotes Nacio ' Nacio eniegistie le 11u72uuS pai caio ' ' Touche ue iaccouici uu claviei: Ctil+b ' Selection.FoimulaR1C1 = "=NAX(AvERAuE(RC|-2j:RC|-1j),RC|-1j)" Enu Sub
qui sapplique une plage de cellules (voir dmo en cours). Vous serez souvent amens modifier des macros car elles ne ralisent pas exactement ce que vous attendiez.
Un autre exemple
Nous dfinissons la macro GrasItalique qui par la Touche CTRL+e transforme en gras et italique le contenu de la cellule slectionne. Nous procdons comme pour la macro prcdente en cliquant sur le G et le I situs sur la barre doutils standard. Il est possible dappliquer cette macro toute une plage de cellules slectionnes.
Si nous appliquons cette macro aux cellules L3C1 et L4C1 dun autre format que celui de la cellule L3C2 de rfrence pour la cration de la macro, leur format nest pas modifi. Sil ltait, il faudrait modifier des lignes du corps de la macro sous Visual Basic. Voici le corps de cette macro
Sub uiasItalique() ' uiasItalique Nacio ' Nacio eniegistie le 24u82uuS pai caio ' Touche ue iaccouici uu claviei: Ctil+e Selection.Font.Bolu = Tiue Selection.Font.Italic = Tiue Enu Sub
Enregistrons dsormais une macro appele GrasItalique2 en choisissant Gras Italique dans la boite de dialogue Format/cellule :
Figure 64 Si nous appliquons cette nouvelle macro la cellule L3C1 dont la taille est de 18 points, sa taille est rduite 10 points, celle la cellule de rfrence de dfinition de la macro GrasItalique2. Regardons le corps de cette macro :
Si nous ne gardons que .FontStyle = "uias italique" comme proprit de lobjet Selection.Font les tailles ne seront plus modifies.
Note : pas diffrence entre majuscules et minuscules : Font et font, cest idem. VBA remplace automatiquement les initiales dun mot en majuscule si ce mot est connu.
Accessibilit des macros
Macros personnelles (.xls)
Lors de lenregistrement dune macro, la porte est propose : ce classeur (voir Figure 2). Ce classeur devra tre ouvert pour toute action avec cette macro. Pour que la porte soit globale, il faut lenregistrer dans un classeur de macros personnelles appel PERS0.XLS. Ce classeur est cr lors de lenregistrement de la premire macro personnelle ou plus exactement aprs avoir quitt Excel (dmonstration durant le cours). Pour le faire afficher : Afficher/Perso.xls. Consulter : C:\Documents and Settings\nom_login\Application Data\Microsoft\Excel\XLS-START\
Macros complmentaires (.xla)
Ce type de macros est adapt la distribution. Les classeurs sont chargeables (pas ouverts) et donc accessibles au lancement de lapplication.
Enregistrement de macros complmentaires Instructions dclarant (et dlimitant) uiasItalique2 comme un sous-programme de lapplication hte proprit de lobjet Selection.Font
Nom de la mthode (la fonction) liste des paramtres formels commentaires Sub uiasItalique2() ' uiasItalique2 Nacio ' Nacio eniegistie le 24u82uuS pai caio ' Touche ue iaccouici uu claviei: Ctil+Naj+E With Selection.Font .Name = "Aiial" .FontStyle = "uias italique" .Size = 1u .Stiikethiough = False .Supeisciipt = False .Subsciipt = False .0utlineFont = False .Shauow = False .0nueiline = xl0nueilineStyleNone .ColoiInuex = xlAutomatic Enu With Enu Sub Instructions dsignant lobjet considr
- dans VBA, ouvrir un module projet (ici MaxDesNotes) et choisir Debogage/CompilerVBAProject - dans Excel, Fichier/Proprits/Rsum
Figure 65 - choisir Fichier/Enregistrer sous Dans la zone Type de fichier, slectionner Macro complmentaire Microsoft Excel (*.xla). Le fichier Windows\Application Data\Microsoft\Macros complmentaires est activ par dfaut. - Choisir un nom et Enregistrez.
Activer/Dsactiver une macro complmentaire
Dans Outils/Macros complmentaires
Figure 66
Note : si une macro complmentaire intgre Excel nest pas disponible, il faut relancer linstallation dOffice et linstaller. (Windows : Dmarrer/Programmes/Ajout/Suppressions de programmes/Office/Ajouter/Supprimer des composants).
EXERCICE 1 ( rendre)
Considrons le tableau suivant provenant du livre Mthodes Statistiques en Gestion de Michel Tenenhaus (Chapitre 4, DUNOD, 1994).
En vous reportant au livre sus-cit, vous rpondrez aux questions suivantes en dtaillant ce que vous avez fait pour parvenir vos rsultats : 1. Calculez la droite des moindres carrs et comparez votre rsultat celui de la fonction prdfinie DROITEREG. 2. Calculez (sans macros) les erreurs et les leviers (voir pages 60 et 63). 3. Sortir les graphiques de la figure 2, page 61. 4. Faire afficher le graphe des dpendances. 5. Refaites les questions 1 et 2 en dfinissant des macros et en faisant afficher leur code. 6. Enregistrez votre macro calculant la droite des moindres carrs comme macro complmentaire.
Vous afficherez les tableaux sous deux formes : celle sans les formules, celle avec les formules.
Note : une large utilisation des notions vues dans ce cours sera apprcie par le correcteur.
EXERCICE 2 ( rendre)
Revenons lexercice maximum des -1/2ln(alea()) du premier cours. Nous voulons automatiser cette action. 1. Enregistrez une macro Copievaleui qui ralise une copie valeur dune cellule (contenant ventuellement une formule) dans une autre cellule. 2. Modifier le code de la macro afin de retirer tout ce qui est inutile et comprendre ainsi ce que chaque instruction signifie. Vous obtenez ainsi la macro CopievaleuiNou. ISUP - UMPC VBA & EXCEL & ACCESS 3-39 Annick Valibouze 22/01/2010 3. Ecrire enfin la macro Copievaleuis qui recopie 20 fois la valeur de la cellule initiale (i.e. sans la formule) et lappliquer lexercice sur alea() du cours 1. (Note : vous devrez chercher la syntaxe de la boucle Foi).
ISUP - UMPC VBA & EXCEL & ACCESS 4-41 Annick Valibouze 22/01/2010 "FGHIJKL = Etude des premiers programmes
Cette partie commence par un expos introductif aux diffrents types de langages de programmation (compil, interprt, typ ou non, interactif, objet,) et tout particulirement introduit les notion de classes, proprits et mthodes des langages objets. Ensuite, nous abordons VBA travers VB Editor.
Slectionner Affichage/barres doutils/Visual Basic pour faire afficher la barre doutils Visual Basic :
Etudions les diffrents boutons (dmonstration en cours). Le bouton (Visual Basic Editor) tant actionn, une fentre de lditeur souvre (voir Figure 7, chapitre 3) (Faire Alt+F11 pour y accder directement). Dsormais, nous supposons tre dans cette fentre. Allons dans lexplorateur dobjets (voir Affichage/Explorateur dobjets ou F2 ou bouton dans la barre Visual Basic).
Lexplorateur dObjets
Voici loutil qui vous vitera dapprendre par cur une documentation complte : les bibliothques, les classes, les membres et leur chemin (mthodes, proprits, constantes, vnements associs un objet).
zone de recherche de texte zone Projet/Bibliothque Liste des classes liste des membres une proprit une mthode
Note : ce qui est cr par lutilisateur apparat en gras.
Slectionnons le membre Range de <globales>:
Daprs la zone Dtails, cest une proprit (Property), un membre, de la classe Excel.global retournant un objet Range.
Cliquons sur Range (la classe). Dans lespace de description : Class Range Nembie ue Excel Cliquons sur Excel : Libiaiy Excel C:\Piogiam Files\Niciosoft 0ffice\0FFICE11\EXCEL.EXE Niciosoft Excel 11.u 0bject Libiaiy Cliquons sur ulobal :
Figure 68
En cliquant sur Aide nous obtenons linformation suivante : Pour les afficher, slectionnez l'option Afficher membres cachs dans le menu contextuel de l'Explorateur d'objets.
Ce menu contextuel est le suivant :
Figure 69 Dsormais nous pouvons obtenir linformation : Class ulobal Nembie ue Excel
Si nous spcifions une bibliothque particulire, comme Excel, de nombreuses classes et mthodes disparaissent. Demandons, via le menu contextuel, de laide sur la proprit Range slectionne (ou bien avec F1):
Figure 70 ISUP - UMPC VBA & EXCEL & ACCESS 4-43 Annick Valibouze 22/01/2010 Installons ce composant. La fentre daide est la suivante (nous lexplorerons en cours) :
Figure 71
Note : laide est apporte en fonction de ce qui est slectionn (membre, classe, rien). Si rien nest slectionn, laide indique le chemin daccs la bibliothque ou au projet affich. Mettons en application le premier exemple propos. Avec Insertion/Module, nous ouvrons un nouveau module (Module3) dans lequel, nous tapons notre texte de macro. Nous en savons dsormais assez pour cela. Voici la fentre Code concerne :
Nul besoin de valider, de compiler. Ouvrons un nouveau classeur Excel et renommons Test1 la premire feuille. Quelque que soit la feuille de ce classeur dans laquelle est excute cette macro, la cellule A1 de la feuille Test1 prend la valeur 3.141359. Si, en revanche, nous excutons cette macro dans un classeur dont aucune feuille se nomme Test1, une erreur est dclanche (cest normal). Nous pouvons excuter partir de lditeur avec Excution\Ex Excuter Sub. (Ces tapes seront excutes lors du cours). Notons la manire donc lditeur VA complte et colore automatiquement lors de la saisie du code. Nous pouvons encore nous conomiser avec Insertion/Procdure :
Figure 73
Slectionnons la classe Coineis dExcel, puis Select dans la liste de ses membres. Demandons de laide :
Figure 74
Pour pouvoir utiliser cette mthode, il faut lappliquer une expression retournant un des objets spcifis (Chait0bject, Chait0bjects, .).
La fentre UserForme
Elle permet dajouter des boites de dialogues dans les projets.
La fentre Code
Nous y avons dj eu accs plusieurs reprises. Une fentre code est attache lun des modules (standard, module de classe, feuille, document rattach au projet). Pour les faire afficher, il existe plusieurs moyens. Par exemple, slectionner le module, cliquer avec le bouton droit et choisir Code dans le menu. Pour accder directement une procdure de la fentre, utiliser la Zone de liste Procdures. ISUP - UMPC VBA & EXCEL & ACCESS 4-45 Annick Valibouze 22/01/2010
EXERCICE 1
Dfinir une procdure pour crer une liste des macros complmentaires disponibles avec les proprits spcifies. Indication : regarder laide de la classe AddIn. Vous navez rien connatre et vous obtiendrez un tableau ressemblant au suivant :
EXERCICE 2 : Utilisation de la doc en ligne (suite)
Profitez de cette aide pour apprendre comment installer une macro complmentaire en VB et la structure de la boucle for. Chercher des exemples (avec la classe Chaiacteis, par exemple) o apparat la structure de contrle IF-THEN-ELSE.
EXERCICE 3 : manipulations de cellules
En utilisant la documentation en ligne, informez-vous sur Range, Cells, Row (et Rows), Column, ActiveCell, Selection, Offset, Select, Goto, Activate, Resize et Variant. Voir aussi les proprits CurrentRegion, End de la classe Range et la proprit UsedRange.
Dans les exercices suivant, vous donnerez le code VBA puis le rsultat sur une feuille de calcul Excel (si une *). Vous pouvez aussi utiliser la construction automatique des macros pour dcouvrir le code en VBA. Vous prciserez si vous travaillez sur des rfrences relatives ou bien absolues.
1. Ecrire trois instructions permettant de slectionner les cellules B1 : B4 ; C2 ; C6 puis dactiver la cellule B3 et enfin de lui affecter votre nom de famille (*). 2. Ecrire deux instructions permettant dactiver la feuille VotrePrnom du classeur VotreNom puis de slectionner la cellule B3 de cette feuille. 3. Ecrire une instruction qui affecte votre prnom la cellule B2 de la feuille Feuil1 du Classeur VotreNom (*). 4. Slectionner la cellule situe 2 lignes au dessus et 3 colonnes avant la cellule active.
Note : Dans un cours prcdent, les principes gnraux et une partie de la terminologie des langages objets ont t exposs au tableau. Dsormais, les crans seront encore moins dtaills . Les dmonstrations du cours sont donc indispensables sa comprhension.
Les feuilles
Un projet VBA est constitu de feuilles. A chaque feuille du projet est affect un fichier dans le dossier Feuilles dans la fentre Projet - VBAProject. Ouvrir une boite de dialogue signifie ouvrir une feuille. Nous reviendrons sur les feuilles dans la partie 6 de ce cours.
Les modules
Ils forment un programme complet. Le code de linterface est stock dans un fichier UserForm accessible dans le dossier Feuilles.
Module standard : dossier Module ; code standard (voir Partie 4) Module de classe : dossier Module de classe ; code dcrivant les objets dvelopps
Crer un module dans un projet actif (activ en cliquant dessus) : avec Insertion dans le menu contextuel du projet ou dans la barre doutils standard de lditeur.
Supprimer : avec le menu contextuel du module
Modifier son nom : slectionner le module, actionner sa Fentre Proprits (dans Affichage ou avec la touche clavier F4) et modifier son nom dans cette fentre.
Un programme est lensemble des procdures dun projet.
Procdure standard : excute par appel de la procdure par son nom. Procdure vnementielle : dclanche par un vnement (ex. clic de souris).
Dans un module UserForm, les procdures sont prdtermines : une par vnement pouvant affecter un contrle (voir Chapitre 6).
Le choix des procdures des modules standards doit tre pens avec modularit (i.e. ne pas tout mettre dans la mme procdure).
Procdure Sub : ne renvoie pas de valeur
Dfinition : |Piivate | Publicj |Staticj Sub NomPiocuuie(|PaiametiesFoimelsj) Coips Enu Sub Appel : Call NomPiocuuie
Les lments de PaiametiesFoimels sont spars par une virgule (cest une srie).
Note : Pour associer un raccourci clavier la macro, la slectionner dans Excel : Outils/Macros, puis cliquer sur Options. Il est possible galement dassocier une macro un bouton. ISUP - UMPC VBA & EXCEL & ACCESS 5-49 Annick Valibouze 22/01/2010
Par dfaut, une procdure est publique ; dclare prive sa porte est restreinte au module.
Note : Une procdure vnementielle est, par dfinition, prive car ne peut-tre appele par aucune autre procdure (voir Chapitre 6).
Les valeurs des variables dune procdure statique sont conserves durant lexcution du programme (mmo-variables) mme si elles ont une visibilit restreinte la procdure.
Le code dune procdure est constitu dinstructions values squentiellement. Une instruction est forme de constantes, variables et mots cls (symboles reconnus par le langage). Il existe trois sortes dinstructions : de dclaration, daffectation, excutables. Nous les tudierons plus tard.
Procdure Function : Elle peut renvoyer une valeur.
Dfinition : |Piivate | Publicj |Staticj Function NomFonction (|PaiametiesFoimelsj) |As Typej Coips Enu Function
Pour retourner une valeur valeui (ventuellement rsultat dune expression), le corps de la fonction devra comporter linstruction suivante :
NomFonction=valeui
Si As Type est donn, la valeur sera du type Type, sinon de type vaiiant. Pour conomiser de la mmoire, il est prfrable de prciser le type. Si plusieurs instructions values lors de lexcution de la fonction sont de cette forme, cest la dernire valeur affecte NomFonction avant la fin de lexcution de la fonction qui est retourne. Excutons le programme suivant ( lcran en cours) :
Exemple 1 :
Public Sub Test1() ' appel u'une fonction pai une piocuuie
Bim n As Integei n = 1u NsgBox "la valeui ue " & n & " est " & Iuentit(n), vbuK0nly & vbInfoimation, " Test1 " Enu Sub
Function Iuentit(n) As Integei Iuentit = n Enu Function
Pour cette excution, nous pouvons utiliser la barre doutils dbogage de lditeur. Nous remarquons que : - La fonction Iuentit nest pas dans la liste des macros ISUP VBA & EXCEL & ACCESS 5-50 Annick Valibouze 22/01/2010 - Elle est dans la liste des fonctions ; nous y accdons rapidement en choisissons la catgorie personnalises dans la fentre Insrer une fonction dExcel. Nous pouvons lexcuter.
Nous avons pu aussi constater que nous navions pas savoir si nous devions mettre As Int ou As Integei. Lintuition des premires lettres a suffit avec laide de lditeur, comme dans lexemple ci-dessous :
Figure 76
Exemple 2 :
Sub Test2() Bim n n = 1u Woiksheets("Test1").Range("A2").value = n & " est " & EstNul1(n) Enu Sub
Function EstNul1(n) As Chaiacteis ' piobleme syntaxique If n=u Then EstNul1 = "nul" Else EstNul1= "non nul" Enu If Enu Sub
La fonction EstNul1 prsente un problme syntaxique. Nous regardons en cours comment se passe lexcution de la macro Test2. Voici la correction qui nous montre limportance de la syntaxe :
Sub TestS() Bim n As Integei n = 1u Woiksheets("Test1").Range("AS").value = n & " est " & EstNul2(n) NsgBox n & " est " & EstNul2(n), vbuK0nly & vbInfoimation, " TestS " Enu Sub
Public Function EstNul2(n) As Stiing If n = u Then EstNul2 = "nul" Else EstNul2 = "non nul" Enu If Enu Function
Exemple 3 : A travers ce dernier exemple, nous constatons que les fonctions de VB supportent la rcursivit :
ISUP - UMPC VBA & EXCEL & ACCESS 5-51 Annick Valibouze 22/01/2010 Sub Test4() Bim n As Integei n = 4 NsgBox n & " ! = " & Fact2(n), vbuK0nly & vbInfoimation, " Test4 " Enu Sub
Public Function Fact2(n) As Integei ' Le calcul ue 1u! upasse les capacits mais lesquelles . If n = u Then Fact2 = 1 Else Fact2 = n * Fact2(n - 1) ' Fact2 s'appelle icuisivement ; ici la icuision est embote pai * Enu If Enu Function
Pour viter de dpasser les capacits despace mmoire, il faut drcursiver la fonction. La premire tape consiste transformer la rcursivit en rcursivit terminale. Drcursiver dans le cas simple dun embotement : crer une variable solution et utiliser la boucle Tant Que (i.e. while). (Tout ceci sera tudi en cours).
Pour utiliser les fonctions de feuille de calcul Excel, il faut les considrer comme des mthodes de lobjet WorksheetFunction. Pour en savoir plus, consulter Utilisation des fonctions de feuille de calcul Microsoft Excel disponibles dans Visual Basic.
Exemple 4. Excutons la procdure Test5 comme une macro ; cette procdure appelle la procdure paramtre ProcPara qui nest pas excutable comme une macro (voir en cours) et qui appelle la fonction Excel Fact.
Sub TestS() Call PiocPaia(1u) Enu Sub
Sub PiocPaia(n) NsgBox n & " ! = " & WoiksheetFunction.Fact(n), _ vbuK0nly & vbInfoimation, " TestS " Enu
Nous en profiterons pour excuter avec - un point darrt dexcution (cliquer dans la colonne du module devant la ligne concerne ; un point rouge y apparat et la ligne est colore en rouge) - et avec la fentre Variables Locales (i.e. Affichage/Fentre Variables Locales).
Procdure Property Get : renvoie la valeur dune proprit
ISUP VBA & EXCEL & ACCESS 5-52 Annick Valibouze 22/01/2010 Se comporte comme les fonctions pour la valeur retourne :
NomPiocuuie=expiession et lappel : NomPioceuuie(|PaiametiesRelsj)
En cours, nous ferons appel laide VBA : Piopeity uet.
Exemple :
Piopeity uet TestZio(Cellule As Range) As Stiing Select Case Cellule.value Case Is < 1u TestZio = "Pas ieu" Case Else TestZio = "ieu" Enu Piopeity
Sub NonCom() Bim Cel As Range 'uclaiation ue la vaiiable Cel iepisentant un objet ue la classe Range <MK )GNF Cel &O Selection Cel.AuuComment (TestZio(Cel)) ' mthoue Auu.comment ue Range applique l'objet Cel 8LPJ Cel Enu Sub
Voici le rsultat :
Figure 77
Procdure Property Let : dfinie la valeur dune proprit
0ptionnal : les arguments optionnels doivent tre dclars en dernier. Omettre un paramtres rel est donc possible si le paramtre formel est optionnel mais le remplacer par rien ne signifie pas oublier les virgules (donc deux virgules conscutives). Savoir si un paramtre formel PaiametieFoimel a ou non une valeur (i.e. le paramtre rel a t ou non omis) : IsNissing(PaiametieFoimel) Retourne Tiue si aucune valeur et False sinon.
Byval : le passage entre paramtres rels et paramtres formels est ralis par valeur. Les paramtres formels prennent les valeurs des paramtres rels en respectant lordre dapparition.
ByRef : le passage entre paramtres rels et paramtres formels est ralis par rfrence. Cest ladresse du paramtre rel qui est passe. Par dfaut, le passage se fait par rfrence.
Exemples : Bim v1, v2 Public Sub foo1() v1 = 2 v2 = 2 Call foo2(v1, v2) 'notons Call poui appelei une piocuuie, une fonction NsgBox " v1 = " & v1 & " et v2 = " & v2, vbuK0nly & vbInfoimation, " Test4 " Enu Sub
Public Function foo2(v1, Byval v2) ' nous auiions pu mettie ByRef v1 v1 = S v2 = S Enu Function
Voici la boite de dialogue rsultat :
Figure 78
Note : Pour les connaisseurs, notez la similitude avec le langage Pascal (langage typ et compil).
ISUP VBA & EXCEL & ACCESS 5-54 Annick Valibouze 22/01/2010 As Type : le type peut tre Byte, Boolean, Integer, Long, Currency, Single, Double, Date, String, Object, Variant ou un type dfini par lutilisateur. Cela permet le contrle de types.
= valeuiPaiBfaut : utilisable uniquement avec un paramtre optionnel. Ce ne peut tre quune constante ou une expression constante (3+2, par exemple).
Les arguments nomms Lors de lappel dune procdure Sub, utiliser laffection PaiametieFoimel :=PaiametieRel la place de PaiametieRel sert viter les erreurs en cas domission de paramtre rel (cas des paramtres optionnels) et passer les paramtres formels dans un ordre quelconque. PaiametieRel est dit un argument nomm. La plupart des fonction intgres de VB intgrent des arguments nomms.
B- Dclarations des variables
Elles peuvent tre explicites ou implicites. VB Editor permet de forcer les dclarations explicites avec linstruction : 0ption Explicite dans la section Dclarations de la fentre Code (cliquer sur la premire ligne de la fentre code et observer la zone liste des procdures) ou bien Outils/Option/Editeur : Dclaration des variables obligatoire pour systmatiser.
Implicite : la variable sera de type vaiiant.
Explicite : vite les erreurs de frappe. Recommand en cas de dveloppement important.
Dclarer explicitement une variable : Bim Nomvaiiable |As Typej. Encore une fois, comme selon le type lespace mmoire rserv est plus ou moins important, la prcision du type optimise loccupation de lespace mmoire.
Dclaration de plusieurs variables : Bim v1, v2,.,vn |As Typej,w1,.,wm ,|As Typej,..
Les Types La fonction StrConv : pour convertir un type de donnes de chane en un autre. En demandant le rsum des types de donnes lAide, nous obtenons le tableau suivant auquel sont rajoutes quelques prcisions :
Type de donnes Taille d'enregistrement Plage Byte (petit entier) 1 octet 0 255 Boolean 2 octets True ou False Integer 2 octets -32 768 32 767 Long (entier long) 4 octets -2 147 483 648 2 147 483 647 Single ( virgule flottante en simple prcision) 4 octets -3,402823E38 -1,401298E-45 pour les valeurs ngatives ; 1,401298E-45 3,402823E38 pour les valeurs positives ISUP - UMPC VBA & EXCEL & ACCESS 5-55 Annick Valibouze 22/01/2010 Double ( virgule flottante en double prcision) 8 octets -1,79769313486231E308 -4,94065645841247E-324 pour les valeurs ngatives ; 4,94065645841247E- 324 1,79769313486232E308 pour les valeurs positives Currency (entier dcalage) 8 octets -922 337 203 685 477,5808 922 337 203 685 477,5807 Decimal 14 octets +/- 79 228 162 514 264 337 593 543 950 335 sans sparateur dcimal ; +/-7,9228162514264337593543950335 avec 28 chiffres droite du sparateur dcimal ; le plus petit nombre diffrent de zro est +/- 0.0000000000000000000000000001. Date 8 octets 1er janvier 100 au 31 dcembre 9999 Object 4 octets Toute rfrence des donnes de type Object String (longueur variable) 10 octets + longueur de la chane 0 environ 2 milliards String (longueur fixe) Longueur de la chane 1 environ 65 400 Variant (nombres) 16 octets Toute valeur numrique, avec la mme plage de valeurs qu'une donne de type Double Variant (caractres) 22 octets + longueur de la chane Mme plage de valeurs qu'une donne de type String de longueur variable Type dfini par l'utilisateur (avec Type) En fonction des lments La plage de valeurs de chaque lment correspond celle de son type de donnes.
Tableaux (Array) Les tableaux commencent lindice 0. Pour commencer 1, crire 0ption Base 1 dans la section Dclaration de la fentre Code ou bien dlimiter avec To . En cours, nous ferons appel laide avec Utilisation des tableaux.
Type nom simple homogne ou htrogne (avec As vaiiant) :
Bim Nomvaiiable(NombieElments) As Type Bim Nomvaiiable(Bbut To Fin) As Type
Bim Nomvaiiable(B1 To F1, B2 To F2,.,Bn To Fn) As Type ISUP VBA & EXCEL & ACCESS 5-56 Annick Valibouze 22/01/2010
Les tableaux deux dimensions sont utilisables pour stocker une feuille de calcul :
Vrification du type : IsAiiay(Nomvaiiable)
Quel que soit le type de donnes, les tableaux ncessitent 20 octets de mmoire, auxquels viennent s'ajouter quatre octets pour chaque dimension et le nombre d'octets occups par les donnes. L'espace occup en mmoire par les donnes peut tre calcul en multipliant le nombre d'lments par la taille de chacun d'eux. Par exemple, les donnes stockes dans un tableau unidimensionnel constitu de quatre lments de type Integer de deux octets chacun occupent huit octets. Ajouts aux 24 octets d'espace mmoire de base, ces huit octets de donnes portent la mmoire totale ncessaire pour le tableau 32 octets.
Une variable de type vaiiant contenant un tableau ncessite 12 octets de plus qu'un tableau seul.
Voir dans la docenligne : 0bounu, LBounu, Eiase (libration de lespace mmoire), }oin.
Exemples :
Sub Bim1() Bim cuiExpense(S64) As Cuiiency Bim intI As Integei Foi intI = u To S64 cuiExpense(intI) = 2u Cells(intI + 1, S).value = cuiExpense(intI) Next Enu Sub
Sub TableauNulti() Bim intI, Int} As Integei Bim NultiBim(1 To S, 1 To 1u) As Single ' Remplit le tableau ue valeuis. Foi intI = 1 To S Foi Int} = 1 To 1u NultiBim(intI, Int}) = intI * Int} Cells(intI + 4, Int} + S).value = NultiBim(intI, Int}) Next Int} Next intI Enu Sub
Sub TestTableauxSub() Bim i As Integei Bim N2() As vaiiant Bim NonTableau As vaiiant ' Essayei As Integei NonTableau = Aiiay(2, S, 6) ' Poui cette boucle, vitei que la cellule active appaitienne une matiice Foi i = u To 0Bounu(NonTableau) ActiveCell.value = NonTableau(i) ActiveCell.0ffset(u, 1).Activate Next i ISUP - UMPC VBA & EXCEL & ACCESS 5-57 Annick Valibouze 22/01/2010 ActiveCell.0ffset(u, -0Bounu(NonTableau) - 1).Activate ' 0tilisation ue FoimulaAiiay poui iecopiei ; fonctionne aussi avec .value Range("A2:C2").FoimulaAiiay = Range(ActiveCell, _ ActiveCell.0ffset(u, 0Bounu(NonTableau))).value Range("AS:CS").FoimulaAiiay = NonTableau Range("A4:C4").FoimulaAiiay = Aiiay(11, 12, 1S) ' NsgBox NonTableau(1) & " " & NonTableau(2) N2 = NonTableau NsgBox IsAiiay(Range("A4:C4").FoimulaAiiay), _ vbInfoimation, "Est-ce un tableau ." ' FoimulaAiiay poui une matiice Range("B1:E1").FoimulaAiiay = "=Sum(R1C1:RSCS)" ' Passei un tableau en paiametie Bim NonTab(2) As Single NonTab(u) = S.1 NonTab(1) = 7.2 NsgBox NoyenneTableau(NonTab) , vbInfoimation,"moyenne" Enu Sub
' NoyenneTableau calcule la moyenne ues lments uu tableau NonTab Public Function NoyenneTableau(NonTab() As Single) As Single Bim somme As Single somme = u Foi i = LBounu(NonTab()) To 0Bounu(NonTab()) somme = somme + NonTab(i) Next i NoyenneTableau = somme CSng(0Bounu(NonTab()) - LBounu(NonTab()) + 1) Enu Function
Ci-dessous, nous retournons un tableau qui sera considr comme une matrice sous Excel. Pour excuter la fonction Retouinei0neNatiice, Slectionner la zone matricielle (i.e. deux cellules, ici) avant l'appel de la fonction puis l'excuter avec CTRL+MAJ+ENTREE (voir Cours 2) ; les valeurs 24 et 25 seront celles des cellules slectionnes
Function Retouinei0neNatiice() Retouinei0neNatiice = Aiiay(24, 2S) Enu Function
Avec un descriptif, ranger la fonction Retouinei0neNatiice du module Tableaux2 dans la catgorie Fonctions Couis S (sinon elle sera par dfaut dans la catgorie Peisonnalise).
Sub AuuFunctionavb2() Application.Nacio0ptions _ Nacio:="Tableaux2.Retouinei0neNatiice", _ Besciiption:="Teste ietouinei un tableau en valeui", _ Categoiy:="Fonctions Couis S" Enu Sub
ISUP VBA & EXCEL & ACCESS 5-58 Annick Valibouze 22/01/2010 Nous excuterons ces fonctions et procdures durant le cours.
Entrane la perte de toutes les valeurs stockes. Sinon :
Pieseive ReBim Nomvaiiable(Bbut To Fin)
Avec comme conditions : la dimension du tableau ne peut tre modifie et la taille ne peut tre quagrandie et seule la dernire dimension de la variable nest redimensionnable.
Tableaux paramtrs :
Exemple : Sub testTableauPaia() TableauPaia 1, 2, S, 24 Enu Sub
' si plusieuis aiguments, ueiniei aigument ue la piocuuie Function TableauPaia(PaiamAiiay NonTableau() As vaiiant) Bim i As Integei Foi i = u To 0Bounu(NonTableau()) Cells(i + 1, 1).value = NonTableau(i) Next Enu Function
Types Utilisateur (personnalis, comme le stiuct en C ou le Recoiu en Pascal):
Dfinition : Type NonType Iuent1 As Type1 Iuent2 As Type2 . Iuentn As Typen Enu Type
Utilisation :
Bim vai1,vai2 As NonType vai1.Iuent1 = valeui With vai2 .Iuent1 = valeui1 .Iuent2 = valeui2 Enu With
Vrification des types : IsAiiay, IsBate, IsNumeiic, Is0bject, IsNissing, IsEmpty, IsNull, IsEiioi (voir aussi vaiType). Dterminer le type dune variable : vaiType(Nomvaiiable) (voir aussi TypeName).
Exemple : Function EntieiBate() Bo EntieiBate= InputBox("Entiei une uate", "viification") Loop 0ntil IsBate(EntieiBate) = Tiue Enu Function
Conversion de type : CBool(Nomvaiiable), CByte, CCui, CBate,CBbl, Cuec,CInt,CSng,Cvai,CSti
Les types doivent tre compatibles. Il ny a pas de troncation mais un dclanchement derreur. Si on veut ramener la partie entire dun dcimal Variable : Int(vaiiable). Avec laide, nous tudierons les conversions de type : tapons type dans laide et slectionnons fonctions de conversion de type de donnes.
Exemple de conversion :
Public Sub TestConv() NsgBox n & CInt("24S") + S & , vbuK0nly & vbInfoimation, " TestConv " Enu Sub
Les constantes : Donner un nom Nom une valeur val durant toute lexcution du programme :
Const Nom = val Les Objets
Une fois une variable objet (linstance dune classe) dfini, il est possible de dfinir ou dinterroger ses proprits, de lui appliquer les mthodes
Bim Nomvaiiable As NomClasse
Toute classe hritant de la classe 0bjet, il est toujours possible de prendre 0bjet pour NomClasse. Lobjet est dclar mais pas construit.
La construction de lobjet (dune instance de la classe) se ralise en lui affectant avec Set un objet de la mme classe dj existant :
Set Nomvaiiable = expiession Exemple :
Sub vaiiable0bject() Bim Police As Font 'Bfinition Set Police = Woikbooks("classeui1.xls").Sheets("Feuil1").Range("a1").Font 'Ciation ISUP VBA & EXCEL & ACCESS 5-60 Annick Valibouze 22/01/2010 Police.Bolu = Tiue Enu Sub
On peut utiliser aussi 9LJ:QRLNJ dont les arguments sont nomms :
Set Nomvaiiable = uet0bject(|CheminAccesFichieij , classe) Ou bien : Set Nomvaiiable = uet0bject(CheminAccesFichiei)
permettant daccder des tableaux Excel sans que ceux-ci soient ouverts.
Ou bien "KLGJL:QRLNJ :
Set Nomvaiiable = Cieate0bject(classe |,AuiesseNachineBistantej) Exemple 1:
Bim NonClasseui1, NonClasseui2 As Woikbook 'ce seiont ues instances ue la classe Woikbook, i.e. ues classeuis Set NonClasseui1 = uet0bject("C:\Bocuments anu Settings\cvb\Buieau\classeui1.xls") Set NonClasseui2 = Cieate0bject("Excel.Woikbook ") ' c'est--uiie application.classe
Librer lespace mmoire occup par une variable objet :
Set Nomvaiiable = Nothing
Exemple 2: si dans Outils/Rfrences de VB Editor, lapplication Niciosoft Woiu 11.u 0bject Libiaiy est slectionne (voir Figure 5), nous avons accs cette application non hte. (Nous irons dans VBA sous lapplication Word.)
Voici la fentre Rfrences :
Figure 79
Const Chemin As Stiing = "C:\Bocuments anu Settings\cvb\Buieau\NonText.uoc" ISUP - UMPC VBA & EXCEL & ACCESS 5-61 Annick Valibouze 22/01/2010 Public Sub ExcelEtWoiu() 'Classe Woiu.Bocument uoit tie accessible Bim NonBoc As Woiu.Bocument
'uestion u'eiieui avec Resume Next ' si une eiieui se piouuit lois u'une instiuction, l'instiuction suivante est value 0n Eiioi Resume Next Set NonBoc = uet0bject(, "Woiu.Application") 'uestion ue l'eiieui au cas o l'application Woiu ne soit pas accessible If Eii.Numbei <> u Then Eii.Cleai
'Ciation ue l'instance NonBoc ue la classe Woiu.Bocument Set NonBoc = uet0bject(Chemin)
' effaons les anciennes uonnes uans NonText.uoc et uans la feuille Excel Active If NonBoc.Tables.Count > u Then NonBoc.Tables(1).Belete Enu If Excel.Range("A:A").Belete
' ciation u'une table uans Nonuoc Bim Position As Woiu.Range Set Position = NonBoc.Range(u, u) ' cieation u'un tableau uans le uocument NonText.uoc paitii ue l'application hte Excel NonBoc.Tables.Auu Range:=Position, NumRows:=S, NumColumns:=4 ' Eciivons uans cette table ' en utilisant les outils ue l'application Woiu Bim NaTable As Woiu.Table Set NaTable = NonBoc.Tables(1) ' Eciituie : Si l'application Woiu est feime une eiieui est uclanche et iattiape pai Resume Next With NaTable ' ciit "c'est ici" uevant le texte existant .Cell(1, 2).Range.InseitBefoie "c'est ici" ' efface le contenu ue la cellule et ciit "et l" .Cell(2, S).Range.Text = "et l" ' copie le texte ue NaTable contenu u'une cellule uans une autie .Cell(1, S).Range.Text = .Cell(2, S).Range.Text ' Lectuie : Si Woiu est feim il n'y pas u'eiieui ' copions uans ues cellules sous Excel, l'application hte Excel.Range("A1").value = .Cell(1, 2).Range.Text Range("A2").value = .Cell(2, S).Range.Text Bim mot As vaiiant Foi Each mot In .Cell(1, 2).Range.Woius Excel.Range("AS").value = Range("aS").value & "" & mot.Text .Cell(S, S).Range.Text = mot.Text Next mot ' poui se ubaiiassei uu ueiniei mot paiasite Bim i As Integei Foi i = 1 To .Cell(2, S).Range.Woius.Count - 1 Excel.Range("a4").value = Range("a4").value & "" & .Cell(2, S).Range.Woius(i) Next i Enu With ' sauvegaiue uu fichiei NonText.uoc NonBoc.Save Enu Sub
Nous excuterons ce programme en faisant afficher Eii.Numbei selon les cas de figure. ISUP VBA & EXCEL & ACCESS 5-62 Annick Valibouze 22/01/2010 Nous irons sous VB Editor de lapplication Word. Nous regarderons la classe Table, sa mthode Cell, la classe Cell, ses mthodes Foimula, Iu, Neige, Range Nous regarderons Eii0bj, 0nEiioi. Voir dans la docenligne : Ecriture dinstructions de dclaration, Dclarations de variables
Porte et dure de vie des variables
Variable de niveau procdure : locale une procdure !"#"$% : variable garde sa valeur dun appel lautre (mmo-variable).
Variable au niveau module : dclares dans la section Dclarations du module &'()$% : visible par toutes les procdures (et fonctions) du projet &*$+#", : visible que par les procdures du module (par dfaut)
Les instructions (structures de contrle)
Une instruction est forme de constantes, variables et mots cls (symbole reconnu par le langage). Il existe trois sortes dinstructions : de dclaration, daffectation, excutables.
- Bo . Loop et While . Wenu (boucler avec un test darrt ; utiliser pour drcursiver) - Foi . Next (parcourir un ensemble par indiage born) - Foi Each . Next (parcourir un ensemble par appartenance) - If . Then . Else - Select Case . Case . Case Else . Enu Select - uoTo Etiquette
Attention aux boucles infinies : CTRL+Espace pour en sortir.
En cours, nous regardons les exemples de laide.
Oprateurs
Dans Excel, consulter laide : a propos des oprateurs de calcul Dans Visual Basic Editor : laide Rsum des oprateurs fournit le tableau suivant. (Si vous ne le trouvez pas, allez dans and operator puis cliquez sur Voir aussi.) (Voir aussi : Is et Like.)
Oprateurs Description Oprateurs arithmtiques Oprateurs permettant d'effectuer des calculs mathmatiques. Oprateurs de comparaison Oprateurs permettant d'effectuer des comparaisons. Oprateurs de concatnation Oprateurs permettant de combiner des chanes. Oprateurs logiques Oprateurs permettant d'effectuer des oprations logiques.
Fonction &OHSJ?MP : vaiiable = InputBox(piompt, title|,uefault, left,top,helpFile, helpContextIu,typej) La variable rcupre le rsultat tap par lutilisateur. Si lutilisateur annule ou ferme la bote de dialogue, une chane vide est retourne.
Mthode &OHSJ?MP de lobjet Application dExcel peut aussi tre utilise :
Set vaiiable = Application.InputBox(piompt, title |,uefault, left,top,helpFile, helpContextIu,typej)
La mthode permet de slectionner une plage de cellules avant de cliquer sur OK.
Fonction .TU?MP : vaiiable = InputBox(piompt, buttons, title) o vaiiable est de type Integei.piompt.
Botes de dialogues Excel
Ce sont des objets Bialog (collection Bialogs) ; nous leur appliquons les mthodes Show ou Bisplay.
O Bote est une constante Excel indiquant la bote de dialogue. Voir aussi : 9LJ:HLO<IVLOGWL et 9LJ/GXL$T<IVLOGWL.
Se Renseigner sur (aide VBA)
Ecriture de donnes dans des fichiers (grandes donnes). Utilisation efficace des types de donnes.
Exercices : Les programmes doivent tre largement comments (individuellement bien entendu ) et fournis avec un jeu dexcutions personnel. Ne pas trop en faire non plus. 1. Ecrire une fonction FactS non rcursive retournant le mme rsultat que Fact2 et comparer les capacits des deux fonctions en terme de dpassement. Vous ferez appel laide pour trouver la syntaxe de la boucle while. Vous essaierez de nouveau 10 ! et expliquerez votre rsultat en regardant la documentation du type Integer. Comparez avec la fonction Fact dExcel. Quen concluez-vous ? 2. Ecrire une fonction Fact4 avec Bo. 3. Donner un trs petit exemple personnel pour la procdure Property Let. 4. Dfinir deux petites sub diffrentes et personnelles publiques et de mme nom dans deux modules distincts dun mme projet. Essayez avec une prive et de mme nom. Essayez dans deux projets diffrents (avec les classeurs simultanment ouverts). Faites de mme avec deux fonctions. Quen concluez-vous ? 5. Ralisez des conversions de type avec des variables et observez ce qui est convertit : la variable ou bien la valeur de la variable ? Quen concluez-vous ? ISUP VBA & EXCEL & ACCESS 5-64 Annick Valibouze 22/01/2010 6. Ecrire une macro qui stocke dans un tableau la table des ventes dappartements vue prcdemment et la recopie trois colonnes plus loin (correction la semaine prochaine dans le classeur appait.xls). 7. Avec la boucle Foi, crire une fonction qui rajoute 1 tous les lments dun tableau bidimensionnel dentiers. 8. Ecrire votre fonction BioiteReg2 (qui retourne le mme rsultat que la fonction prdfinie BioiteReg). 9. Ecrire une fonction RecFich(NomFichiei) qui recopie les 10 premiers mots dun fichier Word NomFich dans les cellules A1 A10 de la feuille active du classeur actif dExcel. Excuter cette fonction partir dune procdure sans paramtres. 10. Ecrire une fonction rcursive qui fait le produit dune matrice dentiers nxm par un vecteur de dimention n. 11. Soient v et w deux vecteurs de n entiers de coordonnes respectives vi et wi. En utilisant la gestion des erreurs, crire une fonction qui prend v et w en arguments et qui retourne le vecteur m tel que mi=vi/wi, si wi est non nul et mi=vi, sinon.
Elles se ralisent par les feuilles ( ne pas confondre avec les feuilles dun classeur Excel). Ce sont des zones sur lesquelles se placent les contrles ActiveX (boutons, zones de texte, ).
Ces contrles constituent une interface graphique interactive. Pour associer du code un vnement : procdures vnementielles :
Pour ouvrir une feuille User Form, choisir Insertion/UserForm dans les menu contextuel de la fentre Explorateur de Projets.
Figure 80
Est ainsi cr une feuille UserForm du Classeur (ici UserForm1 du Classeur2). Cest un objet de la classe 0seiFoim (une instance) dont on peut modifier les proprits via son menu contextuel.
En cours, nous irons dans lexplorateur dobjets o nous retrouverons notre objet UserForm1, nous commenterons la fentre Proprits et la bote outils. En particulier, pour dcouvrir les contrles, nous utiliserons laide avec la touche F1.
Le nom (i.e. Name) 0seiFoime1 est celui de cette feuille (cet objet) dans le code des programmes. A partir de lexplorateur dobjet, nous pouvons ainsi nous interroger sur la proprit KeepSciollBaisvisible (voir Figure 2).
Les Contrles
Les proprits de chaque objet contrle sont galement modifiables via son menu contextuel (en particulier, son nom). Chaque objet contrle possde galement ses mthodes et ses vnements. Dans lexemple ci-dessous, nous mettrons True la proprit value de lobjet 0ptionButton1 et nous modifierons la proprit Caption des objets de la feuille afin quelles soient identiques (ce nest pas oblig) aux noms respectifs de chaque objet (Name).
Arranger les contrles
Nous passerons vite sur cette partie car la lecture dune documentation est suffisante.
Outils/Options/Gnral/Aligner les contrles sur la grille
Voir aussi quil est possible de rajouter des pages via le menu contextuel de la bote outils.
Figure 83
Afficher une Feuille
Dans la classe 0seiFoim est dfinie la mthode Show quil suffit dappliquer une instance de cette classe (notre feuille 0seiFoim1) pour que cet objet apparaisse : 0seiFoim1.Show. Pour masquer une feuille, il y a la mthode iue. Pour dsigner la feuille (i.e. 0seiFoim1) active, on peut utiliser la proprit Ne. Si UserForm1 est cette feuille active, Ne.Show affichera la feuille 0seiFoim1. Dans les langages objets, ce genre dastuce est souvent utile car le nom de lobjet nest pas toujours connu (ici la feuille active) au moment ou le code est gnr ; qui plus est, ici, ce code sera alors applicable pour chaque feuille active quelque soit son nom (penser, par exemple, au this de JAVA).
Ouvrons une fentre code (via le menu contextuel de lobjet UserForm1 ou celui du projetVBA) ; dfinissons la procdure suivante et excutons-l ensuite :
Figure 84
Notre feuille cre une bote de dialogue dans la feuille (Sheet) Excel active.
Figure 85
Linstruction 0seiFoim1.iue pourra tre subtilement introduite dans la procdure vnementielle associe un bouton de la bote de dialogue actionner afin de fermer la bote.
Nous allons juste traiter un exemple expliquant le principe et chapper une description fastidieuse et exhaustive. Supposons que la proprit value de 0ptionButton1 soit Tiue (voir Figure 6). Double cliquons sur OptionButton1 dans la fentre UserForm1 (voir Figure 3) ; nous accdons la fentre code et la procdure associe au click nous est propos ; les autres apparaissent choix sont facilement identifiables (voir Figure 7). Nous mettons linstruction Range("A1").value = 2S dans le corps de la procdure 0ptionButton1_Click() :
Figure 86
Lorsquon excute, la cellule A1 de la fentre active a pour valeur 23. Rajoutons deux procdures :
Piivate Sub 0ptionButton2_Click() Range("A1").value = 24 Enu Sub
Piivate Sub 0ptionButtonS_Click() Range("A1").value = 2S Enu Sub
puis observons ce qui se passe sur la feuille de calcul Excel lorsque lon clique dans les boutons de la boite de dialogue. Nous rajouterons un bouton que nous appellerons OK (avec sa proprit Caption) et nous crirons sa mthode prive (procdure vnementielle) qui permet de fermer la boite de dialogue (avec 0seiFoim1.iue) si on le clique.
Dans la zone Liste ues piocuuies de la fentre Code (voir Chapitre 4), nous trouvons les procdure vnementielles possibles. Cliquons sur lun de ces choix.
Nous pouvons galement rajouter des boutons sur la feuille de calcul Excel avec la Bote Outil Contrles :
Cliquer sur le bouton dactivation de cette bote (le premier), puis sur le contrle choisi, puis sur lendroit de la feuille o le bouton doit tre plac. Pour crer une procdure vnementielle, cliquer sur la zone du bouton sur la feuille.
Nous profiterons de cette dmonstration pour voir le code dans la barre des formules Excel. ISUP - UMPC VBA & EXCEL & ACCESS 7-69 Annick Valibouze 22/01/2010 "FGHIJKL @ Bases de donnes : ACCESS
Ce chapitre applique ACCESS les notions apprises dans la premire partie du cours Bases de donnes . Comme pour Excel & VBA, cette partie du cours ddie ACCESS est interactive.
I. Cration de tables
1- Appelons Access partir de Windows dmarrer/Programmes/Microsoft Office ACCESS
2- Ouvrons une nouvelle base Fichier/Nouvelle base de donnes
4- Crons une table comportant les champs suivants :
# Compteur Nom et choisir le type de compteur : NumroAuto -> Proprit : incrment
# Nom avec le type Texte # Prnom avec le type Texte # Date de naissance avec le type Date # Compteur Profession avec le type Numrique, entier long.
5- Dfinissons la cl primaire (pour acclrer les accs) : Slectionnons le champs Compteur Nom (qui est unique) puis cliquons sur la cl situe sur la barre doutil :
6- Rentrons en mode saisie en cliquant sur la premire icne ( gauche) de la barre doutils (reprsentant une table) ; ACCESS nous demande de sauvegarder ; nus sauvegardons avec le nom Personne. Remarquons que la premire icne nest plus une table.
ISUP VBA & EXCEL & ACCESS 7-72 Annick Valibouze 22/01/2010 II. Vues et Requtes
Une vue est une relation non matrialise dun shma externe calcule partir des relations de la base par une question. En ACCESS, nous parlerons de requtes.
Soient nos deux tables : Personne et Profession. Nous allons crer une requte partir de ces deux tables. Dans la fentre Bases de donnes nous cliquons sur longlet Requtes puis Mode de cration :
1- Dans le champs conceptuel de Requte 1 : Requte slection, nous avons slectionn Afficher la table
2- Ralisation des liens la main . Ici le lien Compteur Profession est ralis automatiquement :
Retirons cette jointure en cliquant dessus puis la remettre en cliquant sur le champs Compteur Profession de la table Profession et en amenant la souris sur celui de Personne. Ensuite cliquons sur les champs Nom, Prnom, Date de naissance de la table Personne et Profession, Indice de la table Profession (nous pouvons aussi rentrer ces donnes la main ). Nous avons slectionn les attributs de notre requte :
Excutons-la et savons-la (comme pour les tables) dans Requte1 (sinon ACCESS lui donnera ce nom par dfaut) :
Requte1 Nom Prnom Date de naissance Profession Indice Dubois Patrick 11/10/1975 Agriculteur 25 Dupont Ameline 20/03/1970 Commerant 550 Azemar Clothilde 12/12/1980 Enseignant 121 Balzac Alain 07/06/1971 Commerant 550
Nous voulons crer une nouvelle requte appele Requte2 qui comporte les tuples de Requte1 tels que les indices soient infrieurs 300 ; cest une restriction. Dans le tableau de la Requte2, copie de Requte1 pour le moment, rajouter < 300 lintersection de la ligne critre et de la colonne indice. Excutons avec ! ou en cliquant sur le menu droulant de la premire case gauche de la barre doutils (choisir Mode Feuille de donnes).
Requte2 Nom Prnom Date de naissance Profession Indice Dubois Patrick 11/10/1975 Agriculteur 25 Azemar Clothilde 12/12/1980 Enseignant 121
4- Dfinition des relations entre les tables. Lobjectif est de pour avoir automatiquement des jointures. Allons dans Outils/Relations et ajouter les tables concernes. Faisons le lien entre les attributs concerns par la jointure (ici Compteur Profession) comme en 3-. La fentre suivante souvre :
Cliquons sur Appliquer lintgrit rfrentielle puis sur crer puis fermer relations.
Dsormais en ajoutant les tables, le lien sera automatiquement mis.
5- Les oprations sur les requtes
ISUP - UMPC VBA & EXCEL & ACCESS 7-75 Annick Valibouze 22/01/2010 Nous cherchons une requte qui nous donne le nombre de personnes par profession. Cliquer qui nous donne le nombre de personnes par profession. Crons une nouvelle requte. Ajoutons les tables Personnes et Profession et slectionnons les champs Professions et Compteur Nom. Rajouter dans la requte la ligne Opration en slectionnant Totaux dans Afficher. Regroupement est mis par dfaut. Choisir Regroupement pour lattribut Profession et Compte pour lattribut Compteur Nom. Puis excuter la requte.
Excutons notre requte :
Requte3 Profession CompteDeCompteur Nom Agriculteur 1 Commerant 2 Enseignant 1
III. Utilisation des fonctions dans les champs
Nous cherchons raliser une nouvelle requte dans laquelle la date de naissance est remplace par lge.
1- Crons une nouvelle requte avec lattribut Date de naissance de la table Personne et lattribut Profession de la table Profession. 2- Cliquons sur le champs Date de naissance puis sur Crer, la baguette magique .
Il ne reste plus qu donner un nom la base de donnes.
IV. Liens avec Word et Excel
Nous essayerons en cours.
V. Passage SQL
Choisissons Affichage/Mode SQL :
Pour Requte1, nous obtenons :
Pour Requte2 :
SELECT Personne.Nom, Personne.Prnom, Personne.[Date de naissance], Profession.Profession, Profession.Indice FROM Personne INNER JOIN Profession ON Personne.[Compteur Profession] = Profession.[Compteur Profession] WHERE (((Profession.Indice)<300));
Pour Requte3 :
SELECT Profession.Profession, Count(Personne.[Compteur Nom]) AS [CompteDeCompteur Nom] FROM Profession INNER JOIN Personne ON Profession.[Compteur Profession] = Personne.[Compteur Profession] GROUP BY Profession.Profession;
Pour Requte4 :
ISUP VBA & EXCEL & ACCESS 7-78 Annick Valibouze 22/01/2010 SELECT DateDiff("yyyy",[Personne]![Date de naissance],Date()) AS Age, Profession.Profession, Personne.[Date de naissance], Date() AS [Date du jour] FROM Profession INNER JOIN Personne ON Profession.[Compteur Profession] = Personne.[Compteur Profession];
VI. Et VBA ?
Slectionnons Modules dans la base de donnes :
Nous nous retrouvons sous VBA (voir aussi Affichage/Volet Office ou bien Affichage/Barres doutils/Volet Office ou CTRL+F1) :
Avec lexplorateur dobjet, nous consultons la documentation sur la classe DataBase , membre de la classe DA0 (voir explorateur de projets), contenant en particulier :
Utilisez la mthode CreateDatabase pour crer un objet Database permanent automatiquement ajout la collection Databases, ce qui permet de l'enregistrer sur le disque dur.
Pour en savoir plus sur CreateDatabase consultons DA0 :
Nous slectionnons CreateDataBase :
Function CreateDatabase(Name As String, Locale As String, [Option]) As Database Membre de DAO.DBEngine
Nous regardons la mthode comme membre de Workspace :
Function CreateDatabase(Name As String, Connect As String, [Option]) As Database Membre de DAO.Workspace
ISUP VBA & EXCEL & ACCESS 7-80 Annick Valibouze 22/01/2010 Dans laide de CreateDataBase, nous trouvons :
CreateDatabase, mthode Cre un objet Database, enregistre la base de donnes sur disque et renvoie un objet Database ouvert (espaces de travail Microsoft Jet uniquement). Syntaxe Set database = workspace.CreateDatabase (name, locale, options) La syntaxe de la mthode CreateDatabase comprend les lments suivants : lment Description database Variable objet reprsentant l'objet Database crer. workspace Variable objet reprsentant l'objet Workspace existant qui va contenir la base de donnes. Si vous omettez workspace, la mthode CreateDatabase utilise l'objet Workspace par dfaut. name Donne de type String d'une longueur maximale de 255 caractres, indiquant le nom du fichier de base de donnes crer. Cet argument peut prciser le chemin et le nom de fichier complets, comme "C:\db1.mdb". Si vous ne prcisez aucune extension, .mdb est automatiquement ajout. Vous pouvez galement indiquer un chemin d'accs rseau, si votre rseau le permet, par exemple, "\\server1\share1\dir1\db1". Cette mthode ne permet de crer que des fichiers .mdb. locale Expression de chane indiquant l'ordre de tri utilis lors de la cration d'une base de donnes, comme indiqu dans Valeurs. Si vous omettez cet argument, une erreur se produit.
Et encore :
La mthode CreateDatabase permet de crer et d'ouvrir une base de donnes vierge, puis renvoie l'objet Database. Il vous faut complter sa structure et son contenu l'aide d'objets DAO supplmentaires. Pour crer une copie complte ou partielle d'une base de donnes, vous pouvez utiliser la mthode CompactDatabase, qui permet de crer une copie personnalise.
Sur le Bureau, cette BD nomme BDCreateVBA est effectivement cre et nous pouvons lappeler partir dACCESS.
Comme pour les classes sous Excel, nous constatons que lexplorateur dobjets est loutil indispensable au dveloppement des applications sous ACCESS via VBA.
A vous de continuer !
ISUP VBA & EXCEL & ACCESS 8-82 Annick Valibouze 22/01/2010 "FGHIJKL B Langages Objets : quelques notions
Classe (Class) : Dfinition commune dun ensemble Sous-classe : un chien et un chat sont des animaux Objet dune classe : instance de cette classe Collection : ensemble des objets dune classe
Un objet possde lensemble des mthodes et proprits dfinies dans la classe dont il est une instance.
Application hte : Excel, Word , Access, . Nous travaillerons sous lapplication Excel, mais nous pourrons faire appel aux objets des autres applications.
Sommet du modle objet : Application Sous lobjet Application : collection Woikbooks englobant les objets Woikbook (classeurs ouverts) Sous lobjet Woikbook : collection Woiksheets des feuilles de calcul du classeur, les objets Woiksheet (voir aussi Sheet).
Accder un Objet : les objets dune collection sont reprables par leur indice dans cette collection ou par leur nom : NomCollections("Nom0bjet") o NomCollections est en fait une proprit de la classe NomCollection (i.e. de mme nom sans s) retournant lobjet dsign en paramtre.
Appliquer une mthode, une proprit un objet : 0bjet.mthoue ou 0bjet.piopiit.
Exemple : Application.Woikbooks.("Classeui1").Sheets("Feuil1").Activate
Si Application.Woikbooks.("Classeui1") est le classeur actif alors Sheets("Feuil1").Activate suffit.
dinstance : 0bjet.Nthoue , 0bjet.Piopiit de classe : Classe. Nthoue , Classe.Piopiit
Exemple : fermer tous les classeurs : Woikbooks.Close. Crer un nouveau classeur : Woikbooks.Auu.
Evnements : actions reconnues par les objets. Ils dclanchent des programmes appels procdures vnementielles.
ISUP - UMPC VBA & EXCEL & ACCESS 8-83 Annick Valibouze 22/01/2010 Fonctions : valuation de leur corps dans un environnement dans lequel les paramtres formels sont associs aux paramtres rels et pouvant retourner un rsultat.
Nous aborderons galement lhritage, le polymorphisme,
Cration dun classeur et Polymorphisme sous VBA
Je copie le code dans le module dun projet (en loccurrence le module 1 du projet TestDocenligne) et jexcute. Le classeur ClasseurViaVBA est alors cr.
Nous poursuivrons cette docenligne en cours. En particulier, le cours 5 portera sur la partie Visual Basic/Rubriques Conceptuelles . ISUP VBA & EXCEL & ACCESS 8-84 Annick Valibouze 22/01/2010
Range : constructeur de la classe Range (Voir Chapitre 4)
Cells : proprit Cet exemple montre comment affecter une taille de caractres de 14 points la cellule C5 dans la feuille Sheet1. Worksheets("Sheet1").Cells(5, 3).Font.Size = 14
Cet exemple montre comment supprimer la formule dans la cellule 1 de la feuille Sheet1. Worksheets("Sheet1").Cells(1).ClearContents
Cet exemple montre comment affecter une police de caractres Arial et une taille de 8 points pour toutes les cellules dans la feuille Sheet1. With Worksheets("Sheet1").Cells.Font .Name = "Arial" .Size = 8 End With
Cet exemple montre 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
Cet exemple montre comment balayer une colonne de donnes intitule myRange . Si une cellule contient la mme valeur que celle situe immdiatement au-dessus, l'adresse de la cellule contenant le doublon est affiche. Set r = Range("myRange") For n = 1 To r.Rows.Count If r.Cells(n, 1) = r.Cells(n + 1, 1) Then MsgBox "Duplicate data in " & r.Cells(n + 1, 1).Address End If
Cet exemple montre comment effectuer une boucle sur les cellules A1:J4 dans la feuille Sheet1. Si une cellule contient une valeur infrieure 0,001, la valeur est remplace par 0 (zro). For rwIndex = 1 to 4 For colIndex = 1 to 10 With Worksheets("Sheet1").Cells(rwIndex, colIndex) If .Value < .001 Then .Value = 0 End With Next colIndex Next rwIndex
ISUP - UMPC VBA & EXCEL & ACCESS 9-87 Annick Valibouze 22/01/2010 Row : proprit Cette proprit renvoie le numro de la premire ligne de la premire zone de la plage. Type de donnes Long en lecture seule. Cet exemple montre comment affecter une hauteur de 4 points toutes les autres lignes de la feuille Sheet1. For Each rw In Worksheets("Sheet1").Rows If rw.Row Mod 2 = 0 Then rw.RowHeight = 4 End If Next rw
Rows : proprits qui renvoie un objet Range Cet exemple montre comment supprimer la ligne 3 dans Sheet1. Worksheets("Sheet1").Rows(3).Delete
Column et Column : idem Row
ActiveCell : proprit, construit un objet Range representant la cellule active de la feuille de calcul (voir Chapitre 3).
Selection : renvoie lobjet slectionn dans la feuille de calcul (voir Chapitre 3).
Cette proprit renvoie l'objet slectionn dans la fentre active pour un objet Application, et dans une fentre spcifie pour un objet Windows. Notes Le type de l'objet renvoy dpend de la slection en cours (par exemple, si une cellule est slectionne, cette proprit renvoie un objet Range). La proprit Selection renvoie Nothing si rien n'est slectionn. Utiliser cette proprit sans identificateur d'objet quivaut utiliser Application.Selection. Exemples Cet exemple montre comment effacer la slection effectue dans la feuille Sheet1 (en supposant que cette slection concerne une plage de cellules). Worksheets("Sheet1").Activate Selection.Clear
Cet exemple montre comment afficher le type d'objet Visual Basic de la slection. Worksheets("Sheet1").Activate MsgBox "The selection object type is " & TypeName(Selection)
Offset : renvoie un objet Range qui reprsente un objet dcal par rapport la feuille de calcul (voir Exercice 2 Chapitre 3).
Cette proprit renvoie un objet Range qui reprsente une plage dcale de la plage spcifie. En lecture seule. ISUP VBA & EXCEL & ACCESS 9-88 Annick Valibouze 22/01/2010 expression.Offset(RowOffset, ColumnOffset) expression Obligatoire. Expression qui renvoie un objet Range. RowOffset Argument de type Variant facultatif. Nombre de lignes (valeur positive, ngative ou gale 0 (zro)) de dcalage appliquer la plage. Les valeurs positives correspondent un dcalage vers le bas et les valeurs ngatives un dcalage vers le haut. La valeur par dfaut est 0. ColumnOffset Argument de type Variant facultatif. Nombre de colonnes (valeur positive, ngative ou gale 0 (zro)) de dcalage appliquer la plage. Les valeurs positives correspondent un dcalage vers la droite et les valeurs ngatives un dcalage vers la gauche. La valeur par dfaut est 0. Exemples Cet exemple montre comment appliquer un dcalage de cellule de trois colonnes vers la droite et de trois lignes vers le bas la cellule active de la feuille Sheet1 . Worksheets("Sheet1").Activate ActiveCell.Offset(rowOffset:=3, columnOffset:=3).Activate
Cet exemple suppose que la feuille Sheet1 contient un tableau dot d'une ligne d'en-tte. L'exemple montre comment slectionner le tableau sans slectionner la ligne d'en-tte. La cellule active doit se situer un endroit quelconque du tableau avant l'excution de l'exemple. Set tbl = ActiveCell.CurrentRegion tbl.Offset(1, 0).Resize(tbl.Rows.Count - 1, _ tbl.Columns.Count).Select
Select : Slectionner lobjet spcifi, mthode
Exemple Cet exemple montre comment slectionner les cellules A1:B3 dans la feuille Sheet1 . Worksheets("Sheet1").Activate Range("A1:B3").Select
Pour slectionner une cellule ou une plage de cellules, utilisez la mthode Select. Pour activer une seule cellule, utilisez la mthode Activate. Goto : Slectionner lobjet spcifi, mthode
Cette mthode slectionne une plage ou une procdure Visual Basic quelconque dans n'importe quel classeur et active celui-ci s'il ne l'est pas. expression.Goto(Reference, Scroll) expression Obligatoire. Expression qui renvoie un objet Application. Reference Argument de type Variant facultatif. La destination. Il peut s'agir d'un objet Range, d'une chane de caractres comportant une rfrence de cellule en notation de type R1C1 ou d'une chane de caractres ISUP - UMPC VBA & EXCEL & ACCESS 9-89 Annick Valibouze 22/01/2010 contenant un nom de procdure Visual Basic. Si vous ne spcifiez pas cet argument, la destination est la dernire plage que vous avez slectionne l'aide de la mthode Goto. Scroll Argument de type Variant facultatif. Affectez-lui la valeur True pour faire dfiler la fentre de telle sorte que le coin suprieur gauche de la plage apparaisse dans le coin suprieur gauche de la fentre. Affectez-lui la valeur False pour ne pas faire dfiler la fentre. La valeur par dfaut est False. Notes Cette mthode diffre de la mthode Select des faons suivantes : Si vous spcifiez une plage situe dans une feuille qui ne se trouve pas au premier plan, Microsoft Excel bascule vers cette feuille avant de procder la slection. (En revanche, si vous utilisez la mthode Select pour slectionner une plage situe dans une feuille qui ne se trouve pas au premier plan, la plage est slectionne mais la feuille n'est pas active.) Cette mthode utilise un argument Scroll qui vous permet de faire dfiler la fentre de destination. Lorsque vous utilisez la mthode Goto, la slection prcdente (celle qui prcde l'excution de la mthode Goto) est ajoute dans le tableau des slections prcdentes (pour plus d'informations, consultez la rubrique relative la proprit PreviousSelections). Vous pouvez utiliser cette caractristique pour basculer rapidement entre quatre slections au maximum. La mthode Select utilise un argument Replace, ce qui n'est pas le cas de la mthode Goto. Exemple Cet exemple montre comment slectionner la cellule A154 de la feuille Sheet1, puis faire dfiler la feuille de calcul pour afficher la plage. Application.Goto Reference:=Worksheets("Sheet1").Range("A154"), _ scroll:=True
Resize : modifie lampleur dune plage de cellules
Cette proprit redimensionne la plage spcifie. Cette proprit renvoie un objet Range qui reprsente la plage redimensionne. expression.Resize(RowSize, ColumnSize) expression Obligatoire. Expression qui renvoie un objet Range redimensionner. RowSize Argument de type Variant facultatif. Nombre de lignes de la nouvelle plage. Si vous n'avez pas spcifi cet argument, le nombre de lignes de la plage demeure inchang. ColumnSize Argument de type Variant facultatif. Nombre de colonnes de la nouvelle plage. Si vous n'avez pas spcifi cet argument, le nombre de colonnes de la plage demeure inchang. Exemples Cet exemple montre comment tendre d'une ligne et d'une colonne la slection effectue dans la feuille Sheet1 . Worksheets("Sheet1").Activate numRows = Selection.Rows.Count numColumns = Selection.Columns.Count Selection.Resize(numRows + 1, numColumns + 1).Select
ISUP VBA & EXCEL & ACCESS 9-90 Annick Valibouze 22/01/2010 Cet exemple suppose que vous disposez d'un tableau avec ligne d'en-tte dans Sheet1 . L'exemple montre comment slectionner le tableau sans slectionner la ligne d'en-tte. La cellule active doit se trouver quelque part dans le tableau avant d'excuter l'exemple. Set tbl = ActiveCell.CurrentRegion tbl.Offset(1, 0).Resize(tbl.Rows.Count - 1, _ tbl.Columns.Count).Select
Lors du cours 2, nous avons constat notre insatisfaction face lutilisation du solveur sous Excel. Dsormais, le systme de calcul formel Maple est utilisable dans les feuilles de calcul Excel. Cest assez simple. Voyons ensemble de quelle manire.
Tout dabord, voici comment aller chercher la macro complmentaire ncessaire linterfaage.
1. Ouvrir la boite de dialogues Outils/Macros complmentaires. 2. Choisir Parcourir pour vous rendre dans le rpertoire Maple 10. Par exemple C:/Program Files/Maple 10/Excel/. 3. Slectionner le fichier WMIMPLEX pour linsrer comme une macro complmentaire dans Excel. Observer les icnes Maple apparatre dans la feuille de calcul (voir Figure ci-aprs).
Regardons maintenant comment utiliser Maple.
1. Taper =Naple("sin(x)") Dans une cellule (ou dans la barre des formule).
Maintenant utiliser le mode cration automatique de macros pour voir le code sous VBA. Il est dsormais possible de faire du Maple sous VBA avec Excel comme Application.
Pour en savoir plus, utiliser la documentation Maple en tapant : Excel.
Il est galement possible dutiliser des tableurs sous Maple (voir Documentation Maple).