Bonsoir,
Je n'ai pas compris le problème que tu voudrais régler mais ton code m'inspire quelques remarques touchant aux bases de VBA qu'il me semble que tu devrais connaître...
Lors de la conception d'un Userform, on définit le plus possible qu'on le peut les propriétés par défaut des contrôles dans la fenêtre de propriétés, le Userform se chargera toujours avec les contrôles à leurs propriétés par défaut, quoi qu'il arrive, et on limite la définition d'éléments dans Initialize à ceux qui ne peuvent être préalablement définis (la proc. Initialize s'exécute une seule fois au chargement du Userform avant son premier affichage). En respectant cette répartition, on allège le code... Et on peut notamment éviter de redéfinir des propriétés dans Initialize que les contrôles ont déjà !
Pour les variables on a un peu le même phénomène. Une variable déclarée non initialisée a une valeur par défaut : si elle est numérique elle a la valeur 0, si elle est textuelle elle a la valeur "", si elle est booléenne elle a la valeur False et une variable de type Variant a la valeur Empty (qui pourra se traduire en 0 ou "" selon contexte)... Lorsqu'on les initialise, autant que ce soit à une valeur autre...
Les contrôles TextBox, ComboBox ou ListBox auxquels on peut affecter des données diverses, une fois que ces données ont été incorporées au contrôle, ce sont par définition des données de type String. Ce qui implique que lorsqu'on les en extraie il convient d'en tenir compte et le cas échéant les convertir. C'est le cas en particulier pour les dates, on n'a jamais une date dans un contrôle mais une donnée de type String, ce qui fait que lorsqu'on la sort du contrôle VBA l'identifiera éventuellement comme une chaîne de caractère pouvant être interprétée comme date. Et similairement à Excel (mais pas avec les mêmes critères, si VBA peut interpréter une valeur comme date, il le fait. Et s'il le fait de lui même, ses critères de reconnaissance seront par défaut les formats de date américain s'il peut les appliquer. D'où la quasi obligation de convertir ces textes-dates en dates (données de type Date), ce qui oblige VBA à se référer aux formats de date régionaux déclarés dans Windows pour l'interpréter.
[Ou bien conserver les dates sous leur forme numérique, sous laquelle elles sont stockées par Excel comme par VBA, qui elle ne prêtera pas à confusion.]
Il faut prendre aussi en compte le fait qu'en utilisant la fonction Format (VBA) avec un type de données numérique ou date, tu ne conserves pas le type de données, tu en fais du texte. Le résultat renvoyé par la fonction ne peut être que du texte.
Cordialement.