CRÉER DES PROCÉDURES FUNCTION



Documents pareils
Programmation VBA/Excel. Programmation VBA. Pierre BONNET. Masters SMaRT & GSI - Supervision Industrielle P. Bonnet

TD3 - Facturation avec archivage automatisé

TABLEAU CROISE DYNAMIQUE

1. Introduction Création d'une macro autonome Exécuter la macro pas à pas Modifier une macro... 5

Formation VBA 3 Interagir

Visual Basic for Applications

SHERLOCK 7. Version du 01/09/09 JAVASCRIPT 1.5

PROGRAMMATION EVENEMENTIELLE sur EXCEL

Initiation à VBA pour Excel. Philippe Bernard Ingénierie Economique et Financière Université Paris-Dauphine

Comment créer et utiliser une fonction

Pour signifier qu'une classe fille hérite d'une classe mère, on utilise le mot clé extends class fille extends mère

IMPORTATION, CRÉATION, MANIPULATION, EXPORTATION DE DONNÉES STATISTIQUES

FORMATION au VBA Pour EXCEL. Version 2007 & +

Stockez et organisez vos données sous Excel. Une approche systématique, structurée et simplifiée

Publipostage avec Calc

Application 1- VBA : Test de comportements d'investissements

Guide de formation avec cas pratiques. Programmation. Philippe Moreau Patrick Morié. Daniel-Jean David

Université Ibn Zohr Excel Résume de cours

Excel. Identification. Informations sur vos besoins et objectifs. Notions fondamentales. Fiche de validation des besoins en formation Bureautique

Parcours FOAD Formation EXCEL 2010

Préparation à l examen EFA en Macro

1 TD 2 : Construction d'une chier Acrobat et envoi par

Date M.P Libellé Catégorie S.Catégorie Crédit Débit Solde S.B

Excel 2007 Niveau 3 Page 1

Traitement de texte : Quelques rappels de quelques notions de base

EXCEL PERFECTIONNEMENT CALCULS AVANCES

COURS DE MS EXCEL 2010

Le publipostage avec Open Office

Jexcel. V1.1.4 Manuel d'utilisation. modifié le 16 nov. 2004

Algorithmique et programmation : les bases (VBA) Corrigé

TP n 2 Concepts de la programmation Objets Master 1 mention IL, semestre 2 Le type Abstrait Pile

Traitement des données avec Microsoft EXCEL 2010

les Formulaires / Sous-Formulaires Présentation Créer un formulaire à partir d une table...3

Microsoft Excel Présentation du tableur Excel

NOS FORMATIONS EN BUREAUTIQUE

EXCEL TUTORIEL 2012/2013

Microsoft Excel. Tableur

Valeur cible et solveur. Les calculs effectués habituellement avec Excel utilisent des valeurs numériques qui constituent les données d'un problème.

Utilitaires méconnus de StrataFrame

.NET - Classe de Log

Programmation VBA. Excel Daniel-Jean David. et Groupe Eyrolles, 2014, ISBN :

Excel 2010 Intermediaire

Automatisation d'une Facture 4. Liste Déroulante Remises Case à cocher Calculs

Impact des robots d indexation sur le cache de second niveau de SPIP IMBERTI Christophe - SG/SPSSI/CP2I/DO Ouest 06/06/2012 mis à jour le 05/07/2012

Se Perfectionner à Excel

Débuter avec OOo Base

CATALOGUE DES FORMATIONS

Calc 2 Avancé. OpenOffice.org. Guide de formation avec exercices et cas pratiques. Philippe Moreau

Cours Excel : les bases (bases, texte)

Leica Application Suite

Introduction aux macros et au Basic

Cours Informatique Master STEP

Création de Sous-Formulaires

L'instruction if permet d'exécuter des instructions différentes selon qu'une condition est vraie ou fausse. Sa forme de base est la suivante:

EXCEL PERFECTIONNEMENT SERVICE INFORMATIQUE. Version /11/05

Cours Modélisation et Programmation avec tableur

Programmation Visual Basic. Visite guidée d'un programme Visual Basic 6.0

Livret Cours Microsoft office 2007 Tableur Excel Perfectionnement

Guide d'utilisation. OpenOffice Calc. AUTEUR INITIAL : VINCENT MEUNIER Publié sous licence Creative Commons

Créer une base de données

BML Informatique Tableur OpenOffice.org Calc Mercredi 8 avril 2015

MODE OPERATOIRE OPENOFFICE BASE

Installation de Windows 2003 Serveur

La formation informatique en ligne INFOS COURS - FORUM SUPPORT DE COURS WOR MICROSOFT

F0RMAT I0N BUREAUTIQUE

Les tests logiques avec Excel

Semestre3 (Licence Economie et Gestion) EXCEL : interface. Une fois lancé, Excel crée par défaut un "classeur" nommé «classeur1.xls».

POUR ALLER UN PEU PLUS LOIN SUR UN TABLEUR. Version EXCEL

Affectation standard Affectation modifiée (exemple)

P r ob lé m a t iq u e d e la g é n é r icit é. Pr in cip e d e la g é n é r icit é e n Ja v a ( 1 /3 )

REPUBLIQUE TUNISIENNE MINISTERE DE L EDUCATION ET DE LA FORMATION. 4 ème année de l enseignement secondaire Section : Economie et Gestion.

Utilisation de l'outil «Open Office TEXTE»

Procédures Stockées WAVESOFT ws_sp_getidtable Exemple : ws_sp_getnextsouche Exemple :... 12

Guide de démarrage Janvier 2012

Visual Basic.NET Interaction avec Excel

Note de cours. Introduction à Excel 2007

Formations 2015 Bureautique

LE TABLEUR OPENOFFICE CALC : CONTRÔLES DE FORMULAIRES ACCÈS AUX BASES DE DONNÉES

Présentation du langage et premières fonctions

RACCOURCIS CLAVIERS. DEFINITION : Une «combinaison de touches» est un appui simultané sur plusieurs touches.

Messages d'erreurs. Redémarrez votre PC en cliquant sur Démarrer, en sélectionnant ensuite Arrêter puis en cochant Redémarrer

Vue d'ensemble OBJECTIFS

Comment Utiliser les Versions, les Modification, les Comparaisons, Dans les Documents

GUIDE Excel (version débutante) Version 2013

Comment créer des rapports de test professionnels sous LabVIEW? NIDays 2002

Comment Connecter une Base de Données MySQL via un Driver JDBC Avec OpenOffice.org

Sub CalculAnnuite() Const TITRE As String = "Calcul d'annuité de remboursement d'un emprunt"

Cours Access 1) INTRODUCTION AU SGBD...4 2) LES TABLES...4

CATALOGUE DES FORMATIONS 2014

Débuter avec Excel. Excel

A. Introduction. Chapitre 7

Import de comptes (xls)

Chapitre 2 Devine mon nombre!

INSERER DES OBJETS - LE RUBAN INSERTION... 3 TABLEAUX

Excel et les bases de données

Protocoles DHCP et DNS

Transcription:

1 CRÉER DES PROCÉDURES FUNCTION Dans ce chapitre La différence entre les procédures Sub et Function Comment créer des fonctions personnalisées? À propos des fonctions et des arguments Quelques exemples VBA permet de créer deux types de procédures : Sub et Function. Les procédures Sub ont été traitées dans le chapitre précédent. Intéressonsnous maintenant aux procédures Function. Les procédures Sub contre les procédures Function Une procédure Sub est une commande exécutable par l'utilisateur ou par une autre procédure. Les procédures Function renvoient toujours une valeur, à l'instar des fonctions de la feuille de travail d'excel et des fonctions intégrées de VBA. Les procédures Function peuvent également utiliser des arguments. Les procédures Function sont souples et peuvent être utilisées dans deux situations : " En tant qu'élément d'une expression dans une procédure VBA " Dans les formules créées d'une feuille de travail Vous pouvez utiliser une procédure Function tandis que vous travaillez avec une fonction de feuille de travail d'excel ou une fonction VBA.

198 EXCEL 2002 ET VBA Pourquoi créer des fonctions personnalisées? Les débutants connaissent les fonctions les plus courantes de la feuille de travail d'excel : SOMME, MOYENNE et SI. Excel contient plus de 300 fonctions prédéfinies dans la feuille de travail, ainsi que des fonctions disponibles à travers le complément Toolpak Analysis. Si cela ne suffit pas, vous pouvez créer des fonctions personnalisées en utilisant VBA. Quel intérêt y a-t-il à créer autant de nouvelles fonctions? Cela simplifie le travail, tout simplement.les fonctions personnalisées sont très utiles dans les formules de feuille de travail et les procédures VBA. Par exemple, vous pouvez créer une fonction personnalisée capable de raccourcir vos formules de manière significative. Les formules courtes sont plus lisibles et plus faciles à modifier. En revanche, les fonctions personnalisées sont beaucoup plus lentes que les fonctions intégrées. Quand vous créez des applications, certaines procédures répètent des calculs. Il est souvent possible de créer une fonction personnalisée qui exécute un calcul. Ensuite, vous pouvez appeler la fonction à partir de votre procédure. Une fonction personnalisée peut donc éliminer les redondances de code et réduire le nombre d'erreurs. Vos collègues peuvent également profiter de vos fonctions spécialisées. Bien que de nombreuses personnes rechignent à créer des fonctions personnalisées, le processus n'est pas difficile. Ce type de fonctions est agréable à créer et à insérer dans la boîte de dialogue des fonctions. Il donne l'impression que l'on remanie Excel. Un premier exemple : une fonction personnalisée La fonction personnalisée suivante est définie dans un module VBA. Elle s'appelle Reverse et utilise un argument simple. Elle inverse les caractères et renvoie le résultat comme chaîne de caractères. Function Reverse(InString) As String ' inverse l'argument Reverse = "" StringLength = Len(InString) For i = StringLength To 1 Step -1 Reverse = Reverse & Mid(InString, i, 1) Next i La section Analyse d'une fonction personnalisée, plus loin dans ce chapitre, explique le fonctionnement de cette fonction. Quand vous créez des fonctions personnalisées pour une formule de feuille de tra-

CHAPITRE 10 - CRÉER DES PROCÉDURES FUNCTION 199 vail, stockez-les dans un module normal VBA. Si vous les placez dans un module de code d'une feuille ou dans ThisWorkbook, elles ne fonctionneront pas dans vos formules. Utilisation d'une fonction dans une feuille de travail Quand vous écrivez une formule utilisant la fonction Reverse, Excel exécute le code pour obtenir la valeur (voir Figure 10-1). Voici comment vous pouvez utiliser la fonction dans une formule : La fonction s'exécute comme la fonction intégrée d'une feuille de travail. Vous pouvez l'insérer dans une formule avec la commande Insertion! Fonction ou le bouton Insérer un fonction de la barre d'outils standard (dans la boîte de dialogue Insérer une fonction, les fonctions personnalisées se trouvent dans la catégorie Personnalisées). La Figure 10.1 donne des exemples de cette fonction en action. Les formules résident dans la colonne B et utilisent les textes de la colonne A comme arguments. Comme vous pouvez le constater, elle renvoie son argument simple, mais ses caractères sont inversés. FIGURE 10-1 Utilisation d'une fonction personnalisée dans une formule de feuille de travail. Vous pouvez imbriquer des fonctions personnalisées et les combiner avec d'autres éléments dans vos formules. La formule suivante utilise la fonction Reverse deux fois. Le résultat est la chaîne de caractères initiale : =Reverse(Reverse(A1))

200 EXCEL 2002 ET VBA Utilisation de la fonction dans une procédure VBA La procédure suivante VBA est définie dans le même module que la fonction personnalisée Reverse. Elle affiche une zone de saisie pour solliciter un texte de l'utilisateur, puis emploie la fonction intégrée VBA MsgBox pour afficher l'entrée de l'utilisateur après le traitement par la fonction Reverse (voir Figure 10-2). L'entrée initiale apparaît comme légende dans la zone de message. Sub ReverseIt() UserInput = InputBox("Entrée un texte :") MsgBox Reverse(UserInput),, UserInput End Sub Dans l'exemple illustré Figure 10-2, la chaîne de caractères entrée en réponse à la fonction InputBox était Excel Programming With VBA. La fonction MsgBox affiche le texte renversé. FIGURE 10-2 Utilisation d'une fonction personnalisée dans une procédure VBA. Analyse de la fonction personnalisée Les procédures Function peuvent être beaucoup plus complexes, et si notre exemple n'est pas d'une grande utilité, son analyse peut vous aider à comprendre leur comportement. Voici de nouveau le code : Function Reverse(InString) As String ' inverse l'argument Dim i as Integer, StringLength as Integer Reverse = "" StringLength = Len(InString) For i = StringLength To 1 Step -1 Reverse = Reverse & Mid(InString, i, 1) Next i La procédure commence par le mot-clé Function, et non par Sub. Elle est suivie du nom de la fonction (Reverse). Cette fonction personnalisée n'utilise qu'un argument (InString), placé entre parenthèses. As String définit le type

CHAPITRE 10 - CRÉER DES PROCÉDURES FUNCTION 201 de données de la valeur de retour de la fonction. Excel utilise le type Variant si aucun type n'est indiqué. La deuxième ligne est un commentaire (facultatif) qui décrit ce que réalise la fonction. Ensuite, la procédure initialise le résultat comme chaîne de caractères vide. Notez que j'utilise le nom de la fonction comme variable. Quand une fonction se termine, elle renvoie toujours la valeur courante de la variable correspondant au nom de la fonction. La fonction Len détermine alors la longueur de la chaîne de caractères d'entrée et assigne cette valeur à la variable StringLength. Les trois instructions suivantes se composent d'une boucle For-Next. La procédure boucle pour chaque caractère de la zone de saisie et construit la chaîne de caractères. Notez que la valeur du pas dans la boucle For-Next est négative (pour compter à l'envers). L'instruction dans la boucle emploie la fonction Mid pour renvoyer un caractère unique à partir de la chaîne de saisie. Quand la boucle est terminée, Reverse est une chaîne de caractères en ordre inverse. Cette chaîne est la valeur que la fonction renvoie. La procédure se termine avec une instruction.ce qui est impossible à réaliser avec des fonctions personnalisées Pour développer des fonctions personnalisées, il est important de bien distinguer les fonctions appelées à partir d'autres procédures et les fonctions VBA utilisées dans les formules des feuilles de travail. Les procédures Function utilisées dans les formules de feuilles de travail doivent être passives. Par exemple, le code dans une procédure Function ne peut pas manipuler des plages de cellules. Vous pouvez être tenté d'écrire une fonction personnalisée pour changer le formatage des cellules. Une fonction pourrait changer la couleur du texte dans une cellule basée sur la valeur des cellules, par exemple. Une telle fonction est impossible à écrire. Elle renverra toujours une erreur. En effet, une fonction renvoie toujours une valeur, mais n'exécute jamais d'actions avec des objetsles procédures Function Une procédure Function personnalisée a beaucoup de chose en commun avec une procédure Sub. Déclaration d'une fonction La syntaxe pour déclarer une fonction est la suivante : [Public Private][Static] Function name [(arglist)][as type] [instructions] [name = expression] [Exit Function] [instructions] [name = expression]

202 EXCEL 2002 ET VBA TABLEAU 10-1 Mot clé Public Private Static Function Name Arglist Type Instructions Exit Function Les arguments de l'instruction Function Description Indique que la procédure Function est accessible à toutes les autres procédures dans tous les autres modules de tous les projets actifs VBA d'excel (facultatif). Indique que la procédure Function est accessible seulement à d'autres procédures dans le même module (facultatif). Indique que les valeurs des variables déclarées dans la procédure Function sont préservées entre les appels (facultatif). C'est le mot-clé pour signaler le début d'une procédure qui renvoie une valeur ou d'autres données (requis). Représente n'importe quel nom valide de procédure Function devant suivre les mêmes règles qu'un nom de variable. Quand la fonction se termine, le résultat est assigné à son propre nom (requis). Représente une liste de variables correspondant aux arguments passés vers la procédure Function. Les arguments sont joints entre parenthèses. Utilisez une virgule pour séparer des paires d'arguments (facultatif). Type de données retourné par la procédure Function (facultatif). Toutes instructions valides VBA (facultatif). Instruction qui oblige une sortie immédiate de la procédure Function avant son accomplissement (facultatif). Mot-clé qui indique la fin de la procédure Function (requis). En ce qui concerne les fonctions personnalisées dans VBA, n'oubliez pas qu'une valeur est toujours assignée au nom de la fonction au moins une fois (généralement quand l'exécution est terminée). Pour créer une fonction personnalisée, commencez par insérer un module VBA (vous pouvez utiliser un module existant.) Écrivez le mot-clé Function suivi du nom de la fonction et d'une liste de ses arguments entre parenthèses. Vous pouvez également déclarer le type de la valeur de retour en utilisant le mot-clé As (ceci est facultatif mais recommandé). Insérez le code VBA qui exécute le travail et assurez-vous qu'une valeur appropriée est assignée au moins une fois au nom de la fonction dans le corps de la procédure Function. Terminez la fonction avec une instruction. Les noms de fonctions doivent respecter les règles des noms de variables. Si vous envisagez d'utiliser votre fonction personnalisée dans une formule de feuille de travail, assurez-vous que le nom n'a pas la forme d'une adresse de cellule (par exemple, une fonction nommée j21 ne fonctionne pas dans une formule) ou d'une fonction intégrée

CHAPITRE 10 - CRÉER DES PROCÉDURES FUNCTION 203 La portée d'une fonction Le Chapitre 9 a présenté la portée d'une procédure (Public ou Private). La portée d'une fonction est équivalente. Elle détermine son appel par d'autres procédures dans d'autres modules ou dans des feuilles de travail. Voici quelques points importants concernant la portée d'une fonction : " Si vous ne déclarez pas la portée d'une fonction, la portée par défaut est Public. " Les fonctions déclarées As Private n'apparaissent pas dans la boîte de dialogue Insérer une fonction d'excel. Par conséquent, si vous créez une fonction qui doit être utilisée uniquement dans une procédure VBA, déclarez-la comme Private pour que les utilisateurs n'essayent pas de l'utiliser dans une formule. " Si votre code VBA doit appeler une fonction définie dans un autre classeur, placez une référence vers l'autre classeur avec la commande Outils! Références de l'éditeur de VB. Exécuter des procédures Function À la différence d'une procédure Sub, il n'y a que deux façons d'exécuter une procédure Function : " En appelant la fonction à partir d'une autre procédure. " En utilisant la fonction dans une formule de feuille de travail. À partir d'une procédure La technique est équivalente à celle qui permettait d'appeler les fonctions intégrées. Par exemple, après avoir défini une fonction appelée SumArray, vous pouvez taper l'instruction suivante : Total = SumArray(MyArray) Cette instruction exécute la fonction SumArray avec MyArray en tant qu'argument. Elle renvoie le résultat de la fonction en l'affectant à la variable Total. Vous pouvez aussi faire appel à la méthode Run de l'objet Application. Voici un exemple : Total = Application.Run ("SumArray","MyArray") Le premier argument de la méthode Run est le nom de la fonction. Les arguments suivants représentent les arguments de la fonction. Les ar-

204 EXCEL 2002 ET VBA guments de la méthode Run peuvent être des chaînes littérales (comme ci-dessus), des nombres ou des variables. Dans une formule de feuille de travail La technique est équivalente à celle qui permettait d'appeler les fonctions intégrées. Assurez-vous néanmoins qu'excel peut localiser la fonction. Si la procédure Function est dans le même classeur, vous ne devez rien faire de spécial. Si elle est dans un classeur différent, vous devez indiquer à Excel où elle se trouve. Vous pouvez procéder de trois façons : " Faites précéder le nom de la fonction d'une référence de fichier. Par exemple, pour utiliser une fonction appelée CountNames et définie dans un classeur nommé Myfuncs.xls, employez la référence suivante : =Myfuncs.xls!CountNames(A1:A1000) Si vous insérez la fonction avec la boîte de dialogue Insérer une fonction, la référence du classeur est insérée automatiquement. " Installez une référence dans le classeur avec la commande Outils! Références de l'éditeur de VB. Si la fonction est définie dans un classeur référencé, vous n'avez pas besoin d'utiliser le nom de feuille de travail. Lorsque le classeur dépendant est assigné comme référence, la boîte de dialogue Insérer une fonction continue à insérer la référence du classeur. " Créez un complément. Dans ce cas, la référence de fichier est inutile si vous utilisez l'une des fonctions dans une formule. Cependant, le complément doit être installé. Notez que vos procédures Function n'apparaissent pas dans la boîte de dialogue Macros quand vous choisissez la commande Outils! Macro! Macros. Par ailleurs, vous ne pouvez pas choisir de fonction avec la commande Exécution! Exécuter! Sub! UserForm de VBE (F5) si le curseur est situé dans une procédure Function (vous obtenez la boîte de dialogue Macro qui permet de choisir une macro à exécuter). En conséquence, testez vos fonctions quand vous les développez. Une solution consiste à installer une procédure simple qui appelle la fonction. Si la fonction est conçue pour être utilisée dans des formules de feuille de travail, écrivez une formule simple pour la tester.

CHAPITRE 10 - CRÉER DES PROCÉDURES FUNCTION 205 Les arguments de la procédure function Gardez à l'esprit les points suivants au sujet des arguments de procédure Function : " Les arguments peuvent être des variables (tableaux y compris), des constantes, des valeurs littérales ou des expressions. " Certaines fonctions n'ont pas d'argument. " Certaines fonctions ont un nombre fixe d'arguments requis (de 1 à 60). " Certaines fonctions ont une combinaison d'arguments requis et facultatifs. Si votre formule utilise une fonction personnalisée de feuille de travail qui renvoie #VALUE!, il y a une erreur dans votre fonction. L'erreur peut être provoquée par des erreurs logiques dans votre code ou par un passage d'arguments incorrects vers la fonction. Voir Les fonctions de mise au point, plus loin dans ce chapitre. RÉINVENTER LA ROUE La plupart des fonctions intégrées d'excel sont impossibles à créer dans VBA. Cependant, certaines peuvent être reproduites. Pour m'amuser, j'ai écrit ma propre version de la fonction UPPER d'excel. Elle convertit une chaîne de caractères en majuscule. Je l'ai nommée UpCase : Function UpCase(InString As String) As String ' Convertit cet argument en majuscule. Dim StringLength As Integer Dim i As Integer Dim ASCIIVal As Integer Dim CharVal As Integer StringLength = Len(InString) UpCase = InString For i = 1 To StringLength ASCIIVal = Asc(Mid(InString, i, 1)) CharVal = 0 If ASCIIVal >= 97 And ASCIIVal <= 122 Then CharVal = -32 Mid(UpCase, i, 1) = Chr(ASCIIVal + CharVal) End If Next i Quelle sera la différence avec la fonction intégrée? J'ai créé une feuille de travail qui a appelé la fonction 10 000 fois en utilisant un argument de 26 caractères de long. La feuille de travail a mis 13 secondes pour calculer. J'ai alors substitué la fonction UPPER d'excel et exécuté un nouvel essai. Le recalcul fut pratiquement instantané.