Vous utilisez un navigateur obsolète. Il se peut que ce site ou d'autres sites Web ne s'affichent pas correctement. Vous devez le mettre à jour ou utiliser un navigateur alternatif.
Hello
Je récupère un fichier Excel dans lequel est codée une date, mais en texte, pas en format date.
On lit par exemple en A1 : 3/10/2019 pour le 3 octobre mais c'est du texte, si bien qu'en VBA je ne peux pas la comparer à une date du jour.
Je passe donc par CDate(Range(”A1”)) et je colle le résultat dans ma feuille, et c'est ... le 10-mars-2019 !!!
Il l'a lue à l'anglaise !
Y a t il un paramètre utilisable avec CDate pour lui dire que c'est bien du JMA et pas MJA ?
bonsoir
et oui une colonne au format texte avec des date format non répertoriés ca ne peut que convertir
et puis Cdate est loin d'etre sur jouant avec les dates souvent j'ai pu m'en rendre compte plus d'une fois
heureusement il y a une petite sœur a cette fonction qui elle interprète plus facilement une date en string
et c'est peu de le dire !!!
je veux parler bien sur de "DateValue"
a oui elle est très bien
demo
VB:
Sub test()
[B1] = DateValue([A1])
[B2] = DateValue("3/10/2019")
[B3] = DateValue("3/octobre/2019")
[B4] = DateValue("2019/octobre/3")
[B5] = DateValue("3/octobre/19")
End Sub
Bonjour
par curiosité a tu vérifié si dans la barre de formule la date était pareille
si c'est le cas ca veut dire que c'est toi qui interprète la date comme elle n'est pas est que la date inscrite est bien le 10 mars xxxx
au quel cas pour être sur =datevalue([A1].text)
la propriété ".text" te donne ce que tu vois et non le ".value" ou ".formula"
Sub exemple_Aide_VBA()
'Cdate, fonction, exemple
'Cet exemple utilise la fonction CDate pour convertir une chaîne en Date.
'En règle générale, il n'est pas recommandé de programmer les dates
'et les heures sous la forme de chaînes développées
'(comme dans cet exemple).
'Utilisez plutôt des littéraux date et heure tels que #2/12/1969# et #4:45:23 PM#.
Dim MyDate, MyShortDate, MyTime, MyShortTime
MyDate = "12 février 1969" ' Définit la date.
MyShortDate = CDate(MyDate) ' Convertit en type Date.
MsgBox MyShortDate, vbExclamation, "ajout staple"
MyTime = "4:35:47 PM" ' Définit l'heure.
MyShortTime = CDate(MyTime) ' Convertit en type Date.
MsgBox MyShortTime, vbExclamation, "ajout staple"
End Sub
J'ai donc suivi le conseil de microsoft et O surprise
VB:
Sub test()
Dim D
Dim DD
Dim a$
D = #3/10/2019#
DD = #10/3/2019#
a = D & " <-D" & Chr(13)
a = a & DD & " <-DD" & Chr(13)
a = a & Format(D, "dddd dd mmmm") & " <-D" & Chr(13)
a = a & Format(DD, "dddd dd mmmm") & " <-DD" & Chr(13)
a = a & DateValue(CStr(D)) & " A" & " <-D" & Chr(13)
a = a & DateValue(CStr(DD)) & " A" & " <-DD"
MsgBox a, vbExclamation, "D=3/10/2019 & DD=10/03/2019... mais VBA dit autre chose"
End Sub
Il semble me souvenir que Cdate convertit en se basant sur les paramètres régionnaux de Windows
(Et l'inversion mois/date avec CDATE est un sujet récurrent sur G..gle et ailleurs)
re
re
Staple1600
si je ne me trompe pas l'encadrement par les diezes font de la chaîne interprété par vba un numéro de série de date il n'y a donc pas de soucis non?
en plus je crois me souvenir que pour format(d,"......") si d est un string il inverse
après l'aide n'a pas changé pour certaines fonctions depuis 2003 alors en prendre et en laisser comme on dit
ce qui est sur c'est q'un string de date sera mieux interprété converti avec datevalue que le reste elle est conçue pour ca
patricktoulon
Bah si justement, avec la macro test, on constate bien l'inversion, non ?
Si je définis D comme le 3 octobre et DD comme le 10 mars, c'est le monde à l'envers
PS: Mon précédent message était purement à caractère illustrafif et ou informatif
ben oui c'est normal
a la base MS est Americain mm/dd/yyyy
les fonction sont francisées dans les versions francaises mais pas le string un string est un string les fonctions ne peuvent donc pas fonctionner
quand tu injecte dans la fonction format
dans format tu injecte le string d'une date mais aussi en tant que date date sinon walouh !!!!
la tienne avec cdate donc date injecté dans format
ca fonctionne très bien
VB:
Sub test()
Dim D
Dim DD
Dim a$
D = CDate("3/10/2019")
DD = CDate("10/3/2019")
a = D & " <-D" & Chr(13)
a = a & DD & " <-DD" & Chr(13)
a = a & Format(D, "dddd dd mmmm") & " <-D" & Chr(13)
a = a & Format(DD, "dddd dd mmmm") & " <-DD" & Chr(13)
a = a & DateValue(CStr(D)) & " A" & " <-D" & Chr(13)
a = a & DateValue(CStr(DD)) & " A" & " <-DD"
MsgBox a, vbExclamation, "D=3/10/2019 & DD=10/03/2019... mais VBA dit autre chose"
End Sub
pour le problème de notre ami
il a envoyé un STRING!!!! de date en A1 formaté en texte ben a tout les coup vba va inverser
autrement dit tu a "3/10/2019" inscrit dans la cellule mais excel converti en US puisque pas de précision (string ou date)
pour quoi je dis toujours de formater les cellules AVANT !!! D'INJECTER UNE DATE et je dis bien injecter une date pas le string de celle ci
voila pourquoi j'ai demandé de regarder dans la barre de formule en sélectionnant la cellule voir si il y avait pas déjà inversion excel
donc vba inverse le string mais excel aussi et plutôt 2 fois qu'une
je sais c'est un truc dingue
c'est pour cela que j'ai mes à priori sur certaines fonctions Dates
les seules en qui je fait confiance c'est datevalue , dateserial , timevalue le reste par exemple cdate c'est juste pour tester la validité de la structure de chaine("xx/xx/xxxx" ou un des 3 format gérée nativement par vba) et non la validité de la date même si sur certains pc ça fonctionne
c'est mon point de vue en tout cas
edit
sans parler que office en dessous de 1901 gere tres mal
un exemple (bon d'accords il fallait aller la chercher celle la )
Code:
Sub test2()
MsgBox IsDate("29/02/0004") 'vrai alors que faux les années bissextiles commencent en 104 after petit bébé tout rose
MsgBox Year(CDate("29/02/0004")) 'réponse fausse car de toute manière ca n'est pas une date valide
MsgBox Month(CDate("29/02/0004")) 'réponse fausse car de toute manière ca n'est pas une date valide
MsgBox IsDate("29/13/0004") 'donne faux donc réponse correcte
'encore plus rigolo du au calcul interne
MsgBox Year(DateSerial(2019, 15, 1))
End Sub
[aparté]
En résumé trop de string tue le string
[/aparté]
Ceci dit la piste que je préconisais Données/Convertir évite bien des ecueils
Et elle a l'avantage de permettre de donner un peu de tendresse à sa souris (en la caressant un tant soit peu)
et/ou d'exercer sa mémoire et de partiquer l'art du raccourci-clavier
ALT+D ALT+N ALT+S ALT+S ALT+D ALT+T
(fonctionne sur Excel 2003, la séquence pourrait être différente dans les versions supérieures)
Si l'on veut qu'il y ait parfaite cohérence entre le VBA et la feuille de calcul il faut utiliser la fonction Excel DATEVAL.
Même si du coup la date du 29/02/1900 est valide bien que l'année 1900 ne soit pas bissextile (erreur Microsoft bien connue).
Voyez le fichier (2) avec cette macro :
VB:
Sub Convertir()
Dim c As Range
For Each c In [A1].CurrentRegion.Columns(1).Cells
c(1, 2) = "=IFERROR(DATEVALUE(" & c.Address & "),""N/C"")" 'fonction DATEVAL
c(1, 2) = c(1, 2)
Next
End Sub
re @job 75
je suis plutôt friand de l'utilisation de formule en VBA avec ou sans evaluate pour le sport dans la syntaxe
mais la dans le cas pressent ...ben non
en vba l'erreur peut être géré avec la même en vba (datevalue)
VB:
Option Explicit
Sub Convertir()
Dim c As Range
For Each c In [A1].CurrentRegion.Columns(1).Cells
c(1, 2) = "=IFERROR(DATEVALUE(" & c.Address & "),""N/C"")" 'fonction DATEVAL
c(1, 2) = c(1, 2)
Next
End Sub
Sub Convertir2()
Dim c As Range
For Each c In [A1].CurrentRegion.Columns(1).Cells
On Error Resume Next
c(1, 2) = "N/C"
c(1, 2) = DateValue(c.Text)
On Error GoTo 0
'"=IFERROR(DATEVALUE(" & c.Address & "),""N/C"")" 'fonction DATEVAL
'c(1, 2) = c(1, 2)
Next
End Sub
en vba le 29 février 1900 ne passe pas ,avec la formule ça passe
Bonjour, Je reviens sur une discutions de 2009 sur les numéros d'immatriculations des véhicules dans laquelle je n'ai pas trouvé ma réponse. Je voudrai crée un format immatriculation comme il y a un format N° de sécu. EX: si dans une cellule au format N° de sécu on tape "165101300000" et...
www.excel-downloads.com
Le résultat de ces explications sont fournies par le bouquin Excel VBA 2003 de Micro Application !
Ce site utilise des cookies pour personnaliser le contenu, adapter votre expérience et vous garder connecté si vous vous enregistrez.
En continuant à utiliser ce site, vous consentez à notre utilisation de cookies.