
Envoyé par
Nouveau2
Egalement, la fonction perso doit calculer avec des tableaux si des plages de cellules sont spécifiées, sinon, la perte de performance entre Excel et le VBA peut dans certains cas être très très grande (genre 50X ou 100X).
Par exemple, j'ai une fonction :
1 2 3 4 5 6 7 8 9 10 11 12
| Public Function Retourne(Valeur As Variant, LstReference As Range, Optional LstRetour As Range) As Variant
On Error GoTo Fin
If IsEmpty(Valeur) Or Valeur = "" Then
Retourne = ""
ElseIf IsMissing(LstRetour) Then
Retourne = Application.WorksheetFunction.Index(LstReference.Columns(LstReference.Columns.Count), Application.WorksheetFunction.Match(Valeur, LstReference.Columns(1), 0))
Else
Retourne = Application.WorksheetFunction.Index(LstRetour.Columns(1), Application.WorksheetFunction.Match(Valeur, LstReference.Columns(1), 0))
End If
Fin:
Retourne = ""
End Function |
Selon toi, la formule suivante :
=SI(OU(ESTVIDE(A2);A2="");"";INDEX(B2:B16;EQUIV(A2;Reference!C5:C19;0)))
sera beaucoup plus rapide que celle-ci :
=CHERCHEREF(A2;Reference!C5:C19;B2:B16)
Partager