Bonjour mr06,
tu as écrit « je fais Formules, Insérer une fonction etc. et cela fonctionne »
et « Malheureusement, si je modifie la valeur des paramètres, la fonction
ne se recalcule pas automatiquement. Elle est devenue inconnue. »
comme tu as créé ta fonction via l'Enregistreur de macros, ça a utilisé les
paramètres que tu as saisis au départ ; donc ensuite, c'est ça qui t'oblige
à refaire la manip pour d'autres paramètres.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
solution n° 1 : après-coup (je veux dire après que l'Enregistreur de macros
a créé un code VBA avec la fonction que tu as utilisée), fais Alt F11 pour voir
le code VBA (qui est dans un module standard tel que Module1) ; tu devras
alors modifier le code VBA pour remplacer les paramètres « en dur » par
de vrais paramètres (en utilisant des arguments de fonction adéquats ; et
en passant les bons paramètres lors des appels de fonction depuis la
feuille de calcul).
solution n° 2 : c'est bien plus simple d'écrire ton code VBA directement dans
l'Éditeur VBA (= fenêtre "Microsoft Visual Basic") ; donc sans passer par
l'Enregistreur de macros ; c'est déjà ce que tu avais fait avant, puisque tu
as écrit « J'ai déjà développé des fonctions VBA dans un lointain passé » ;
comme en plus tu as écrit « je n'avais pas ce problème : la fonction se
recalculait toute seule... », alors ok : fais comme avant. :)
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
si vraiment tu n'arrives pas à adapter le code VBA créé par l'Enregistreur de
macros, ou si tu n'arrives pas à refaire comme tu faisais avant (sans passer
par l'Enregistreur de macros) : joins ton fichier Excel, via cjoint.com ; écris
sur quelle(s) feuille(s) sont les appels de fonction ; quel est le module
concerné (Module1 ou quel autre) ; le nom de la Function concernée
(je parle ici du nom de ta fonction personnalisée) ; quelle est la fonction
Excel utilisée : SOMME() ; NBVAL() ; ou autre ; à propos, n'oublie pas
que dans le code VBA, il faut utiliser le nom anglais de la fonction Excel :
SUM() ; COUNTA() ; ou autre. (même si tu as Excel version française)
attention : plusieurs fonctions Excel n'ont pas d'équivalent VBA ; il faut
alors utiliser WorsheetFunction.Nom() où .Nom() est le nom adéquat
de la fonction Excel ; c'est aussi possible de passer par Evaluate().
rhodo