Re,
1° une fonction ne peut que retourner une valeur ou un tableau de valeurs mais normalement, elle ne doit (et ne peut) pas sélectionner ou activer.
2° normalement, toutes les variables externes à la fonction lui sont passées en argument et pas utilisées en "dur" (dans ton cas je reconnais que ça en fait quelques unes mais bien construite, la fonction n'en demande pas tant que ça)
Ceci ne sert à rien, il n'y a aucune référence dans le code qui le suit :
1 2
| With ThisWorkbook.Worksheets("Compte Portefeuille").Activate
End With |
Ta fonction pourrait aussi être simplifiée en lui passant en argument des fonctions Excel (pourquoi réinventer la roue), ici je suppose que tu à une autre fonction qui te compte les lignes : ligneTotalSBE = nbreLigne("Compte SBE") mais Excel a entre autres la fonction NB.SI pour retourner un nombre de cellule correspondant au critère, par exemple :
retourne le nombre de cellules qui ne sont pas vides.
Tu as trois boucles dans ta fonction alors que bien construite tu ne devrais en avoir qu'une (en passant les bons arguments la boucle, donc la fonction, doit te retourner la bonne valeur) pour la cellule contenant la fonction
Ceci ne devrait pas se trouver dans une fonction :
Else: MsgBox ("l'operation doit etre Dépenses ou Recettes")
Avec un gestionnaire d'erreur dans ta fonction et avec Err.Raise, ta fonction (comme celles d'Excel) doit te retourner une valeur d'erreur :
ici tu génère une erreur :
1 2 3
| If operation <> "Dépenses" Or operation <> "Recettes" Then
Err.Raise (vbObjectError + 1000)
End If |
un petit exemple :
1 2 3 4 5 6 7 8 9 10 11
| Function TEST(A As Range, B As Range) As Double
Application.Volatile
If A <> B Then
Err.Raise (vbObjectError + 1000)
Else
TEST = A + B
End If
End Function |
Surtout, ne le prends pas mal, ce sont des conseils et non des critiques
Partager