Bonsoir,
Un peu d'explications à partir de ton code (qui n'avait aucune chance de fonctionner au vu de ta boucle déconnante... mais c'est un autre problème). Une date est un nombre (valeur de type Long) dont des caractéristiques le font identifier par Excel comme par VBA (mais de façon non identique) comme date. Ce nombre-date (officiellement appelé numéro de série, dans Excel comme VBA) est stocké sous sa forme numérique. De ce fait tout nombre entier (dans les limites des plages de dates reconnues respectivement par Excel et VBA) peut être converti en date sans ambiguïté sur la date (hormis le bogue d'Excel sur 1900...). Inversement, une expression littérale (texte) ayant un format de date reconnu peut être converti en date, et il l'est mais c'est là que les problèmes interviennent...
myDate = myRange.Value
Quand tu écris ceci, myDate étant déclarée de type Date, tu lui affectes une valeur texte, ce qui va entraîner spontanément une conversion de l'expression en date. Si cette conversion ne peut se faire, tu auras une erreur (incompatibilité de type).
Sinon elle se fait, mais comme tu ne l'as pas demandée, VBA la réalise avec ses propres paramètres (identification des dates selon les formats américains...)
Il te faut donc toujours convertir explicitement, avec CDate ou DateValue, car dans ce cas, VBA ira se référer aux paramètres régionaux de Windows pour identifier les formats de date avant d'opérer la conversion...
Ensuite, quand tu écris :
myRange.Value = Format (myDate, "dd/mm/yyyy")
Il faut savoir que, dès lors que tu utilises la fonction Format, celle-ci renvoie une valeur texte. Tu fais donc l'inverse de ce que tu veux réaliser.
Ceci dit, le code de LordNelson45, qui respecte ces spécifications, devrait répondre à tes attentes...
Cordialement.