Inversion jour/mois avec CDate

Docmarti

XLDnaute Occasionnel
Bonjour

Est-ce c'est possible que la commande qui suit produise une date erronée occasionnée par l'inversion du mois et du jour ?

Code:
Cells(1, 1).Value = CDate("17/02/2015")

Merci

Gérard
 

Docmarti

XLDnaute Occasionnel
Re : Inversion jour/mois avec CDate

Bonjour camarchepas, mutzik, Pierrot93, à tous

@camarchepas : Merci de ta réponse. Je vois que tu avais déjà observé le problème avec CDate.

@mutzik : Merci de ta réponse.

mais bon... A voir le but de ta question...

@Pierrot93 : Ta question est pertinente. Le but de ma question est de vous soumettre une idée selon laquelle cette inversion du jour et du mois dans les dates serait causée uniquement par une conversion automatique ne se produisant que quand le type de la donnée est différent du type attendu par la cellule (Texte, Nombre, date) en fonction de sa propriété NumberFormat.
Ainsi, si le type de la donnée est String et que le type attendu par la cellule est Nombre ou Date, il y a toujours tentative de conversion. Et le résultat est soit faux, soit du Texte.
De la même façon, si le type de la donnée est Date et que le type attendu par la cellule est Texte, il y aura également conversion. Et le résultat est faux.

C'est une théorie que je vous soumets donc.

Cordialement

Docmarti
 

MJ13

XLDnaute Barbatruc
Re : Inversion jour/mois avec CDate

Bonjour à tous

Il me semble que Cdate donne souvent la bonne date.

Mais il se peut que dans certains cas avec des Userform, par exemple, on ait des surprises.

Il faudrait nous dire dans quel cas, cela ne fonctionne pas.
 

Docmarti

XLDnaute Occasionnel
Re : Inversion jour/mois avec CDate

Bonjour Michel; à tous.

Voici un démo qui illustre les différents résultats obtenus selon le type de la variable (String ou Date) et le type de la cellule (Date, Nombre ou Texte)

CDate vers cellule Texte
CDate vers cellule Date
CDate vers cellule Nombre

Date String vers cellule Texte
Date String vers cellule Date
Date String vers cellule Nombre

Quand il y a conversion de la date (et c'est toujours au format américain lors), si le jour de la date est inférieur à 13, il y a inversion jour/mois, ce qui produit une erreur de date, sauf si le jour et le mois sont identiques bien sûr.
Si le jour est supérieur à 12, il ne peut pas y avoir d'inversion jour/mois. Mais la date n'est alors pas considérée comme une date, mais comme un simple texte.

Docmarti
 

Pièces jointes

  • Demo_Conversion_dates_XlDownloads_005.xlsm
    19.6 KB · Affichages: 66

Efgé

XLDnaute Barbatruc
Re : Inversion jour/mois avec CDate

Bonjour à tous,

Pour les problèmes d'inversion Mois/Jour il faut utiliser Cells(x,y).FormulaLocal.

Cordialement
 

Pièces jointes

  • Demo_Conversion_dates_XlDownloads_005(2).xlsm
    22.2 KB · Affichages: 82

MJ13

XLDnaute Barbatruc
Re : Inversion jour/mois avec CDate

Re

De toute façon, il y a toujours eu des problèmes de format date sur Excel. Il faut toujours avoir un esprit critique sur ce type de données.

Je n'ai pas de solution miracle, mais c'est sûr que sur des données de type texte, on peut avoir des surprises.

Et si le fichiers est au format américain, bonjour la galère.

Voici un petit fichier pour illustrer mon propos, il suffit de cliquer sur les cellules en rouge et sur a et B.
 

Pièces jointes

  • Cdate_Type_Format.xlsm
    22.3 KB · Affichages: 71

Docmarti

XLDnaute Occasionnel
Re : Inversion jour/mois avec CDate

Bonjour Efgé ; MJ13 ; le fil ; le Forum

@MJ13 : Merci pour ton petit fichier avec tableau comparatif de colonnes ayant des formats différents. Ça m'a inspiré pour étudier la suggestion de Efgé.

@Efgé : Merci pour ta solution (FormulaLocal) que tu disais magique et que tu me fais pour la seconde fois, je dois l'avouer. Cette fois-ci, je l'ai étudiée. Et c'est bien vrai : elle est magique.

Je joins un fichier qui permet de voir la facilité qu'apporte FormulaLocal pour traiter les dates en VBA par comparaisoin avec la propriété Value qui fonctionne bien pour le format de date américain, mais qui pose bien des problèmes au niveau local.
Les problèmes sont plus visibles pour les dates où le jour est entre 1 et 12 car c'est là que survient souvent l'inversion jour/mois.

Cordialement

Docmarti
 

Pièces jointes

  • Comparer_FormulaLocal_vs_Value_pour_les_dates_003.xlsm
    21.4 KB · Affichages: 67

MJ13

XLDnaute Barbatruc
Re : Inversion jour/mois avec CDate

Bonjour à tous

Merci Gérard :) pour ce nouveau fichier que je trouve un peu plus clair que le précédent.

Et merci à Efgé :) pour ce formulaLocal qui pourrait aider certains qui ont ce type de problèmes.

Sinon, un truc qui fonctionne souvent pour importer des fichier .txt ou .csv avec des problèmes de dates inversées, il suffit d'ajouter dans le code d'importation générer par l'enregistreur de macros du texte à la fin ,Local:=true. Dès fois, cela fonctionne.
 

Docmarti

XLDnaute Occasionnel
Re : Inversion jour/mois avec CDate

Bonjour à tous

Merci MJ13. En effet, il n'y a pas d'inversion jour/mois avec Local:=True. Ca règle un problème.

Code:
Workbooks.Open Filename:=ch, Local:=True

Pour indiquer à Excel quel est le séparateur de liste du fichier, Microsoft recommande d'ajouter en tête du fichier une ligne qui contient
Code:
sep=,


Cordialement

Docmarti
 

Discussions similaires

Réponses
5
Affichages
166
Réponses
11
Affichages
504

Statistiques des forums

Discussions
312 088
Messages
2 085 202
Membres
102 817
dernier inscrit
Nini668