Monsieur Excel
Pour tout savoir faire sur Excel !

25 janvier 2013

Deux exemples de fonctions

Dans l’article précédent, nous avons vu que les fonctions personnalisées pouvaient rendre des services, avec l’exemple d’une fonction personnalisée calculant en années, mois et jours l’écart entre deux dates données.

Aujourd’hui, nous verrons deux exemples – modifiés des exemples réels, pour des raisons de confidentialité – de fonctions personnalisées que j’ai développées récemment pour deux clients différents.

Extraction à partir d’une chaîne de caractères

Dans le premier exemple, illustré dans la première partie de l’écran, nous désirons obtenir une valeur numérique en colonne D à partir du texte en colonne A, en suivant l’algorithme suivant :
- élimination de toute séquence « /ML »
- extraction de la valeur placée à gauche de la première occurrence de « ML »

Cette extraction s’effectue depuis le premier espace à gauche, et francise le marqueur de décimale.
La formule de E2 est : =ml(A2).


Calcul d’une commission

Dans le second exemple, illustré dans la seconde partie de l’écran, nous calculons une commission à partir du montant investi, du taux de rémunération et de l’âge du client. Mais cette commission dépend aussi de la date de l’investissement et de la date du jour.

La formule de E16 est : =comm(D16;B16;C16;A16).


1 Commentaire(s):

  • Je me permets quelques remarques sur la fonction ML :
    1) vous avez de la chance que l'argument Val soit toléré car c'est le nom d'une fonction VBA !
    2) Pourquoi utiliser des fonctions Excel (Application.Substitue, Application.find) alors que VBA les possède en natif)

    Dans la solution que je propose ci-dessous, la technique consiste à créer un tableau (fonction Split) résultant d'un découpage de la chaine strVal (débarrassée des /ML) sur le délimiteur "espace".
    Ensuite on balaie les lignes du tableau pour rechercher celle contenant "ML". On élimine ML (fn Replace) et on convertit en numérique (fonction Val).
    Remarque : on n'a pas besoin de remplacer le "." par une "," puisque VBA travaille déjà en natif avec le "." ! encore ça de gagné.


    Function ML(strVal As String) As Double
    Dim strTableau() As String
    Dim strLigne As String
    Dim intLigne As Integer
    strTableau = Split(Replace(strVal, "/ML", ""), " ")

    For intLigne = LBound(strTableau) To UBound(strTableau)
    strLigne = strTableau(intLigne)
    If InStr(1, strLigne, "ML") <> 0 Then
    ML = val(Replace(strLigne, "ML", ""))
    Exit Function
    End If
    Next intLigne
    End Function

    By Anonymous cduigou, sur 3:27 PM  

Enregistrer un commentaire

<< Accueil