[VBA] Transformer une chaîne de caractère en Date

Résolu/Fermé
yacleouf
Messages postés
438
Date d'inscription
mercredi 11 mars 2009
Statut
Membre
Dernière intervention
8 juin 2015
- 23 mai 2013 à 18:01
yacleouf
Messages postés
438
Date d'inscription
mercredi 11 mars 2009
Statut
Membre
Dernière intervention
8 juin 2015
- 24 mai 2013 à 10:39
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

PHILOU10120
Messages postés
6091
Date d'inscription
lundi 16 avril 2012
Statut
Contributeur
Dernière intervention
7 août 2022
728
Modifié par PHILOU10120 le 23/05/2013 à 18:47
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
0
eriiic
Messages postés
24430
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
11 août 2022
7 105
23 mai 2013 à 18:34
Bonjour,

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

eric
0
Miura564
Messages postés
12992
Date d'inscription
dimanche 18 novembre 2012
Statut
Membre
Dernière intervention
2 février 2015
1 572
Modifié par Miura564 le 23/05/2013 à 18:44
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;@")
0
eriiic
Messages postés
24430
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
11 août 2022
7 105
23 mai 2013 à 19:13
Bonjour,

Pourquoi retransformer en texte ?
eric
0
Miura564
Messages postés
12992
Date d'inscription
dimanche 18 novembre 2012
Statut
Membre
Dernière intervention
2 février 2015
1 572
23 mai 2013 à 20:04
pour l'afficher en format date JJ/MM/AAAA
0
eriiic
Messages postés
24430
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
11 août 2022
7 105
23 mai 2013 à 20:38
Ca c'est fait par le choix du format d'affichage, il faut laisser la valeur au format date excel.
0
Miura564
Messages postés
12992
Date d'inscription
dimanche 18 novembre 2012
Statut
Membre
Dernière intervention
2 février 2015
1 572
Modifié par Miura564 le 23/05/2013 à 20:53
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)
0
eriiic
Messages postés
24430
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
11 août 2022
7 105
23 mai 2013 à 22:08
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
0
michel_m
Messages postés
16574
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
3 août 2022
3 277
Modifié par michel_m le 23/05/2013 à 19:31
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
0
Miura564
Messages postés
12992
Date d'inscription
dimanche 18 novembre 2012
Statut
Membre
Dernière intervention
2 février 2015
1 572
23 mai 2013 à 20:06
salut,

pourquoi démarrer ton compteur CPTR à zéro pour lui rajouter 1 après ?
0
eriiic
Messages postés
24430
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
11 août 2022
7 105
23 mai 2013 à 20:41
Salut michel,

donc si on est dans un code comme semble l'indiquer yacleouf
Ah, faut lire les titres aussi ? :-)
eric
0
michel_m
Messages postés
16574
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
3 août 2022
3 277
Modifié par michel_m le 24/05/2013 à 08:22
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)
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
yacleouf
Messages postés
438
Date d'inscription
mercredi 11 mars 2009
Statut
Membre
Dernière intervention
8 juin 2015
39
24 mai 2013 à 09:30
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 :-)

0
eriiic
Messages postés
24430
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
11 août 2022
7 105
24 mai 2013 à 09:52
Bonjour,

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

eric
0
Miura564
Messages postés
12992
Date d'inscription
dimanche 18 novembre 2012
Statut
Membre
Dernière intervention
2 février 2015
1 572
24 mai 2013 à 10:12
DATEVAL te donne le résultat sous forme ordinale
0
yacleouf
Messages postés
438
Date d'inscription
mercredi 11 mars 2009
Statut
Membre
Dernière intervention
8 juin 2015
39
24 mai 2013 à 10:39
@eriiic, merci ta solution est nickel !
0