En attendant tes réponses sur les derniers points, quelques petites remarques :
Sheets("test").Activate
Ça ! C'est toujours, absolument, à éviter !
Si tu veux voir le résultat, tu actives à la fin de la procédure...
Pendant, si tu n'es pas sur la feuille, cela n'en est que mieux, le code sera plus rapide !
Mais évidemment, il faut alors qualifier les expressions, faire référence explicitement à la feuille...
nb- Mais tu ne sélectionnes pas à tour de bras, et ton code est travaillé et présente plutôt une bonne tenue, je t'encourage à poursuivre dans la même voie...
Range("D" & BDD).Value = Descript
Là, je conseillerais plutôt :
Range("D" & BDD) = Descript.Value
Pourquoi : La propriété Value par défaut pour un objet Range, qui permet de l'omettre, fonctionne de façon absolument sûre pour une seule cellule (jamais eu de cas d'erreur). Etant toujours prudent, je le précise lorsqu'il s'agit d'une plage de plusieurs cellules (là j'ai eu quelques cas de dysfonctionnement). Et j'en ai eu aussi avec des TextBox, aussi je pense plus sûr de le préciser...
L'utilisation de End(xlDown) pour définir ta plage fournisseurs, s'il n'y a qu'un seul fournisseur dans ta liste, tu as toutes chances d'avoir une erreur (la commande te renverra la dernière ligne de la feuille). End(xlUp) est plus sûr à cet égard... (Il vaut mieux réserver xlDown lorsqu'on recherche des fractions de plages séparées par des lignes vides...)
Cordialement.