22
EXCEL VBA EXEMPLE DE CREATION D'UNE MACRO FONCTION AFCI-NEWSOFT Page 1 EXEMPLE DE CREATION D'UNE MACRO FONCTION EXCEL propose un grand nombre de fonctions prédéfinies mais vous pouvez avoir besoin de calculs spécifiques et répétitifs. Les macro fonctions permettent d'enrichir le choix de fonctions déjà disponibles dans EXCEL. Ces nouvelles fonctions seront disponibles dans le menu [SELECTION][COLLER UNE FONCTION] comme n'importe quelle autre fonction d'origine d'EXCEL. Par exemple, vous souhaitez calculer régulièrement la surface d'un rectangle. Vous pouvez créer une fonction personnalisée qui réalisera ce calcul à partir d'arguments comme le font les fonctions traditionnelles. DÉFINITION DU PROBLÈME : Pour reprendre l'exemple précédent, vous allez créer une fonction permettant de calculer la surface d'un rectangle. La formule est la suivante : Surface = Longueur * Largeur SYNTAXE : Toute macro aura à peu près la même structure : une déclaration un bloc d'arguments (il déclare les variables) un calcul (il réalise le calcul de la fonction) une ligne Fin (elle met fin à la macro) * LA DECLARATION : La ligne indiquera le mot clé : FONCTION suivi du nom de la fonction auquel seront accolées des parenthéses contenant les arguments. Le Nom de la fonction permet une identification immédiate du contenu de la macro. Par exemple, si le titre est "Exponentiel", vous en déduirez qu'il s'agit de calculer une exponentielle. * ARGUMENTS : Il s'agit des variables qui vont réceptionner les valeurs passées à la fonction à partir de la feuille de calcul. : = SURFACE (nom de l'argument1;nom de l'argument2) Dans notre exemple les arguments seront : LONGUEUR et LARGEUR Les arguments doivent être séparés par un point virgule * CALCUL : Il s'agit du calcul effectué par la fonction. Dans notre exemple : SURFACE=LONGUEUR*LARGEUR A noter qu'il est important d'attribuer le resultat final des calculs a une variable portant le nom de la fonction * FIN FONCTION : Fonction surface(longueur; largeur) Surface = longueur * largeur Fin Fonction

excel Vba Exemple De Creation D'une Macro - afci.fr · excel vba exemple de creation d'une macro fonction afci-newsoft page 1 exemple de creation d'une macro fonction excel ... utiliser

Embed Size (px)

Citation preview

Page 1: excel Vba Exemple De Creation D'une Macro - afci.fr · excel vba exemple de creation d'une macro fonction afci-newsoft page 1 exemple de creation d'une macro fonction excel ... utiliser

EXCEL VBA EXEMPLE DE CREATION D'UNE MACRO FONCTION

AFCI-NEWSOFT Page 1

EXEMPLE DE CREATION D'UNE MACRO FONCTION

EXCEL propose un grand nombre de fonctions prédéfinies mais vous pouvez avoir besoin de calculs spécifiques et répétitifs. Les macro fonctions permettent d'enrichir le choix de fonctions déjà disponibles dans EXCEL. Ces nouvelles fonctions seront disponibles dans le menu [SELECTION][COLLER UNE FONCTION] comme n'importe quelle autre fonction d'origine d'EXCEL. Par exemple, vous souhaitez calculer régulièrement la surface d'un rectangle. Vous pouvez créer une fonction personnalisée qui réalisera ce calcul à partir d'arguments comme le font les fonctions traditionnelles.

DÉFINITION DU PROBLÈME : Pour reprendre l'exemple précédent, vous allez créer une fonction permettant de calculer la surface d'un rectangle. La formule est la suivante :

Surface = Longueur * Largeur

SYNTAXE : Toute macro aura à peu près la même structure :

• une déclaration • un bloc d'arguments (il déclare les variables) • un calcul (il réalise le calcul de la fonction) • une ligne Fin (elle met fin à la macro)

* LA DECLARATION :

La ligne indiquera le mot clé : FONCTION suivi du nom de la fonction auquel seront accolées des parenthéses contenant les arguments. Le Nom de la fonction permet une identification immédiate du contenu de la macro. Par exemple, si le titre est "Exponentiel", vous en déduirez qu'il s'agit de calculer une exponentielle.

* ARGUMENTS : Il s'agit des variables qui vont réceptionner les valeurs passées à la fonction à partir de la feuille de calcul. : = SURFACE (nom de l'argument1;nom de l'argument2) Dans notre exemple les arguments seront : LONGUEUR et LARGEUR Les arguments doivent être séparés par un point virgule

* CALCUL : Il s'agit du calcul effectué par la fonction. Dans notre exemple : SURFACE=LONGUEUR*LARGEUR A noter qu'il est important d'attribuer le resultat final des calculs a une variable portant le nom de la fonction

* FIN FONCTION :

Fonction surface(longueur; largeur) Surface = longueur * largeur Fin Fonction

Page 2: excel Vba Exemple De Creation D'une Macro - afci.fr · excel vba exemple de creation d'une macro fonction afci-newsoft page 1 exemple de creation d'une macro fonction excel ... utiliser

2

MÉTHODOLOGIE : Une macro fonction doit se placer dans une feuille de macro. Pour ce premier exemple, vous allez utiliser une feuille de macro normale. Demandez donc une feuille de macro par :

[INSERTION][MACRO][MODULE][OK] Cette nouvelle feuille porte le nom MODULEn Placez vous au début de la nouvelle feuille Tapez le nom de la fonction suivie d'une parenthése ouvrante FONCTION SURFACE( Déclarez les arguments séparés par un point virgule : = Longueur ;Largeur) Sur la ligne suivante tapez le calcul qui doit se réaliser : = Surface=Longueur * Largeur Terminez par un FIN FONCTION : = FIN FONCTION Votre macro est maintenant terminée.

UTILISATION DE LA MA CRO FONCTION :

Pour utiliser une macro fonction, revenez dans une feuille de calcul puis procédez comme suit : - se placer sur la cellule devant recevoir le résultat de la fonction - appeler le menu [SELECTION][COLLER UNE FONCTION] ou cliquez sur le bouton f(x)

- choisir SURFACE dans PERSONNALISEES- valider par OK - renseigner les arguments en allant cliquer sur les cellules à prendre en compte (ici B2 et B3) - valider par Entrée. Par exemple, = SURFACE (10,50) renvoie 500 comme résultat.

n'oubliez pas de choisir "Personnalisées

Page 3: excel Vba Exemple De Creation D'une Macro - afci.fr · excel vba exemple de creation d'une macro fonction afci-newsoft page 1 exemple de creation d'une macro fonction excel ... utiliser

EXCEL VBA EXEMPLE DE CREATION D'UNE MACRO FONCTION

AFCI-NEWSOFT Page 3

Page 4: excel Vba Exemple De Creation D'une Macro - afci.fr · excel vba exemple de creation d'une macro fonction afci-newsoft page 1 exemple de creation d'une macro fonction excel ... utiliser

4

EXEMPLE DE CREATION D'UNE MACRO COMMANDES

UTILISER L'ENREGISTREUR DE MACROS

L'enregistreur de macro commandes est un outil très simple qui permet d'utiliser rapidement et simplement les macro commandes. Il s'agit de créer 2 graphiques d'après un tableau et de les imprimer ensuite * Création du document principal Vous allez créer le tableau suivant et l'enregistrer sous le nom "Ventes"

Les graphiques souhaités sont: celui des pâtes et du riz pour les 4 trimestres, celui du total pour les 4 trimestres. Si vous ne souhaitez pas réaliser vos graphiques à chaque fois, vous pouvez automatiser l'opération sous forme de macro commande. L'enregistreur de macro mémorise l'ensemble de vos actions dans EXCEL de manière à les répéter à n'importe quel moment. Pour cela, vous devez effectuer les opérations suivantes : Menu [Insertion][Macro][Enregistrer une macro] La fenêtre ci contre apparait ð Donnez le nom de la macro commande Cliquez sur le bouton [Options] : la fenêtre s'agrandit comme ci dessous

Page 5: excel Vba Exemple De Creation D'une Macro - afci.fr · excel vba exemple de creation d'une macro fonction afci-newsoft page 1 exemple de creation d'une macro fonction excel ... utiliser

EXCEL VBA EXEMPLE DE CREATION D'UNE MACRO COMMANDES

AFCI-NEWSOFT Page 5

Définissez la touche raccourci Décidez du classeur à utiliser puis - OK Remarque : A partir de maintenant, toute action sera

enregistrée même si celle-ci est erronée. Dans le cas d 'une erreur, il est préférable

d'annuler et de recommencer. Effectuez toutes les manipulations nécessaires à la création des graphiques et à leur impression Lorsque le travail est terminé et imprimé : Sélectionnez l'option [MACRO][ARRETER L'ENREGISTREMENT] ou cliquez

Pour visualiser le résultat sélectionnez le nouveau module

Bien entendu le résultat sera plus ou moins long selon les difficultés que vous aurez mis en oeuvre. L'enregistreur de macro peut être mis en oeuvre

à n'importe quel moment. Il devient intéressant de s'en servir lorsqu'on développe soit même une macro et qu'une partie, fastidieuse, peut être enregistrée.

PROGRAMMER SES MACROS

Ecrire une macro correspond exactement à écrire un programme avec tous les problèmes que cela pose. Avant de commencer l'écriture de la macro vous devez vous livrer à une analyse complète de vos besoins. Planifier sur le papier toutes les étapes du programme Cerner les étapes qui doivent être enregistrées Le langage de programmation est un langage qui comporte les même structures de programmation que les autres langages. Ce sont principalement ces structures que nous allons étudier ici. Le langage de programmation d'Excel est très verbeux, il doit comporter plus de 600 commandes, chaque commande peut effectuer une action fondamentalement différente selon les paramètre qu'on y ajoutera. Aussi nous vous conseillons de vous reporter à la documentation fournie avec le programme afin de retrouver les commandes que vous souhaitez utiliser. Cette documentation de prés de 700 pages est à peu prés illisible pour les non-initiés. Le but du stage que vous venez de suivre est de vous ouvrir la compréhension de l'univers des macros; il ne prétend pas faire de vous des virtuoses de la programmation, pour y arriver, il vous faudra de longues heures de travail et beaucoup de "prises de tête".

' Mongraphique Macro ' Macro enregistrée le 22/02/1997 par J.L. Roger '' Proc Mongraphique() Plage("A2:C6").Sélectionner FeuilleActive.ObjetsGraphique.Ajouter(189,6; 13,8; 178,8; 65,4). _ Sélectionner Application.ModeCouperCopier = Faux GraphiqueActif.AssistantGraphique Source:=Plage("A2:C6"); _ TypeGraphique:=xlHistogramme; Format:=6; TracéEn:=xlColonnes; _ EtiquettesCatégorie:=1; EtiquettesSérie:=1; PossèdeLégende:=1; _ Titre:="Ventes"; TitreCatégories:=""; TitreValeurs:=""; _ AutreTitre:="" Sélection.Hauteur = 94,2 Fin Proc

Page 6: excel Vba Exemple De Creation D'une Macro - afci.fr · excel vba exemple de creation d'une macro fonction afci-newsoft page 1 exemple de creation d'une macro fonction excel ... utiliser

6

BONNE CHANCE TOUT DE MEME

Page 7: excel Vba Exemple De Creation D'une Macro - afci.fr · excel vba exemple de creation d'une macro fonction afci-newsoft page 1 exemple de creation d'une macro fonction excel ... utiliser

EXCEL VBA LES STRUCTURES DE PROGRAMMATION

AFCI-NEWSOFT Page 7

LES STRUCTURES DE PROGRAMMATION

TRAITEMENTS CONDITIONNELS

Au cours d'un traitement la macro peut être appelée à effectuer une série de calcul plutôt qu'un autre selon le contenu d'une cellule ou d'une variable. Ex : Lors du calcul d'un bilan la macro peut, selon que le bilan est positif ou négatif, enchaîner sur le calcul des impôts à payer ou sur celui des subventions à demander. Vous avez déjà rencontré la fonction SI; dans les macros nous allons utiliser une structure presque identique: SI condition traitement 1 traitement 2 traitement 3 SINON traitement 4 FIN.SI L'exemple précédent montre que la différence avec la fonction SI() réside en la possibilité de faire effectuer plusieurs traitements par le programme. Imaginons l'exemple précité du calcul des impôts ou des subventions. Le résultat de tous les comptes (entrées, sorties) apparaît dans la cellule B5. Nous allons créer une macro qui lorsqu'on la lancera fera tous les calculs. Pour réaliser cette macro, nous introduirons 4 commandes supplémentaires Plage("C1").Sélectionner qui permet de sélectionner une autre cellule CelluleActive.Décaler(1; 0).Sélectionner Qui donne l'adresse décalée par rapport à une

adresse donnée CELLULE.ACTIVE Qui donne l'adresse de la cellule active Ainsi : CelluleActive.Décaler(1; 0).Sélectionner sélectionne la cellule située sur la ligne suivante et sur la colonne précédente en partant de la cellule active. CelluleActive.Formule = valeur Qui entre une formule de calcul ou un texte dans la cellule sélectionnée

Page 8: excel Vba Exemple De Creation D'une Macro - afci.fr · excel vba exemple de creation d'une macro fonction afci-newsoft page 1 exemple de creation d'une macro fonction excel ... utiliser

8

Après avoir réalisé le tableau précédent, ouvrez une feuille de macro et tapez ce qui suit : Proc IMPOTS() AffecteRéf lavar = Application.CelluleActive Définit une variable Si lavar > 0 Alors Teste CelluleActive.Décaler(1; -1).Sélectionner CelluleActive.Formule = "Impots" CelluleActive.Décaler(0; 1).Sélectionner CelluleActive.Formule = "=L(-1)*33%" CelluleActive.Décaler(1; -1).Sélectionner CelluleActive.Formule = "Taxes" CelluleActive.Décaler(0; 1).Sélectionner CelluleActive.Formule = "=L(-2)*10%" CelluleActive.Décaler(1; -1).Sélectionner CelluleActive.Formule = "Bénéfice" CelluleActive.Décaler(0; 1).Sélectionner CelluleActive.Formule = "=l(-3)-(L(-2)+L(-1))" Sinon CelluleActive.Décaler(1; -1).Sélectionner CelluleActive.Formule = "Subvention Etat" CelluleActive.Décaler(0; 1).Sélectionner CelluleActive.Formule = "=L(-1)*8%" CelluleActive.Décaler(1; -1).Sélectionner CelluleActive.Formule = "Subvention Mairie" CelluleActive.Décaler(0; 1).Sélectionner CelluleActive.Formule = "=l(-2)*2%" CelluleActive.Décaler(1; -1).Sélectionner CelluleActive.Formule = "Manque" CelluleActive.Décaler(0; 1).Sélectionner CelluleActive.Formule = "=L(-3)-(L(-2)+L(-1))" Fin Si Fin Proc Pour créer un raccourci sélectionnez le menu OUTILS puis le bouton OPTION Choisissez CTRL +Maj + I Sélectionnez la feuille de calcul en cliquant sur l'onglet, cliquez sur B5 (cellule ou se trouve le résultat et activez les touches CTRL - ñ - I Aussitôt la macro se déroulent et selon que votre résultat est positif ou négatif vous verrez apparaître ceci ou cela

Page 9: excel Vba Exemple De Creation D'une Macro - afci.fr · excel vba exemple de creation d'une macro fonction afci-newsoft page 1 exemple de creation d'une macro fonction excel ... utiliser

EXCEL VBA LES STRUCTURES DE PROGRAMMATION

AFCI-NEWSOFT Page 9

BOUCLES

Les boucles servent à effectuer une action un certain nombre de fois Deux structures de boucles existent: POUR ó SUIVANT et TANT.QUE ó SUIVANT La structure POUR ó SUIVANT va effectuer la tache un nombre de fois prévu à l'avance. La structure TANT.QUE ó SUIVANT va effectuer la tache un nombre de fois dépendant d'une valeur ou d'une condition ex : TANT.QUE COMPTEUR>10. Bien entendu, dans ce genre de boucle, il faudra mettre à jour la valeur du compteur à chaque passage dans la boucle.

COMMANDE POUR ó SUIVANT

Exemple de macro qui mettra en couleur les 8 cellules suivantes, une en jaune, une en cyan La partie relative à la mise en couleur peut être enregistrée (attention, avant de commencer l'enregistrement, prenez soin de vérifier que vous êtes bien en enregistrement relatif). Résultat :

Page 10: excel Vba Exemple De Creation D'une Macro - afci.fr · excel vba exemple de creation d'une macro fonction afci-newsoft page 1 exemple de creation d'une macro fonction excel ... utiliser

10

Il reste à ajouter une ligne au début de la macro pour indiquer le nombre de boucle; et une ligne à la fin de la macro pour indiquer que la boucle se termine ici. L'ordre POUR doit recevoir 3 paramètres • Un nom de compteur ici : I • Une valeur de départ • Un nombre de fois à exécuter la boucle

Proc colorons() Pour i = 1 à 3 Avec Sélection.Intérieur .IndexCouleur = 6 .Motif = xlUni .IndexCouleurMotif = xlAutomatique Fin Avec CelluleActive.Décaler(1; 0).Sélectionner Avec Sélection.Intérieur .IndexCouleur = 26 .Motif = xlUni .IndexCouleurMotif = xlAutomatique Fin Avec CelluleActive.Décaler(1; 0).Sélectionner Avec Sélection.Intérieur .IndexCouleur = 3 .Motif = xlUni .IndexCouleurMotif = xlAutomatique Fin Avec CelluleActive.Décaler(1; 0).Sélectionner Suivant Fin Proc

Page 11: excel Vba Exemple De Creation D'une Macro - afci.fr · excel vba exemple de creation d'une macro fonction afci-newsoft page 1 exemple de creation d'une macro fonction excel ... utiliser

EXCEL VBA LES STRUCTURES DE PROGRAMMATION

AFCI-NEWSOFT Page 11

TANT.QUE ó SUIVANT

Exemple de macro qui générera un échéancier au mois le mois à partir d'une date donnée et un nombre de mois donné. Cette macro permet d'introduire une nouvelle commande : • Boitesaisie(Message;Titre de la fenêtre; valeur par défaut).

Le paramètre "message" s'affichera dans la fenêtre de saisie activée par l'ordre entrée Le paramétre "Titre de la fenêtre" s'affiche dans la barre de titre Le paramétre "Valeur par défaut" permet de donner la valeur la plus utilisée.

La macro, lorsqu'elle sera lancée interrogera l'utilisateur sur la date de départ et sur le nombre de mois souhaité puis grâce à l'ordre TANT.QUE elle remplira autant de cellule qu'il y aura de mois avec la date de départ augmenté d'un mois. Proc échéancier() Nom de la macro nbmois = BoîteSaisie("Nombre de mois"; "Nbre de mois"; 1)

initialise la variable NBMOIS avec la valeur entrée par l'utilisateur

CelluleActive.Formule = nbmois Pose le nombre de mois dans la cellule active CelluleActive.Décaler(1; 0).Sélectionner Passe à la cellule suivante DATEDEP = BoîteSaisie("Date de départ"; "Tapez la") Entre la date de départ CelluleActive.Formule = DATEDEP Pose la date de départ dans la cellule active TantQue nbmois > 0 Début de la boucle CelluleActive.Décaler(1; 0).Sélectionner Passe à la cellule suivante CelluleActive.Formule = "=date(annee(L(-1)C);Mois(L(-1)C)+1;jour(L(-1)C))"

Pose la formule de calcul de date

nbmois = nbmois - 1 Diminue NBMOIS de 1 FinTantQue Remonte au début de la boucle Fin Proc Fin de la macro

résultat sur une feuille blanche :

A l'exécution de la macro, les deux fenêtres "saisies" apparaîtront successivement afin de recevoir les informations. Entrez les valeurs et validez à chaque fois. Nota : pour interrompre une macro qui tourne dans une boucle éternelle il suffit d'utiliser la touche "Echap".

Page 12: excel Vba Exemple De Creation D'une Macro - afci.fr · excel vba exemple de creation d'une macro fonction afci-newsoft page 1 exemple de creation d'une macro fonction excel ... utiliser

12

BOITE DE DIALOGUE Pour créer une boite de dialogue personnalisée vous devez d'abord insérer une nouvelle feuille boite de dialogue Menu [Insertion][Macro][Boite de Dialogue]. La fenêtre ci dessous apparait : Vous pouvez placer des controles sur la fenêtre et lier ces controles à des cellules sur la feuille. Pour ajouter un controle dans la boite, cliquez sur le bouton correspondant de la barre d'outils Dialogue, puis positionnez le dans la boite. Donnez un nom au controle dans la barre de formule dans la zone nom et appuyez sur entrée. Nous allons créer une boite de dialogue calculant le montant des mensualités à verser pour ce qui concerne un emprunt fait à la banque au moment de l'achat d'une automobile. Commencez par créer, sur la feuille courante, deux tableaux correspondant à ceux présentés ci contre. Nommez les zones suivantes : Modéle : A12:A17 Sans_option : B12:B17 Avec_option : C12:C17 Puis insérez un module Boite de dialogue grace aux commandes [Insetion][Macro][Boite de dialogue]. Sélectionnez la boite de dialogue qui vient d'apparaitre et nommez la "Emprunts" en cliquant dans la zone gauche de la barre de commande et en tapant "Emprunts" au clavier.

Page 13: excel Vba Exemple De Creation D'une Macro - afci.fr · excel vba exemple de creation d'une macro fonction afci-newsoft page 1 exemple de creation d'une macro fonction excel ... utiliser

EXCEL VBA BOITE DE DIALOGUE

AFCI-NEWSOFT Page 13

Souvenez vous que pour nommer un objet, il faut le sélectionner; aussitot apparait un nom dans la partie gauche de la barre de commande. Sélectionnez ce nom et changez le. Sur la boite de dialogue, vous allez placer deux zones de texte, une zone de liste, 2cases d'options, 3 étiquettes de manière à ce que la boite de dialogue apparaisse comme ci

dessous.

Nous allons maintenant nommer toutes les zones et les lier à des cellules sur la feuille de calcul. Sélectionnez le titre de la boite en double cliquant dessus.

Remplacez le libellé "Boite de dialogue" par "Emprunts" Sélectionnez la zone de liste.

Nommez la "Liste de véhicules". Menu [Format][Objet].

Dans la zone Plage d'entrées, tapez "Modèles" Dans la zone Cellule liée, tapez "Feuil1!B1" ou tapez le nom de la cellule si vous en avez créé un.

Cliquez OK Sélectionnez la première case d'option

Nommez la "Sans option" Sélectionnez le texte "Case d'option" et remplacez par "Sans option" Menu [Format][Objet]

Sélectionnez "Coché" Dans la zone Cellule liée, tapez "Feuil1!C2"

Cliquez OK

Page 14: excel Vba Exemple De Creation D'une Macro - afci.fr · excel vba exemple de creation d'une macro fonction afci-newsoft page 1 exemple de creation d'une macro fonction excel ... utiliser

14

Sélectionnez la seconde case d'option Nommez la "Avec option" Sélectionnez le texte "Case d'option" et remplacez par "Avec option" Menu [Format][Objet]

Sélectionnez "Non Coché" Dans la zone Cellule liée, tapez "Feuil1!C2"

Cliquez OK Sélectionnez la zone de texte à droite de "Nb mensualités

Nommez la "Mensualités" Sélectionnez la zone de texte à droite de "Apport".

Nommez la "Apport" Testez la boite de dialogue grâce à [Outils][Exécuter la boite de dialogue] Insérez un module de macro et tapez la macro suivante :

PROC BteEmprunt() FeuillesBoiteDialogue("Dialog1").Afficher

Fin Proc Puis sur la feuille de calcul 1 créez un bouton auquel vous affectez la macro BteEmprunt. Cliquez sur le bouton la macro s'exécute en ouvrant la boite de dialogue. Cliquez sur RENAULT, indiquez 36 mensualités et un apport de 5. Cliquez sur OK Les zones mensualités et apport de la boite de dialogue n'étant pas encore lièes à la feuille de calcul, il ne se passe pas encore grand chose lorsque vous cliquez sur OK. Nous allons créer 2 macros supplémentaires que nous allons lier aux 2 zones en question. Dans le module macro, rajoutez :

Proc NbMois() nbm = FeuillesBoîteDialogue("dialog1").ZonesModification("Mensualités").Texte Plage("B6").Sélectionner CelluleActive.Valeur = nbm

Fin Proc

Proc Lapport() APP = FeuillesBoîteDialogue("dialog1").ZonesModification("Apport").Texte Plage("B3").Sélectionner CelluleActive.Valeur = APP

Fin Proc

Page 15: excel Vba Exemple De Creation D'une Macro - afci.fr · excel vba exemple de creation d'une macro fonction afci-newsoft page 1 exemple de creation d'une macro fonction excel ... utiliser

EXCEL VBA BOITE DE DIALOGUE

AFCI-NEWSOFT Page 15

Dans la feuille Dialog1 sélectionnez la zone de modification appelée précedemment "Mensualités" puis menu [Outils][Affecter une macro], choisir NbMois. Faites la même chose pour la zone nommée Apport en lui affectant la macro Lapport. Sélectionnez la Feuil1 et cliquez sur le bouton "Emprunts". Choisissez NISSAN sur 12 mensualités et un apport de 3. Cliquez sur OK Vous constatez que les valeurs s'inscrivent dans le tableau. enfin si vous souhaitez qu'à chaque apparition de la boite de dialogue, les valeurs des zones mensualités et apport soitent remises à zéro, ajoutez dans la procédure BteEmprunt les deux lignes suivantes.

FeuillesBoîteDialogue("dialog1").ZonesModification("Mensualités").Texte=0 FeuillesBoîteDialogue("dialog1").ZonesModification("Apport").Texte=0

Bonne Chance !

Page 16: excel Vba Exemple De Creation D'une Macro - afci.fr · excel vba exemple de creation d'une macro fonction afci-newsoft page 1 exemple de creation d'une macro fonction excel ... utiliser

16

CREATION DE MENUS Lorsque vous êtes satisfait d'une macro et que vous souhaitez l'utiliser souvent, vous avez la possibilité de "l'accrocher" à un menu. Lorsque vous aurez réalisé un ensemble de macros constituant une application cohérente vous aurez la possibilité de créer une nouvelle barre de menu qui "fermera" votre application.

AJOUTER UNE COMMANDE A UN MENU

Pour ajouter une commande à un menu, 3 zones sont nécessaires dans la feuille de macro 1. La macro qui crée la commande du menu. 2. Une zone qui décrit la commande et la macro à exécuter sur cette commande. 3. La macro à exécuter lorsqu'on valide la commande.

Notre exemple montrera comment ajouter la commande [Echéancier] au menu contextuel des cellules. Le menu contextuel s'affiche lorsqu'on pointe sur une cellule et qu'on enfonce le bouton droit de la souris au lieu du bouton gauche. Le menu contextuel offre les options les plus utilisées sur les cellules Sur la feuille macro ou nous avons déjà créée la macro échéancier, nous allons dans une zone vierge décrire les éléments du menu. Nous aurons besoin de 3 cellules en ligne

La première cellule contient le nom de la commande Echéancier

La seconde cellule contient le nom de la macro a lancer MACRO1.XLM!ECHEANCIER

La troisième cellule contient le message à afficher dans la barre d'état

Crée un échéancier au mois le mois

La macro appelée sera celle que nous avons construit sous le nom échéancier. Noter qu'il faudra indiquer le nom de la feuille macro qui la contient.

Page 17: excel Vba Exemple De Creation D'une Macro - afci.fr · excel vba exemple de creation d'une macro fonction afci-newsoft page 1 exemple de creation d'une macro fonction excel ... utiliser

EXCEL VBA CREATION DE MENUS

AFCI-NEWSOFT Page 17

Une fois créée la zone du menu, nous allons créer la macro qui fabriquera le menu. C'est une macro simple qui ne fera que deux ligne

MONMENU =AJOUTER.COMMANDE(7;1;C7:E7;1) =RETOUR()

La fonction AJOUTER.COMMANDE a besoin de 4 paramètres • Le numéro de la barre de menu dans laquelle on doit insérer la commande. Les deux plus

intéressantes sont la barre standard : N° 1 et la barre contextuelle N° 7 • Ici nous avons choisi la barre contextuelle N° 7 • Le numéro du menu dans lequel on veut ajouter la commande. Dans la barre standard le menu

[Fichier] porte le numéro 1, le menu [Edition] porte le numéro 2, le menu [Sélection] porte le numéro 3, Etc.

• La plage de cellule ou nous avons construits la commande (voir paragraphe précédent) • La position à laquelle nous voulons voir apparaître la commande. ainsi, dans le menu [Edition] de

la barre de menu standard si l'on souhaite ajouter une commande entre [Copier] et [Coller] • on devra indiquer le numéro 5 La macro se termine par le sempiternel RETOUR() Il ne reste plus qu'à nommer la macro et la lancer dans la feuille de calcul pour qu'elle soit activée.

Page 18: excel Vba Exemple De Creation D'une Macro - afci.fr · excel vba exemple de creation d'une macro fonction afci-newsoft page 1 exemple de creation d'une macro fonction excel ... utiliser

18

MENUS

AJOUT DANS LA BARRE ACTIVE

Avec BarreMenusActive.Menus("?") AffecteRéf x = .ElémentsMenus.Ajouter(" Plus d'inf&o"; "ma_Macro") Fin Avec Cette procédure ajoute une commande "Plus d'info" dans le menu d'aide de la barre de menu active. Lorsque cette commande est sélectionnée, Excel exécute la macro dénommée "ma_macro"

Page 19: excel Vba Exemple De Creation D'une Macro - afci.fr · excel vba exemple de creation d'une macro fonction afci-newsoft page 1 exemple de creation d'une macro fonction excel ... utiliser

EXCEL VBA 35 COMMANDES A MAITRISER

AFCI-NEWSOFT Page 19

35 COMMANDES A MAITRISER

COMMANDES DE SELECTION

ATTEINDRE Application.Atteindre référence:=FeuillesCalcul(1).Plage("A154");défilement:=Vrai Sélectionne une plage quel classeur et active ce dernier s'il n'est pas encore actif.

SELECTIONNER Plage(Cellules(1;1); Cellules(3;2)).Sélectionner Sélectionne la plage allant de la cellule située ligne 1, Colonne 1 à la cellule située Ligne 3 colonne 2

CELLULEACTIVE AffecteRéf maSélection = Application.CelluleActive maSélection.Valeur = 42 Cet exemple désigne la cellule active comme valeur de la variable maSélection, puis désigne 42 comme valeur de la cellule active. Avec CelluleActive .Police.Italique = Non (.Police.Italique) Fin Avec Cet exemple applique ou enlève le format italique du texte contenu dans la cellule active.

PLAGE Une cellule, une ligne, une colonne, une sélection de cellules, une sélection multiple ou une plage 3D. Voici quelques exemples d'utilisation des principales propriétés et méthodes de l'objet Plage. Méthode Cellules Utilisez la méthode Cellules pour renvoyer une seule cellule, comme dans les exemples suivants : Cellules(1;1).Valeur = 24 'Désigne 24 comme valeur de la cellule A1 Cellules(2;1).Formule = "=SOMME(B1:B5)" 'Entre une formule dans la cellule A2 Bien que vous puissiez utiliser Plage("A1") ou simplement[a1] pour renvoyer la cellule A1, ces formes ne sont pas aussi utiles que la notation Cellules(indexLigne; indexColonne). L'exemple suivant illustre pourquoi la notation Cellules(indexLigne; indexColonne) est tellement utile (copiez le code dans un module, puis exécutez-le à partir d'une feuille de calcul) : Proc DéfinirTable()

Page 20: excel Vba Exemple De Creation D'une Macro - afci.fr · excel vba exemple de creation d'une macro fonction afci-newsoft page 1 exemple de creation d'une macro fonction excel ... utiliser

20

Pour anVar = 1 à 5 Cellules(1;anVar + 1).Valeur = 1990 + anVar Suivant anVar Pour leTrimestre = 1 à 4 Cellules(leTrimestre + 1;1).Valeur = "T" & leTrimestre Suivant leTrimestre Fin Proc Bien que vous puissiez manipuler les références de style A1 à partir de fonctions de chaîne de caractères de Visual Basic, il est beaucoup plus facile (et beaucoup plus rationnel au niveau de la programmation) d'utiliser la notation Cellules(1;1). Méthode Plage Utilisez la méthode Plage pour renvoyer une plage de cellules rectangulaire. L'exemple suivant remplit la plage A1:H8 avec la chaîne de caractères "Test":

Proc RemplirLaPlage() Plage(Cellules(1;1); Cellules(8;8)).Valeur = "Test" Fin Proc

Vous pouvez également recourir à la méthode Plage pour renvoyer une plage nommée, comme dans l'exemple suivant :

Proc EffacerCritèresBaseDeDonnées() Plage("Critères").EffacerContenu Fin Proc

Sélections multiples Utilisez les méthodes Réunion et Plage pour renvoyer des sélections multiples. L'exemple suivant crée un objet nommé maSélectionMultiple, le définit comme la sélection multiple de A1:B2 et C3:D4, puis le sélectionne :

Proc AfficherSélectionMultiple() Dcl p1; p2; maSélectionMultiple En Plage (Dcl veut dire déclare) AffecteRéf p1 = Plage(Cellules(1;1); Cellules(2;2)) AffecteRéf p2 = Plage(Cellules(3;3); Cellules(4;4)) AffecteRéf maSélectionMultiple = Réunion(p1;p2) maSélectionMultiple.Sélectionner Fin Proc

Page 21: excel Vba Exemple De Creation D'une Macro - afci.fr · excel vba exemple de creation d'une macro fonction afci-newsoft page 1 exemple de creation d'une macro fonction excel ... utiliser

EXCEL VBA 35 COMMANDES A MAITRISER

AFCI-NEWSOFT Page 21

MÉTHODE DÉCALER Quand vous enregistrez des macros en utilisant des références relatives, l'enregistreur de macro utilise la méthode Décaler pour noter les sélections que vous opérez dans une feuille de calcul. Par exemple, voici ce qui est enregistré dans un module Visual Basic lorsque vous déplacez la cellule active de A1 en B2 :

Proc Macro(1) CelluleActive.Décaler(1;1).Plage("A1").Sélectionner Fin Proc

SELECTIONS PRECEDENTES Application.SélectionsPrécédentes(1).Sélectionner

SELECTIONNER JUSQU'A LA DERNIERE CELLULE Plage(CelluleActive; Cellules(xlDernièreCellule)).Sélectionner Sélectionne la plage qui va de la cellule active jusqu'à la derniere cellule de la ligne Plage(CelluleActive; Cellules(; xlDernièreCellule)).Sélectionner Sélectionne la plage qui va de la cellule active jusqu'à la derniere cellule de la colonne Plage(CelluleActive; Cellules(xlDernièreCellule; xlDernièreCellule)).Sélectionner Sélectionne la plage qui va de la cellule active jusqu'à la derniere cellule de la ligne et la dernière cellule de la colonne.

SELECTIONNER UNE FEUILLE Feuilles("Nom de la feuille").Sélectionner Exemple Feuilles("janvier").Sélectionner ou Feuilles("Feuil2").Sélectionner

OUVRIR UN CLASSEUR Classeurs.Ouvrir NomFichier:="FACTURE.XLS" Ouvre le classeur Facture Feuilles("Feuil3").Sélectionner Sélectionne la feuille 3 du classeur Facture

COMMANDES DE SAISIES

MESSAGE Message("Tiens voila dumoulin") Affiche une boite avec le message Message(CelluleActive) Affiche dans une boite le contenu de la cellule active Syntaxe approffondie : Message(Texte du message;style de la boite;Titre) ou le style de la boite définit les boutons apparents, les icones d'alerte, et le bouton par défaut. Exemple Proc Question()

Page 22: excel Vba Exemple De Creation D'une Macro - afci.fr · excel vba exemple de creation d'une macro fonction afci-newsoft page 1 exemple de creation d'une macro fonction excel ... utiliser

22

MSG="Voulez vous continuer" STYLE=vbOuiNon+vbCritique+vbBoutonDéfaut2 TITRE="Démo de Message" Réponse=Message(Msg;Style;titre) Si Réponse=vbOui alors Cellules(3;3).valeur="C'est oui" Sinon Cellules(3;3).valeur="C'est non" FinSi Fin proc COMMANDES DE MANIPULATION