Fonction Personnalisée sous EXCEL
Transcription
Fonction Personnalisée sous EXCEL
Tableur Fonction Personnalisée sous EXCEL Les fonctions sont des unités de programme qui retournent un résultat. Function Nom-de-la-fonction ( [liste des paramètres] ) Type du résultat Instructions Sortie immédiate, éventuellement, [Exit Function] Nom-de-la-fonction = valeur End Function Une fonction renvoie la valeur d'une variable dont vous devez définir le type. Le résultat doit être affecté au nom de la fonction pour être exploitable dans la procédure appelante. Dans une entreprise, le calcul de la commission des commerciaux est progressive lorsque le produit est en promotion. La règle est la suivante : Si le montant des ventes est inférieur ou égal à 2000 € HT, le taux appliqué est de 6%, sur les 900 € HT suivant , le taux sera de 6,5%, sur les 900 € HT suivant, le taux sera de 7%, au de là il sera de 7,5%. L’arbre de calcul de la commission progressive (COMPROG) est très simple. Par contre la règle de gestion est complexe. COM PROG V entes Début Si Ventes <=2000 :Alors COMPROG ← Ventes * 6% Sinon Si Ventes < 2900 : Alors COMPROG ← 2000 * 6% + (Ventes-2000) * 6.5% Sinon Si Ventes < 3800 : COMPROG ← 2000 * 6% + (2900-2000) * 6.5% + (Ventes-2900) * 7% Alors Sinon: COMPROG ← 2000 * 6% + (2900-2000) * 6.5% + (3800-2900) * 7% + (Ventes-3800) * 7.5% Fin Si FinSi FinSi Fin En l’implantant en tant que formule Excel, on obtient : =SI(ESTVIDE(Produits);"";SI(Taux="progressive"; SI(Ventes>3800;(((Ventes-3800)*7,5%) + (900*7%) + (900*6,5%) + (2000*6%)); SI(Ventes>2900;(((Produits-2900)*7%) + (900*6,5%) + (2000*6%)); SI(Ventes>2000;(((Ventes-2000)*6,5%) + (2000*6%)); SI(Ventes<=2000;Ventes*6%))));"")) Dans la formule précédente, la partie surlignée correspond au calcul de la commission progressive. Elle peut avantageusement être remplacée par l’appel à une fonction qui permettra de simplifier l’écriture. =SI(ESTVIDE(Produits);"";SI(Taux="progressive"; COMPROG(Ventes) ;"")) On essaiera donc d’écrire des formules simples dans Excel. Les calculs complexes seront traités par des fonctions qui renverront la valeur souhaitée. Jacques Chambon 1/6 Tableur Le calcul de la commission progressive est réalisé par une fonction appelée COMPROG. Nom de la fonction Paramètres entre parenthèses COMPROG (C9) COM P ROG Ventes Il est important de remarquer que le nom de la fonction sera donné par la racine de l’arbre . Les données fournissent les paramètres Ecriture d’une Fonction personnalisée Une fonction personnalisée va être écrite sous forme textuelle, dans l’environnement VBA d’Excel. Cette nouvelle fenêtre est appelée à partir de la feuille de travail Excel, en appuyant simultanément sur les touches Alt + F11. La fenêtre de Visual Basic est découpée en 4 fenêtres : Le projet qui donne la liste de tous les feuilles ouvertes dans Excel La fenêtre des propriétés qui donne des informations sur l’objet sélectionné. La fenêtre d’exécution qui permet de visualiser les valeurs des variables utilisées par un programme. La fenêtre de code qui permet de frapper les instructions des programmes. Si cette partie de l’écran est grise, appuyer sur la touche F7. Pour être accessible à partir de n’importe qu ‘elle feuille du classeur Excel, il vous faut créer un module. Jacques Chambon 2/6 Tableur Insertion d’un module Pour changer le nom d’un module, il faut changer la propriété « name » de l’objet « Module1 » Appelez le « Fonctions » Vous allez maintenant définir des fonctions dans ce module. Création d’une fonction Une Fonction fait partie des procédures. Il faut donner son nom (sans espaces), sélectionner le bouton « Function » et valider en cliquant sur OK. Vous obtenez alors l’espace de travail suivant. Jacques Chambon 3/6 Tableur L’algorithme à traduire en Visual Basic est le suivant : Si VENTES < 2000 Alors COMPROG1 VENTES * 0.06 Sinon Si VENTES < 2900 Alors COMPROG1 2000 * 0.06 + (VENTES - 2000) * 0.065 Sinon Si VENTES < 3800 Alors COMPROG1 2000 * 0.06 + (2900 - 2000) * 0.065 + (VENTES - 2900) * 0.07 Sinon COMPROG1 2000 * 0.06 + (2900 - 2000) * 0.065 + (3800 - 2900) * 0.07 + (VENTES - 3800) * 0.075 Fin Si FinSi Fin Si Il va falloir traduire cette algorithme en un ensemble d’instructions Visual Basic, que seules peut comprendre Excel. Ces instructions en anglais, respectent une syntaxe particulière. La structure conditionnelle en VBA supporte quatre syntaxes : Syntaxe 1 : une seule ligne Syntaxe 2 : If condition Then Instructions If condition Then, InstructionsVrai End If Syntaxe3 If condition Then Instructions Else Instructions End If Syntaxe 4 : If condition1 Then Instructions1 Elseif condition2 Then Instructions2 Else InstructionsAutres End If En utilisant la syntaxe4 du si alors sinon, nous obtenons l’écriture suivante (cette forme permet d’éviter les End If). Il faut remarquer que le programmeur a trouvé plus judicieux de remplacer le termes VENTES par CA. La signification est identique, mais CA fait 2 caractères, alors que Ventes en fait 6 (fainéantise quand tu nous tiens !!!) Il ne reste plus qu’à écrire les lignes précédentes entre les mots-clés Function et End Function de la fenêtre CODE. Il ne faut pas oublier de faire apparaître le nom de la donnée entre les parenthèses suivant le nom de la fonction. Il est important de noter que le nom de la variable qui reçoit le résultat du calcul est identique au nom de la fonction. Si vous ne respectez pas cette règle, vous ne récupèrerez pas de valeur dans la feuille de calcul. Vous remarquerez que les mots clés apparaissent automatiquement en bleu et les commentaires, toujours importants, apparaissent en vert. Un commentaire commence toujours par une apostrophe. Jacques Chambon 4/6 Tableur N’oubliez pas d’enregistrer le code que vous venez de taper. Utilisation de la fonction La fonction va pouvoir alors être utilisée au travers de l’icône . Comme pour une fonction intégrée, il faut se placer sur la cellule qui doit contenir la formule et cliquez sur l’icône. C’est dans la catégorie « Personnalisées » que vous allez trouver la Fonction COMPROG Il ne vous reste plus qu’à sélectionner la cellule contenant la donnée du CA et le résultat apparaît. Recopiez la formule vers la bas et le tour est joué. Vous venez d’écrire une fonction qui n’existait pas dans Excel. Jacques Chambon 5/6 Tableur Attention aux erreurs ! Une erreur peut être signalée au moment de la frappe d’une ligne de programme : Une erreur de syntaxe est signalée en rouge. Si vous ne trouvez pas l’erreur signalée, utilisez l’aide en ligne : elle fournit toujours des exemples. Ou ne l’être qu’au moment de l’exécution : Dans cet exemple le message d’erreur est explicite, il manque le End If. Le sur lignage jaune fluo indique que le programme est bloqué. Un programme bloqué ne peut plus être utilisé. La correction de l’erreur ne suffit pas à débloquer la situation. Il faut réinitialiser la Fonction en cliquant sur l’icône . Attention : une fois le programme réinitialisé, la correction que vous avez apportée n’est pas prise en compte dans la feuille de calcul Excel. Recopiez une cellule contenant la fonction pour obliger le tableur à la recalculer ! Utilisez la poignée de recopie ! Jacques Chambon 6/6