{"id":9571,"date":"2021-04-04T13:20:17","date_gmt":"2021-04-04T11:20:17","guid":{"rendered":"https:\/\/www.auditsi.eu\/?p=9571"},"modified":"2021-04-04T13:54:24","modified_gmt":"2021-04-04T11:54:24","slug":"ajouter-des-fonctions-a-excel-est-particulierement-simple-il-suffit-dacceder-a-lediteur-de-programme-vba-edi-puis-de-faire-preceder-le-programme-de-linstruction-function","status":"publish","type":"post","link":"https:\/\/www.auditsi.eu\/?p=9571","title":{"rendered":"Ajouter de nouvelles fonctions \u00e0 Excel"},"content":{"rendered":"<p style=\"text-align: justify;\">Le <a href=\"https:\/\/www.auditsi.eu\/?p=9210\">tableur<\/a> Excel est un outil de calcul extr\u00eamement polyvalent. Son \u00e9diteur de formule de calcul offre un choix tr\u00e8s riche de fonctions de calcul. L&#8217;inconv\u00e9nient des formules de calcul est que leur duplication favorise les erreurs (<a href=\"https:\/\/www.auditsi.eu\/?p=6065\">copier\/coller<\/a>&#8230;) et leur mise \u00e0 jour peut se r\u00e9v\u00e9ler ardue.<\/p>\n<p style=\"text-align: justify;\">Plut\u00f4t que d&#8217;utiliser des formules de calcul, il est possible d&#8217;ajouter de nouvelles fonctions \u00e0 Excel en les cr\u00e9ant de toute pi\u00e8ce. L&#8217;avantage \u00e9tant que la formule de calcul n&#8217;est r\u00e9dig\u00e9e qu&#8217;une seule fois, facilitant \u00e0 la fois sa mise \u00e0 jour et son contr\u00f4le. La d\u00e9marche de cr\u00e9ation de nouvelles fonctions est assez simple. Une fois cr\u00e9\u00e9es, ces fonctions sont utilisables dans les formules de calcul Excel et peuvent \u00eatre associ\u00e9es \u00e0 d&#8217;autres fonctions, natives ou non, pour donner lieu \u00e0 des calculs tr\u00e8s \u00e9labor\u00e9s.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-9572 size-full\" src=\"https:\/\/www.auditsi.eu\/wp-content\/uploads\/2021\/04\/Calcul-RFA-formule-de-calcul.png\" alt=\"Calcul RFA formule de calcul\" width=\"352\" height=\"201\" srcset=\"https:\/\/www.auditsi.eu\/wp-content\/uploads\/2021\/04\/Calcul-RFA-formule-de-calcul.png 352w, https:\/\/www.auditsi.eu\/wp-content\/uploads\/2021\/04\/Calcul-RFA-formule-de-calcul-300x171.png 300w\" sizes=\"auto, (max-width: 352px) 100vw, 352px\" \/><\/p>\n<p style=\"text-align: justify;\">Par exemple, le calcul de primes ou de remises de fin d&#8217;ann\u00e9e (RFA) peut \u00eatre r\u00e9alis\u00e9 \u00e0 l&#8217;aide de formules de calcul :<\/p>\n<p style=\"text-align: center;\">=C7*0,025<\/p>\n<p style=\"text-align: justify;\">Dans ce cas, la prime est calcul\u00e9e sur la base du chiffre d&#8217;affaires (stock\u00e9 en cellule C7) auquel est appliqu\u00e9 un taux de 2,5 %.<\/p>\n<p style=\"text-align: justify;\">Pour \u00e9viter d&#8217;avoir \u00e0 dupliquer la formule de calcul de la prime sur toute une feuille de calcul, il est envisageable de cr\u00e9er une fonction Excel qui assure la m\u00eame t\u00e2che.<\/p>\n<p style=\"text-align: justify;\">Ajouter des fonctions \u00e0 Excel est particuli\u00e8rement simple. Il suffit d&#8217;acc\u00e9der \u00e0 l&#8217;<a href=\"https:\/\/www.auditsi.eu\/?p=4039\">\u00e9diteur de programme VBA (EDI)<\/a> puis de faire pr\u00e9c\u00e9der le programme de l&#8217;instruction <em>Function<\/em> suivi d&#8217;un nom (au gr\u00e9 du cr\u00e9ateur de la fonction) puis de ponctuer le tout avec <em>End Function<\/em>.<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"visualbasic\">Function Nom_fonction(param\u00e8tre1, param\u00e8tre2...)\r\n\r\n\r\nEnd Function\r\n<\/pre>\n<p style=\"text-align: justify;\">Ainsi, pour le calcul des primes li\u00e9es au chiffre d&#8217;affaires (CA), la fonction \u00e9quivalente \u00e0 la formule de calcul expos\u00e9e ci-avant se pr\u00e9sente ainsi :<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"visualbasic\">Function Prime_CA(CA As Double)\r\n'Calcul d'une prime en fonction du CA r\u00e9alis\u00e9\r\n    Prime_CA = CA * 0.025\r\nEnd Function\r\n<\/pre>\n<p style=\"text-align: justify;\">Le CA est transmis \u00e0 la fonction par l&#8217;interm\u00e9diaire du param\u00e8tre qui suit imm\u00e9diatement le nom de la fonction. Le code VBA stocke ce param\u00e8tre dans la <a href=\"https:\/\/www.auditsi.eu\/?p=6468\">variable CA (de type <em>Double<\/em><\/a>, c&#8217;est-\u00e0-dire un nombre d\u00e9cimal). Le r\u00e9sultat du calcul est retourn\u00e9 \u00e0 Excel \u00e0 l&#8217;aide de la commande &#8220;<em>Prime_CA = &#8230;<\/em>&#8220;.<\/p>\n<p style=\"text-align: justify;\">Les fonctions VBA sont automatiquement int\u00e9gr\u00e9es \u00e0 Excel. Ainsi, lorsque l&#8217;utilisateur du classeur Excel commence \u00e0 saisir une formule de calcul, Excel lui propose les commandes qui correspondent \u00e0 l&#8217;entr\u00e9e en cours (saisie pr\u00e9dictive) y compris les fonctions cr\u00e9\u00e9es par l&#8217;utilisateur.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-9573\" src=\"https:\/\/www.auditsi.eu\/wp-content\/uploads\/2021\/04\/Excel-sasie-formule-de-calcul.png\" alt=\"Excel sasie formule de calcul\" width=\"194\" height=\"210\"><\/p>\n<p style=\"text-align: justify;\">Le tableau de calcul int\u00e9grant la nouvelle fonction <em>Prime_CA<\/em> se pr\u00e9sente ainsi :<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-9574 size-full\" src=\"https:\/\/www.auditsi.eu\/wp-content\/uploads\/2021\/04\/Calcul-RFA-fonction.png\" alt=\"Calcul RFA fonction\" width=\"433\" height=\"200\" srcset=\"https:\/\/www.auditsi.eu\/wp-content\/uploads\/2021\/04\/Calcul-RFA-fonction.png 433w, https:\/\/www.auditsi.eu\/wp-content\/uploads\/2021\/04\/Calcul-RFA-fonction-300x139.png 300w\" sizes=\"auto, (max-width: 433px) 100vw, 433px\" \/><\/p>\n<p style=\"text-align: justify;\">A noter : un classeur Excel qui comprend des macros VBA doit \u00eatre <a href=\"https:\/\/www.auditsi.eu\/?p=5875\">enregistr\u00e9 avec une extension *.XLSM<\/a> au lieu de *.XLSX, faute de quoi les macros seront supprim\u00e9es lors de l&#8217;enregistrement du classeur.<\/p>\n<p style=\"text-align: justify;\">Le classeur contenant les exemples est propos\u00e9 en libre t\u00e9l\u00e9chargement en bas de cette page.<\/p>\n<p style=\"text-align: justify;\">Bien entendu, les fonctions cr\u00e9\u00e9es par l&#8217;utilisateur peuvent \u00eatre int\u00e9gr\u00e9es dans des formules de calcul plus ou moins complexes. Par exemple :<\/p>\n<p style=\"text-align: center;\">=SI(SOMME(C7:D7)&gt;200000;Prime_CA(SOMME(C7:D7)*2);Prime_CA(SOMME(C7:D7)))<\/p>\n<p style=\"text-align: justify;\">La fonction <em>Prime_CA<\/em> est assez simple, elle se contente d&#8217;appliquer un taux sur une base. Dans la r\u00e9alit\u00e9, <strong>le taux de RFA varie g\u00e9n\u00e9ralement en fonction du CA r\u00e9alis\u00e9<\/strong> ; une grille de calcul comprenant diff\u00e9rentes tranches de CA et taux \u00e0 appliquer est param\u00e9tr\u00e9e. Dans ce cas, la fonction pourra prendre cette forme :<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"visualbasic\">Function Prime_CA_Grille(CA As Double)\r\n'Calcul d'une prime en fonction du CA r\u00e9alis\u00e9\r\n    'Grilles CA et pourcentage (Pct) ; exemple CA &gt;= 100 000 \u20ac et &lt; 200 000 \u20ac, 1.5 % de prime\r\n    Const GrilleCA = \"0;100000;200000;250000;300000\"\r\n    Const GrillePct = \"0;1.5;2;2.5;2.75\"\r\n    \r\n    Dim Table_GrilleCA As Variant\r\n    Dim Table_GrillePct As Variant\r\n    Dim i As Integer\r\n    \r\n    'Conversion des grilles en tableaux de donn\u00e9es\r\n    Table_GrilleCA = Split(GrilleCA, \";\")\r\n    Table_GrillePct = Split(GrillePct, \";\")\r\n    \r\n    'Parcours de la table de CA et calcul de la prime\r\n    For i = UBound(Table_GrilleCA) To LBound(Table_GrilleCA) Step -1\r\n        If CA &gt;= Table_GrilleCA(i) Then\r\n            Prime_CA_Grille = CA * Val(Table_GrillePct(i)) \/ 100\r\n            Exit For\r\n        End If\r\n    Next i\r\nEnd Function\r\n<\/pre>\n<p style=\"text-align: justify;\">Les grilles de CA et taux sont d\u00e9finies respectivement \u00e0 l&#8217;aide des constantes <em>GrilleCA<\/em> et <em>GrillePct<\/em> avant d&#8217;\u00eatre converties en <a href=\"https:\/\/www.auditsi.eu\/?p=6638\">variables tableaux<\/a> (<em>Table_GrilleCA<\/em> et <em>Table_GrillePct<\/em>) \u00e0 l&#8217;aide de la <a href=\"https:\/\/www.auditsi.eu\/?p=6638\">fonction VBA <em>Split<\/em><\/a>.<\/p>\n<p style=\"text-align: justify;\">Les deux lignes de code :<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"visualbasic\">Const GrilleCA = \"0;100000;200000;250000;300000\"\r\nConst GrillePct = \"0;1.5;2;2.5;2.75\"\r\n<\/pre>\n<p style=\"text-align: justify;\">D\u00e9finissent la grille de remises suivante :<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-9575 size-full\" src=\"https:\/\/www.auditsi.eu\/wp-content\/uploads\/2021\/04\/Excel-grille-de-remises.png\" alt=\"Excel grille de remises\" width=\"182\" height=\"146\"><\/p>\n<p style=\"text-align: justify;\">Ainsi, un CA compris entre 100 et 200 K\u20ac donnera une RFA de 1,5 %. La <a href=\"https:\/\/www.auditsi.eu\/?p=1696\">boucle compteur <em>For&#8230; To&#8230; Step&#8230;<\/em><\/a> permet de parcourir les tranches de CA de la grille de RFA (des tranches sup\u00e9rieures (<em>Ubound<\/em>) vers les tranches inf\u00e9rieures (<em>Lbound<\/em>) pour d\u00e9terminer le taux de remise (<em>Table_GrillePct(i)<\/em>) et calculer la remise (<em>Prime_CA_Grille = CA * Val(Table_GrillePct(i)) \/ 100<\/em>).)<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-9576 size-full\" src=\"https:\/\/www.auditsi.eu\/wp-content\/uploads\/2021\/04\/Calcul-RFA-grille-fonction.png\" alt=\"Calcul RFA grille fonction\" width=\"357\" height=\"240\" srcset=\"https:\/\/www.auditsi.eu\/wp-content\/uploads\/2021\/04\/Calcul-RFA-grille-fonction.png 357w, https:\/\/www.auditsi.eu\/wp-content\/uploads\/2021\/04\/Calcul-RFA-grille-fonction-300x202.png 300w\" sizes=\"auto, (max-width: 357px) 100vw, 357px\" \/><\/p>\n<p style=\"text-align: justify;\">Une autre m\u00e9thode de calcul moins \u00e9l\u00e9gante mais tout aussi fonctionnelle aurait pu \u00eatre utilis\u00e9e en imbriquant des <a href=\"https:\/\/www.auditsi.eu\/?p=1797\">tests conditionnels (<em>If&#8230; Then&#8230; Else&#8230;<\/em>)<\/a> \u00e0 la mani\u00e8re des <em>SI(&#8230;)<\/em> des formules de calcul Excel. La fonction r\u00e9dig\u00e9e de la sorte donnerait le code source suivant :<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">Function Prime_CA_Grille_IF(CA As Double)\r\n'Calcul d'une prime en fonction du CA r\u00e9alis\u00e9 avec des tests conditionnels If... Then... Else...\r\n    Dim Taux_Remise As Double\r\n    \r\n    If CA &gt;= 300000 Then\r\n        Taux_Remise = 2.75\r\n    ElseIf CA &gt;= 250000 Then\r\n        Taux_Remise = 2.5\r\n    ElseIf CA &gt;= 200000 Then\r\n        Taux_Remise = 2\r\n    ElseIf CA &gt;= 100000 Then\r\n        Taux_Remise = 1.5\r\n    Else:\r\n        Taux_Remise = 0\r\n    End If\r\n        \r\n    Prime_CA_Grille_IF = CA * Taux_Remise \/ 100\r\nEnd Function\r\n<\/pre>\n<p style=\"text-align: justify;\">Si cette forme de r\u00e9daction semble plus lisible, elle est plus difficile \u00e0 mettre \u00e0 jour en cas de modification de la grille de remise (notamment ajout de tranches).<\/p>\n<p>Son \u00e9quivalent en formule de calcul Excel serait :<\/p>\n<p style=\"text-align: center;\">=C7*SI(C7&gt;= 300000;2.75; SI(C7&gt;= 250000;2.5; SI(C7&gt;= 200000;2; SI(C7&gt;= 100000;1.5;0)\/100<\/p>\n<p style=\"text-align: justify;\">Plus complexes encore sont les <strong>remises calcul\u00e9es en fonction de paliers<\/strong>. Dans le cadre d&#8217;un calcul par palier, le taux de remise appliqu\u00e9 varie en fonction de la d\u00e9composition du CA r\u00e9alis\u00e9 par tranche (palier). Par exemple, l&#8217;application de la grille propos\u00e9e plus haut \u00e0 un CA de 220 K\u20ac donne une remise de 0 % de jusqu&#8217;\u00e0 99 999 \u20ac de CA + 1,5 % de 100 000 \u20ac \u00e0 199 999 \u20ac + 2 % de 200 000 \u20ac \u00e0 220 000 \u20ac &#8216;soit dans cet exemple une remise de 1 900 \u20ac.<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"visualbasic\">Function Prime_CA_Palier(CA As Double)\r\n'Calcul d'une prime en fonction du CA r\u00e9alis\u00e9\r\n    'Grilles CA et pourcentage (Pct) ; exemple CA = 220 000 \u20ac, 0 % de prime jusque 99 999 \u20ac + 1,5 % de prime de 100 000 \u20ac \u00e0 199 999 \u20ac + 2 % de prime de 200 000 \u20ac \u00e0 220 000 \u20ac\r\n    'soit dans cet exemple une prime de 1 900 \u20ac\r\n    Const GrilleCA = \"0;100000;200000;250000;300000\"\r\n    Const GrillePct = \"0;1.5;2;2.5;2.75\"\r\n    \r\n    Dim Table_GrilleCA As Variant\r\n    Dim Table_GrillePct As Variant\r\n    Dim i As Integer\r\n    Dim CA_Plafond As Double\r\n    \r\n    'Conversion des grilles en tableaux de donn\u00e9es\r\n    Table_GrilleCA = Split(GrilleCA, \";\")\r\n    Table_GrillePct = Split(GrillePct, \";\")\r\n    \r\n    'Parcours de la table de CA et calcul de la prime\r\n    For i = UBound(Table_GrilleCA) To LBound(Table_GrilleCA) Step -1\r\n        Select Case i &lt; UBound(Table_GrilleCA)\r\n            'Si i = UBound(Table_GrilleCA) -&gt; derni\u00e8re tranche de la grille de CA\r\n            Case True:\r\n                Select Case Table_GrilleCA(i + 1) &lt; CA\r\n                    Case True:\r\n                        CA_Plafond = Table_GrilleCA(i + 1)\r\n                    Case False:\r\n                        If CA &gt; Table_GrilleCA(i) Then CA_Plafond = CA Else CA_Plafond = Table_GrilleCA(i)\r\n                End Select\r\n            Case False:\r\n                If CA &gt; Table_GrilleCA(i) Then CA_Plafond = CA Else CA_Plafond = Table_GrilleCA(i)\r\n        End Select\r\n        Prime_CA_Palier = Prime_CA_Palier + (CA_Plafond - Table_GrilleCA(i)) * Val(Table_GrillePct(i)) \/ 100\r\n    Next i\r\nEnd Function\r\n<\/pre>\n<p style=\"text-align: justify;\">Exemple de tableau de calcul de remises par palier :<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-9577\" src=\"https:\/\/www.auditsi.eu\/wp-content\/uploads\/2021\/04\/Calcul-RFA-palier-fonction.png\" alt=\"Calcul RFA palier fonction\" width=\"435\" height=\"240\" srcset=\"https:\/\/www.auditsi.eu\/wp-content\/uploads\/2021\/04\/Calcul-RFA-palier-fonction.png 435w, https:\/\/www.auditsi.eu\/wp-content\/uploads\/2021\/04\/Calcul-RFA-palier-fonction-300x166.png 300w\" sizes=\"auto, (max-width: 435px) 100vw, 435px\" \/><\/p>\n<p style=\"text-align: justify;\">Enfin, le <strong>calcul des primes ou remises peut \u00eatre d\u00e9termin\u00e9 en fonction d&#8217;objectifs fix\u00e9s individuellement<\/strong>.<\/p>\n<p style=\"text-align: justify;\">Par exemple, la grille de RFA ci-apr\u00e8s fixe le pourcentage de remise en fonction de l&#8217;atteinte de l&#8217;objectif de CA (soit CA r\u00e9alis\u00e9 \/ objectif de CA) :<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-9585\" src=\"https:\/\/www.auditsi.eu\/wp-content\/uploads\/2021\/04\/Calcul-RFA-objectif-fonction.png\" alt=\"Calcul RFA objectif fonction\" width=\"180\" height=\"123\"><\/p>\n<p style=\"text-align: justify;\">Cette grille est param\u00e9tr\u00e9e ainsi dans le code VBA :<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"visualbasic\">Const GrillePctObjectif = \"0;95;100;105;110\"\r\nConst GrillePctPrime = \"0;1.5;2;2.5;2.75\"<\/pre>\n<p style=\"text-align: justify;\">Le calcul d&#8217;une prime fix\u00e9e en fonction d&#8217;objectifs individuels n\u00e9cessite deux param\u00e8tres : le CA r\u00e9alis\u00e9 (ici : <em>CA<\/em>) et l&#8217;objectif de CA (ici : <em>CA_Objectif<\/em>). Les param\u00e8tres transmis par une fonction sont s\u00e9par\u00e9s les uns des autres par des virgules.<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"visualbasic\">Function Prime_Objectif(CA As Double, CA_Objectif As Double)\r\n'Calcul d'une prime en fonction de la r\u00e9alisation d'un objectif\r\n    'Grilles CA et pourcentage (Pct) ; exemple % r\u00e9alisation &gt; 110 % , 2.75 % de prime\r\n    Const GrillePctObjectif = \"0;95;100;105;110\"\r\n    Const GrillePctPrime = \"0;1.5;2;2.5;2.75\"\r\n    \r\n    Dim Table_GrillePctObjectif As Variant\r\n    Dim Table_GrillePctPrime As Variant\r\n    Dim i As Integer\r\n    Dim PctR\u00e9alis\u00e9 As Double\r\n    \r\n    'Conversion des grilles en tableaux de donn\u00e9es\r\n    Table_GrillePctObjectif = Split(GrillePctObjectif, \";\")\r\n    Table_GrillePctPrime = Split(GrillePctPrime, \";\")\r\n    \r\n    PctR\u00e9alis\u00e9 = CA \/ CA_Objectif\r\n    \r\n    'Parcours de la table des pourcentages d'objectif et calcul de la prime\r\n    For i = UBound(Table_GrillePctObjectif) To LBound(Table_GrillePctObjectif) Step -1\r\n        If PctR\u00e9alis\u00e9 &gt;= Table_GrillePctObjectif(i) \/ 100 Then\r\n            Prime_Objectif = CA * Val(Table_GrillePctPrime(i)) \/ 100\r\n            Exit For\r\n        End If\r\n    Next i\r\nEnd Function<\/pre>\n<p style=\"text-align: justify;\">Le calcul de remises en fonction d&#8217;objectifs individuels se r\u00e9sume ainsi :<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-9579\" src=\"https:\/\/www.auditsi.eu\/wp-content\/uploads\/2021\/04\/Calcul-RFA-objectif-fonction2.png\" alt=\"Calcul RFA objectif fonction2\" width=\"517\" height=\"241\" srcset=\"https:\/\/www.auditsi.eu\/wp-content\/uploads\/2021\/04\/Calcul-RFA-objectif-fonction2.png 517w, https:\/\/www.auditsi.eu\/wp-content\/uploads\/2021\/04\/Calcul-RFA-objectif-fonction2-300x140.png 300w\" sizes=\"auto, (max-width: 517px) 100vw, 517px\" \/><\/p>\n<p style=\"text-align: justify;\">Code source de l&#8217;ensemble des fonctions du classeur :<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">'Cr\u00e9er de nouvelles fonctions Excel en VBA\r\n'Beno\u00eet RIVIERE, 04\/2021\r\n'www.auditsi.eu\r\n\r\n\r\nOption Explicit\r\n\r\n\r\nFunction Prime_CA(CA As Double)\r\n'Calcul d'une prime en fonction du CA r\u00e9alis\u00e9\r\n    Prime_CA = CA * 0.025\r\nEnd Function\r\n\r\n\r\nFunction Prime_CA_Grille(CA As Double)\r\n'Calcul d'une prime en fonction du CA r\u00e9alis\u00e9\r\n    'Grilles CA et pourcentage (Pct) ; exemple CA &gt;= 100 000 \u20ac et &lt; 200 000 \u20ac, 1.5 % de prime\r\n    Const GrilleCA = \"0;100000;200000;250000;300000\"\r\n    Const GrillePct = \"0;1.5;2;2.5;2.75\"\r\n    \r\n    Dim Table_GrilleCA As Variant\r\n    Dim Table_GrillePct As Variant\r\n    Dim i As Integer\r\n    \r\n    'Conversion des grilles en tableaux de donn\u00e9es\r\n    Table_GrilleCA = Split(GrilleCA, \";\")\r\n    Table_GrillePct = Split(GrillePct, \";\")\r\n    \r\n    'Parcours de la table de CA et calcul de la prime\r\n    For i = UBound(Table_GrilleCA) To LBound(Table_GrilleCA) Step -1\r\n        If CA &gt;= Table_GrilleCA(i) Then\r\n            Prime_CA_Grille = CA * Val(Table_GrillePct(i)) \/ 100\r\n            Exit For\r\n        End If\r\n    Next i\r\nEnd Function\r\n\r\n\r\nFunction Prime_CA_Palier(CA As Double)\r\n'Calcul d'une prime en fonction du CA r\u00e9alis\u00e9\r\n    'Grilles CA et pourcentage (Pct) ; exemple CA = 220 000 \u20ac, 0 % de prime jusque 99 999 \u20ac + 1,5 % de prime de 100 000 \u20ac \u00e0 199 999 \u20ac + 2 % de prime de 200 000 \u20ac \u00e0 220 000 \u20ac\r\n    'soit dans cet exemple une prime de 1 900 \u20ac\r\n    Const GrilleCA = \"0;100000;200000;250000;300000\"\r\n    Const GrillePct = \"0;1.5;2;2.5;2.75\"\r\n    \r\n    Dim Table_GrilleCA As Variant\r\n    Dim Table_GrillePct As Variant\r\n    Dim i As Integer\r\n    Dim CA_Plafond As Double\r\n    \r\n    'Conversion des grilles en tableaux de donn\u00e9es\r\n    Table_GrilleCA = Split(GrilleCA, \";\")\r\n    Table_GrillePct = Split(GrillePct, \";\")\r\n    \r\n    'Parcours de la table de CA et calcul de la prime\r\n    For i = UBound(Table_GrilleCA) To LBound(Table_GrilleCA) Step -1\r\n        Select Case i &lt; UBound(Table_GrilleCA)\r\n            'Si i = UBound(Table_GrilleCA) -&gt; derni\u00e8re tranche de la grille de CA\r\n            Case True:\r\n                Select Case Table_GrilleCA(i + 1) &lt; CA\r\n                    Case True:\r\n                        CA_Plafond = Table_GrilleCA(i + 1)\r\n                    Case False:\r\n                        If CA &gt; Table_GrilleCA(i) Then CA_Plafond = CA Else CA_Plafond = Table_GrilleCA(i)\r\n                End Select\r\n            Case False:\r\n                If CA &gt; Table_GrilleCA(i) Then CA_Plafond = CA Else CA_Plafond = Table_GrilleCA(i)\r\n        End Select\r\n        Prime_CA_Palier = Prime_CA_Palier + (CA_Plafond - Table_GrilleCA(i)) * Val(Table_GrillePct(i)) \/ 100\r\n    Next i\r\nEnd Function\r\n\r\n\r\nFunction Prime_Objectif(CA As Double, CA_Objectif As Double)\r\n'Calcul d'une prime en fonction de la r\u00e9alisation d'un objectif\r\n    'Grilles CA et pourcentage (Pct) ; exemple % r\u00e9alisation &gt; 110 % , 2.75 % de prime\r\n    Const GrillePctObjectif = \"0;95;100;105;110\"\r\n    Const GrillePctPrime = \"0;1.5;2;2.5;2.75\"\r\n    \r\n    Dim Table_GrillePctObjectif As Variant\r\n    Dim Table_GrillePctPrime As Variant\r\n    Dim i As Integer\r\n    Dim PctR\u00e9alis\u00e9 As Double\r\n    \r\n    'Conversion des grilles en tableaux de donn\u00e9es\r\n    Table_GrillePctObjectif = Split(GrillePctObjectif, \";\")\r\n    Table_GrillePctPrime = Split(GrillePctPrime, \";\")\r\n    \r\n    PctR\u00e9alis\u00e9 = CA \/ CA_Objectif\r\n    \r\n    'Parcours de la table des pourcentages d'objectif et calcul de la prime\r\n    For i = UBound(Table_GrillePctObjectif) To LBound(Table_GrillePctObjectif) Step -1\r\n        If PctR\u00e9alis\u00e9 &gt;= Table_GrillePctObjectif(i) \/ 100 Then\r\n            Prime_Objectif = CA * Val(Table_GrillePctPrime(i)) \/ 100\r\n            Exit For\r\n        End If\r\n    Next i\r\nEnd Function\r\n<\/pre>\n<p style=\"text-align: justify;\"><a href=\"https:\/\/www.auditsi.eu\/?p=513\">Autre exemple de cr\u00e9ation de fonction<\/a> appliqu\u00e9 au <a href=\"https:\/\/www.auditsi.eu\/?p=1291\">bar\u00e8me d&#8217;heures des commissaires aux comptes<\/a>.<\/p>\n<p style=\"text-align: justify;\">___<\/p>\n<p style=\"text-align: justify;\">Pour aller plus loin : <a href=\"https:\/\/www.auditsi.eu\/?cat=1569\">programmer en VBA<\/a><\/p>\n<div style=\"padding-bottom:20px; padding-top:10px;\" class=\"hupso-share-buttons\"><!-- Hupso Share Buttons - https:\/\/www.hupso.com\/share\/ --><a class=\"hupso_counters\" href=\"https:\/\/www.hupso.com\/share\/\"><img decoding=\"async\" src=\"https:\/\/static.hupso.com\/share\/buttons\/lang\/fr\/share-small.png\" style=\"border:0px; padding-top:2px; float:left;\" alt=\"Share Button\"\/><\/a><script type=\"text\/javascript\">var hupso_services_c=new Array(\"twitter\",\"facebook_like\",\"facebook_send\",\"email\",\"print\",\"linkedin\");var hupso_counters_lang = \"fr_FR\";var hupso_image_folder_url = \"\";var hupso_twitter_via=\"BenoitRiviere14\";var hupso_url_c=\"\";var hupso_title_c=\"Ajouter%20de%20nouvelles%20fonctions%20%C3%A0%20Excel\";<\/script><script type=\"text\/javascript\" src=\"https:\/\/static.hupso.com\/share\/js\/counters.js\"><\/script><!-- Hupso Share Buttons --><\/div>","protected":false},"excerpt":{"rendered":"<p>Le tableur Excel est un outil de calcul extr\u00eamement polyvalent. Son \u00e9diteur de formule de calcul offre un choix tr\u00e8s riche de fonctions de calcul. L&#8217;inconv\u00e9nient des formules de calcul est que leur duplication favorise les erreurs (copier\/coller&#8230;) et leur mise \u00e0 jour peut se r\u00e9v\u00e9ler ardue. Plut\u00f4t que d&#8217;utiliser des formules de calcul, il &#8230;<\/p>\n<p><a href=\"https:\/\/www.auditsi.eu\/?p=9571\" class=\"more-link\">Continue reading &lsquo;Ajouter de nouvelles fonctions \u00e0 Excel&rsquo; &raquo;<\/a><\/p>\n<div style=\"padding-bottom:20px; padding-top:10px;\" class=\"hupso-share-buttons\"><!-- Hupso Share Buttons - https:\/\/www.hupso.com\/share\/ --><a class=\"hupso_counters\" href=\"https:\/\/www.hupso.com\/share\/\"><img src=\"https:\/\/static.hupso.com\/share\/buttons\/lang\/fr\/share-small.png\" style=\"border:0px; padding-top:2px; float:left;\" alt=\"Share Button\"\/><\/a><script type=\"text\/javascript\">var hupso_services_c=new Array(\"twitter\",\"facebook_like\",\"facebook_send\",\"email\",\"print\",\"linkedin\");var hupso_counters_lang = \"fr_FR\";var hupso_image_folder_url = \"\";var hupso_twitter_via=\"BenoitRiviere14\";var hupso_url_c=\"\";var hupso_title_c=\"Ajouter%20de%20nouvelles%20fonctions%20%C3%A0%20Excel\";<\/script><script type=\"text\/javascript\" src=\"https:\/\/static.hupso.com\/share\/js\/counters.js\"><\/script><!-- Hupso Share Buttons --><\/div>","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"advanced_seo_description":"","jetpack_seo_html_title":"","jetpack_seo_noindex":false,"ngg_post_thumbnail":0,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","_links_to":"","_links_to_target":""},"categories":[39,472,490,508,1569,215],"tags":[1596,153,2456,387,1144,228,615,223,2459,2457,1564,1563,911,2434,2458],"class_list":["post-9571","post","type-post","status-publish","format-standard","hentry","category-cas-pratiques","category-cycle-clients-controle-des-comptes","category-cycle-fournisseurs-controle-des-comptes","category-cycle-personnel","category-programmer-en-vba","category-vba","tag-copier-coller","tag-erreur","tag-fonction","tag-for-to-next","tag-formule-de-calcul","tag-function-end-function","tag-grille-tarifaire","tag-if-then-elseif","tag-palier","tag-prime","tag-remise-de-fin-dannee","tag-rfa","tag-step","tag-taux","tag-tranche"],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"jetpack_likes_enabled":false,"_links":{"self":[{"href":"https:\/\/www.auditsi.eu\/index.php?rest_route=\/wp\/v2\/posts\/9571","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.auditsi.eu\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.auditsi.eu\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.auditsi.eu\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.auditsi.eu\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=9571"}],"version-history":[{"count":7,"href":"https:\/\/www.auditsi.eu\/index.php?rest_route=\/wp\/v2\/posts\/9571\/revisions"}],"predecessor-version":[{"id":9587,"href":"https:\/\/www.auditsi.eu\/index.php?rest_route=\/wp\/v2\/posts\/9571\/revisions\/9587"}],"wp:attachment":[{"href":"https:\/\/www.auditsi.eu\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=9571"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.auditsi.eu\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=9571"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.auditsi.eu\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=9571"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}