Les millisecondes sont arrondies à la seconde la plus proche lorsque vous tentez d’affecter le format de Date VBA ou le format de date de variante à une cellule dans une feuille de calcul Excel.


Symptômes


Lorsque vous effectuez une modification par programmation de la valeur dans une cellule d’une feuille de calcul Microsoft Excel, la valeur de milliseconde que vous spécifiez est arrondie à la seconde la plus proche. Ce problème survient lorsque les conditions suivantes sont remplies :
  • La modification apportée affecte le format de Date VBA ou le format de date variante à la cellule.
  • Vous effectuez la modification par programmation à l’aide d’une macro Visual Basic pour applications ou à l’aide d’un client d’automation externe.
Ce problème ne se produit pas lorsque la modification apportée affecte le format de date ou le format d’heure à la cellule.

Cause


Ce problème se produit car Excel met en forme en interne les chaînes de date en fonction du format de date et d’heure spécifié sous l’onglet Options régionales de l’élément Options régionales et linguistiques du panneau de configuration. Cette valeur est arrondie à la seconde la plus proche. Excel assigne cette valeur à la cellule, puis recalcule la valeur pour générer une nouvelle valeur de date pour la cellule.

Solution de contournement


Appliquez l’une des méthodes suivantes pour contourner ce problème.

Méthode 1

Vous pouvez convertir la valeur de date sous forme de chaîne contenant une fraction de seconde. Cette valeur de chaîne peut être affectée à et calculée en tant que format de date qui conserve les millisecondes.

Méthode 2

Vous pouvez utiliser la propriété valeur2 de l’objet Range pour conserver les millisecondes. Par exemple, vous pouvez utiliser le code VBA suivant.
Sub CopyValueUsingVBDate()   Dim d As Date   d = ActiveSheet.Range("A1").Value   ActiveSheet.Range("B1").Value2 = dEnd Sub
Pour plus d’informations, cliquez sur le numéro ci-dessous pour consulter l’article de la base de connaissances Microsoft :
182812 Description de la propriété Valeur2 pour l’objet Range.