Salut
On est bien d'accord que cette fonction n'a de but que de manipuler VBA?
A mon avis, il vaudrait mieux ajouter un paramètre "Plage as range" à ta fonction. Comme ça tu lui passes ton tableau ( Stock minimum) dans plage et le critère (cellule L2). Tu peux même ajouter un paramètre pour identifier à quelle colonne doit correspondre le paramètre.
Lors de la création d'une formule perso, il faut rendre tous les éléments paramétrables, le but étant de pouvoir réutiliser cette formule dans d'autre cas de figure. Dans cette optique, faire référence à un tableau spécifique d'une feuille n'a aucun sens (ça n'est pas une critique).
Pour tenter de répondre plus particulièrement à ta question de départ.
En premier lieu, sache qu'il n'est pas possible de tout faire dans une fonction perso, si tu essais de modifier le contenu d'une cellule par exemple, ça plante. Je n'ai pas d'autre trucs qui me viennent mais il y à d'autres cas. Seconde chose, quand ça plante, ça sort manu militari et sans message d'erreur....
Si tu places un point d'arrêt dans le code de ta fonction (touche F9 pour basculer le point d'arrêt).
Lorsque tu mets à jour ta formule sur ta feuille, Excel va faire un arrêt sur la ligne contenant le point, tu pourras ensuite utiliser F8 pour exécuter ligne par ligne.
en observant le contenu de tes variables (regarde la notion d'espion en VBA) tu verras que liste_catégorie ne contient pas ton tableau complet mais uniquement "ss Catégorie" (dans la valeur de la cellule A1).
Du coup, vu que liste_catégorie est un variant, au lieu de prendre comme sous type un Array, il prend un String (tu peux le voir en plaçant un espion sur ta variable). Et logiquement "UBound(liste_catégorie)" fait planter ta fonction -> Sortie de code sans message d'erreur.
Pourquoi ça ne le fait pas en passant hors formule tableau... aucune idée mais comme dit plus haut, le comportement en version formule perso est un peu altéré et visiblement, il n'a pas accès à CurrentRegion qui d'ailleurs n'a aucun intérêt dans ton cas puisque tu utilises (àet tu as bien raison) un tableau structuré!
liste_catégorie = Sheets("Stock minimum").Range("A1").ListObject.Range
Et ton problème est résolu
Un conseil général (qui n'est pas en lien avec ton problème) :évite les accents sur les noms de variables et préfères y ajouter au moins une majuscule pour voir si tu l’orthographies correctement dans l'éditeur (VBA ajoutera la majuscule au passage à la ligne).
Dans le même but, en début de Module, ajoute "Option Explicit", ça oblige à tout déclaré et du coup si une variable est mal orthographiée, tu as une alerte.
++
Qwaz
Partager