Bonjour,
Oui, une fonction ne retourne qu'une valeur (ou une matrice) et ne peut pas modifier son environnement (donc d'autres cellules).
Il faut donc que tu fasses une fonction personnalisée matricielle placée et validée sur la totalité de la plage résultat qui doit être de même longueur que la plage source puisque susceptible de n'avoir aucune suppression.
Un exemple où je n'ai fait qu'un simple tri, je te laisse repousser les vides à la fin, je pense que tu sais faire.
Par contre si tu penses l'utiliser sur d'autres classeurs que là où elle est définie on a souvent des surprises avec excel.
Les fonctions personnalisées on tendances à utiliser d'autres feuilles pour les données que celle qui était prévue, et d'être intégrée à un Calculate où elles ne devraient pas être. Le plus souvent on ne le voit pas car la feuille de la fonction n'est pas active, mais si son résultat est utilisé ailleurs il devient n'importe quoi.
Je te conseille fortement de contrôler l'origine lors de l'appel et de voir s'il correspond bien à la réalité.
Bon, un peu dur à expliquer mais si tu rencontres ce type de problème ces fonctions pourront te servir :
'Nom classeur :
Application.ThisCell.Parent.Parent.Name
'Nom feuille :
Application.ThisCell.Parent.Name
'Adresse cellule d'appel :
Application.ThisCell.Address
eric