Bonsoir,
Dans mon code, Ti est une variable définie au niveau du module de Userform1. En général juste après le "Option Explicit".
Ti est donc accessible dans n'importe quelle procédure (évènementielle ou non) situé dans le module de UserForm1.
Ti va contenir les données sources pendant toutes la durée de l'existence de UserForm1.
On va donc définir Ti dès l'initialisation de Userform1 dans la procédure Initialize de UserForm1.
Attention, il est tout à fait légal de pouvoir déclarer une variable Ti dans une autre procédure P . VBA l'autorise.
Mais il faut savoir que si l'on fait cela dans la procédure P, alors cette variable Ti (déclarée au niveau de P) n'a plus rien a voir avec la variable Ti (de niveau module) qu'on a initialisée.
La variable Ti déclarée dans P est une variable
locale à la procédure P. Quand VBA rencontre la déclaration "Dim Ti"dans P, VBA crée une nouvelle variable "Ti" le temps de la procédure P. Quand P se termine, Ti est de la procédure P est détruite.
Donc quand vous exécutez P :
- vous créez une variable Ti (vide) au niveau de la procédure P
- Il existe déjà une autre variable Ti au niveau module (qui elle a été initialisée) mais qui est déconnectée de Ti variable locale déclarée dans la procédure P.
Dans une procédure P, les variables déclarées localement prennent le pas sur les variables déclarées au niveau module.
Si vous déclarez une variable au niveau module pour l'utiliser dans d'autres procédures, il ne faut surtout pas re-déclarer cette variable dans les autres procédures.
C'est ce qui se passe dans votre procédure en redéfinissant Ti. Ti est vide, VBA ne sait pas attribuer un "vide" à List de la listBox.
Donc, il faut bien déclarer "Dim Ti "après "Option Explicit" et surtout remplir Ti dès que possible avant de vouloir utiliser Ti dans d'autre procédures. Et le plus naturel est de la faire dans la procédure Initialize de l'Userform1.
Il peut y avoir d'autres subtilités mais sans le fichier c'est compliqué à dire.
Les questions à se poser :
Ai-je besoin d'une variable utilisable dans différente procédure ?
Si Oui, je la déclare au niveau du module de UserForm1 (et je fais attention à ne pas la re-déclarer ailleurs)
Et je veille bien à avoir défini une valeur pour Ti avant de l'utiliser une dans une autre procédure.
Bien sûr ce n'est la seule façon de faire, mais c'est une des plus basique.