bonjour,
voici la fonction personnalisée :
Function calcspe(a, Optional v = "3,2,1,0,-1", Optional verbose = False)
'--------------------------------------------------------------------------
' calcspe : fonction de remplacement de nombres d'une chaine de caractères par d'autres valeurs et somme de ces valeurs
' 2 caractères alphabétiques qui se suivent reçoivent une valeur -3
' on soustrait 0,5 par nombre manquants si le nombre de nombres est inférieur à 6
' a = chaine de caractères
' v = liste des valeurs de remplacement avec par défaut 1 à remplacer par 3, 2 par 2, 3 par 1, 4 par 0 et toutes les autres valeurs par -1
' verbose (vrai/faux) pour afficher ou non le détail du calcul, faux par défaut, on n'affiche que le résultat final.
'---------------------------------------------------------------------------
tv = Split(v, ",")
ReDim vf(UBound(tv))
For i = LBound(tv) To UBound(tv)
If i = UBound(tv) Then vf(0) = "+" & tv(i) Else vf(i + 1) = "+" & tv(i)
Next i
b = ""
i = 1
Do While i <= Len(a)
c = Mid(a, i, 1)
If c Like "#" Then
c = Val(Mid(a, i))
ch = ""
ctr = ctr + 1
i = i + Len(c)
If Val(c) <= UBound(vf) Then c = vf(c) Else c = vf(0)
ElseIf c Like "[A-z]" Then
ch = ch & c
c = ""
i = i + 1
Else
c = ""
flagc = False
i = i + 1
End If
If Len(ch) = 2 And ctr > 0 Then b = b & "-3": ctr = ctr + 1: ch = ""
If c <> "" Then b = b & Replace(c, "+-", "-")
If ctr = 6 Then Exit Do
Loop
For i = 6 To ctr + 1 Step -1 'enleve 0,5 si nombre de nombres < 6
b = b & "-0,5"
Next i
r = Application.Evaluate(Replace(b, ",", "."))
calcspe = IIf(verbose, "(" & b & ")=" & r, r)
End Function
comment la rendre disponible dans un classeur ?
1. sélectionner et copier le code de la macro sur le forum (CTRL-C)
2. ouvrir le classeur qui convient en excel
3. ourvir l'éditeur VBA (alt-F11)
4. faire insérer module (menu, insérer->module)
5. coller le code (CTRL-V)
6. retour à excel (alt-F11)
7.sauver le document avec les macros, (format xlsm)
8. la fonction est disponible pour le classeur et peut être utilisée comme n'importe quelle autre fonction Excel.