[VBA] Transformer une chaîne de caractère en Date [Résolu/Fermé]

Signaler
Messages postés
438
Date d'inscription
mercredi 11 mars 2009
Statut
Membre
Dernière intervention
8 juin 2015
-
Messages postés
438
Date d'inscription
mercredi 11 mars 2009
Statut
Membre
Dernière intervention
8 juin 2015
-
Bonjour,

je suppose que c'est pas quelque chose de compliqué mais je dois avouer que je sèche ...

je m'explique, en entrée j'ai une chaîne de caractère du type "déc2013", "janv2013" etc ...
et j'aimerais en récupérer la date (premier du mois) sous forme JJ/MM/AAAA
j'ai essayé le format(maDate , "DD/MM/YYYY") mais ça n'est pas passé ... en passant mon curseur dessus, la chaîne contient toujours une string ...

j'espère que j'ai été explicite ? :-)



5 réponses

Messages postés
23429
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
15 août 2020
6 293
Bonjour,

ou bien sélectionner la colonne ou la plage et 'données / convertir...', choisir Date JMA à l'étape 3

eric
Messages postés
12992
Date d'inscription
dimanche 18 novembre 2012
Statut
Membre
Dernière intervention
2 février 2015
1 327
bonsoir,


ton problème peut être réglé dans une simple formule. en supposant que tes chaines de caractères se trouvent en colonne A. la formule est :

=TEXTE(DATEVAL(GAUCHE(A1;NBCAR(A1)-4)&"/"&DROITE(A1;4));"jj/mm/aaaa;@")
Messages postés
23429
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
15 août 2020
6 293
Bonjour,

Pourquoi retransformer en texte ?
eric
Messages postés
12992
Date d'inscription
dimanche 18 novembre 2012
Statut
Membre
Dernière intervention
2 février 2015
1 327
pour l'afficher en format date JJ/MM/AAAA
Messages postés
23429
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
15 août 2020
6 293
Ca c'est fait par le choix du format d'affichage, il faut laisser la valeur au format date excel.
Messages postés
12992
Date d'inscription
dimanche 18 novembre 2012
Statut
Membre
Dernière intervention
2 février 2015
1 327
non, lorsque j'utilise DATEVAL, le resultat est sous forme ordinale. Pour obliger l'affichage sous un format date JJ/MM/AAAA j'ai utilisé la fonction TEXTE()

avec ma formule, pas besoin de formater la cellule, ça se fait tout seul

regarde cet exemple (Excel 2010)
Messages postés
23429
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
15 août 2020
6 293
avec ma formule, pas besoin de formater la cellule, ça se fait tout seul
Et tu fais pareil lorsque tu veux 2 décimales fixes ?

Sauf que c'est du texte (une conversion en trop), et qu'à chaque fois que veux l'utiliser excel doit refaire à nouveau une conversion en sens inverse.
Et si je veux changer le format d'affichage je ne peux pas.

Juste une question d'efficacité.
Excel connait le format date, autant l'utiliser.

eric
Messages postés
16179
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
15 août 2020
3 007
Bonjour

Si dans une cellule j'écris janv2013 , excel transforme automatiquement janv2013 en date

mais si dans un code j'ai une variable par ex "janv2014" l'envoi dans une cellule ne produit pas la transformation en date

donc si on est dans un code comme semble l'indiquer yacleouf

Function transfo_date(date_txt As String) As Date
Dim anne As Integer, mois_txt As String, mois(), mois_num As Byte
     annee = Right(date_txt, 4)
     mois_txt = Left(date_txt, Len(date_txt) - 4)
     mois = Array("janv", "fév", "mars", "avr", "mai", "jun", "juil", "aout", "sept", "oct", "nov", "déc")
     For cptr = 0 To 11
          If mois(cptr) = mois_txt Then mois_num = cptr + 1
          Exit For
     Next
     transfo_date = DateSerial(annee, mois_num, 1)
End Function

Sub test()
Range("B2") = transfo_date("fév2014")

End Sub


attention à vérifier mon orthographe des mois dans l'array !!!

Michel
Messages postés
12992
Date d'inscription
dimanche 18 novembre 2012
Statut
Membre
Dernière intervention
2 février 2015
1 327
salut,

pourquoi démarrer ton compteur CPTR à zéro pour lui rajouter 1 après ?
Messages postés
23429
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
15 août 2020
6 293
Salut michel,

donc si on est dans un code comme semble l'indiquer yacleouf
Ah, faut lire les titres aussi ? :-)
eric
Messages postés
16179
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
15 août 2020
3 007
Bonjour Miura,

Parce que un array a comme base 0
fais un essai avec "janv": l'array te renvoie zéro


Ca va Eric? ;o)
Messages postés
438
Date d'inscription
mercredi 11 mars 2009
Statut
Membre
Dernière intervention
8 juin 2015
34
Oua tant de réponses !
merci à vous tous pour vos contributions !
les solutions de formules ne sont pas envisageable dans mon cas (code vb) et je n'ai pas envie de faire du formula ou autres :-)

d'ailleurs pour solutionner mon problème (au travers d'une formule !) un simple
=DATEVALUE(A1)
est amplement suffisant et me donne mon résultat attendu,

ce que j'aimerais c'est justement trouver une solution aussi "simple" et "rapide" que celle ci mais au travers de code VB !?

Merci encore,

@michel_m, pourrais tu m'expliquer comment est ce que tu modifierais ton tableau "mois" si les données de ce tableau sont contenu dans une range Excel (par ex : A1:A12) ?

merci :-)

Messages postés
23429
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
15 août 2020
6 293
Bonjour,

autre proposition :
d = "janv2014"
[A1] = CDate("1 " & Left(d, Len(d) - 4) & " " & Right(d, 4))

eric
Messages postés
12992
Date d'inscription
dimanche 18 novembre 2012
Statut
Membre
Dernière intervention
2 février 2015
1 327
DATEVAL te donne le résultat sous forme ordinale
Messages postés
438
Date d'inscription
mercredi 11 mars 2009
Statut
Membre
Dernière intervention
8 juin 2015
34
@eriiic, merci ta solution est nickel !
Messages postés
5493
Date d'inscription
lundi 16 avril 2012
Statut
Contributeur
Dernière intervention
15 août 2020
470
Bonjour

Avec une formule

En A4 l'information à traiter "janv2013 ou "déc2013"

=CNUM(GAUCHE(A4;3)&"/"&DROITE(A4;4)) formater la cellule jj/mm/aaaa

C'est en forgeant que l'on devient forgeron. - C'est au pied du mur que l'on voit le maçon - on apprend toujours de ses erreurs