Bonjour,
Dans du code VBA, je dois comparer des dates venant de tables et des dates venant d'une saisie clavier.
J'ai un soucis pour les dates dont vba ou access ne peut déterminer si la date est du format jj/mm/yyyy ou du format mm/dd/yyyy exemple 9 janvier 2014 09/01/2014 qui peut aussi être visualisé comme 01/09/2014.
Quand je fais des comparaisons de dates, le format de mes inputs change si les mois et les jours ne peuvent pas être distingués. J'ai trouvé la littérature suivante qui dit bien y avoir un problème....
Requête SQL
- Access et le moteur Jet utilisent toujours la notation US (format "mm/dd/yyyy") en interne, pour les calculs et opérations.
- Access traduit ces dates au format indiqué dans le panneau de contrôle Windows, uniquement dans l'interface QBE (Query By Example = création de requêtes, dans le mode Création).
Pour illustrer cela, pendant la création d'une requête :
- saisir "=#09/11/2004#" comme Critère, sous n'importe quel champ date d'une requête en mode création,
- passer en mode SQL : le texte contient "= #11/09/2004#", mode US, pour exécution de la requête par le moteur Jet.
Calculs VBA
N'utiliser que le format US, le seul que les fonctions de date peuvent interpréter.
Contrôles de formulaires : comme l'interface QBE pour les requêtes, Access affiche par défaut les dates au format défini dans le panneau de contrôle de Windows.
Pour nous, format français "dd/mm/yyyy".
La propriété Format du contrôle n'a aucune influence sur la valeur qui sera stockée dans les tables (voir ci-dessous : c'est un nombre Double qui est stocké). Donc, vous pouvez mettre n'importe quel format dans un contrôle, y compris le format japonais ("yyyy/mm/dd", très utilisé pour les tris alphabétiques).
Dernière règle : lors d'une saisie dans l'interface QBE, directement dans un champ de table, de requête ou dans un contrôle :
- il y a systématiquement interprétation/inversion des jours/mois, comme ci-dessus, si les deux chiffres sont <= 12 ;
- si l'un des deux est > 12, c'est obligatoirement un jour. Ça ne peut pas être un n° de mois.
Mais comment éviter cette dernière règle? Le format(madate, "dd/mm/yyyy") ne résoud pas mon problème.
Merci d'avance,
david
Partager