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.
Calcul d’une commission
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
cduigou, sur 3:27 PM
Enregistrer un commentaire
<< Accueil