Date formatée à partir d'une chaîne de caractères alphabétiques ou numériques

david84

XLDnaute Barbatruc
Bonjour,

pour mes 4000 messages, je vous ai préparé une petite fonction capable de ramener une chaîne de caractères de type date au format choisi.

La chaîne de caractères à traiter peut être de type alphabétique ou numérique :
- trois mars mille neuf cent soixante cinq
- 3 mars mille neuf cent soixante cinq
- trois 3 mille neuf cent soixante cinq
- 3 3 mille neuf cent soixante cinq
- 3 3 1965
- etc.

La fonction renvoie une chaîne de caractères de type date grégorienne (notre calendrier actuel) au format par défaut jj/mm/aaaa.

Cependant, si vous le voulez, vous pouvez choisir un autre format.

Le résultat peut donc être entre autres :
- 03/03/1965
- 03 03 65
- 1965/03/03
- 03 mars 1965
- mer. 03 mars 1965
- mercredi 03 mars 1965
- etc.

L'année de la date peut aller de l'an 1 à 9999.

Les années entrées sous forme vigésimale sont acceptées (premier janvier onze cents) ainsi que les dizaines utilisées dans certains pays francophones (septante, octante, huitante, nonante) ou certaines abréviations de mois retrouvés dans certains registres (7bre pour septembre, 8bre pour octobre, 9bre pour novembre, 10bre pour décembre).

Vous remarquerez lors de vos tests que lorsque lorsque vous rentrez une date dont l'année est écrite en lettres et est inférieure à 100, la fonction sans format choisi vous ramènera la date choisie. Par contre, le choix d'un format aura pour conséquence le fait que la date ramenée est traitée par Excel comme une une année faisant partie du vingtième siècle pour les années 30 à 99 et du 21ème pour celles entre 00 et 29 (ce que fait Excel pour une date dont l'année ne comporte que 2 chiffres).

Pour le reste, je vous laisse découvrir par vous-même.

Le classeur comporte :
- 2 onglets avec dans chacun 3 menus déroulants permettant de faire varier le mois, l'année et le format éventuel
- une feuille test dans laquelle vous pouvez tester différentes dates dans différents formats.

Cette fonction peut être notamment associée à la fonction ExtraireDate développée ici, mais peut également être utilisée pour valider une date dans un formulaire (je n'ai pas testé cette possibilité mais je ne vois pas ce qui s'y opposerait).

Vous trouverez également 2 liens qui vous permettront de vérifier la concordance concernant le jour de la semaine ramené par la fonction lorsque le format utilisé le prévoit.

Si vous détectez des bugs ou si vous avez des remarques, n'hésitez pas.
A+
 

Pièces jointes

  • Date_AlphaNum_v4_XLD.xls
    363.5 KB · Affichages: 284
  • Date_AlphaNum_v4_XLD.xlsm
    98.9 KB · Affichages: 153
Dernière édition:

JCGL

XLDnaute Barbatruc
Re : Date formatée à partir d'une chaîne de caractères alphabétiques ou numériques

Bonjour à tous,
Salut David,

Joli cadeau que tu nous fais là...
Tu as même pensé au "mil"...

Tu t'es juste trompé pour l'année : moi c'est 1957... Arf... Arf...

A++ l'ami
A + à tous
 

Tibo

XLDnaute Barbatruc
Re : Date formatée à partir d'une chaîne de caractères alphabétiques ou numériques

Bonjour,

Bravo David pour ce Barbatruc que tu nous livres là.

Tu fais dans le first quality, comme d'hab.

Rien à dire, j'ai fait quelques tests, sans rencontrer de soucis.

Bravo à toi

@+
 

JNP

XLDnaute Barbatruc
Re : Date formatée à partir d'une chaîne de caractères alphabétiques ou numériques

Bonsoir le fil :),
Toujours aussi fou, mais efficace, c'est les généalogistes qui vont t'adorer :p...
Bonne soirée :cool:
 

MJ13

XLDnaute Barbatruc
Re : Date formatée à partir d'une chaîne de caractères alphabétiques ou numériques

Bonjour à tous

Félicitation David :) pour ce programme qui montre à quel point tu peux faire d'excellentes chose avec le VBA.

Dire qu'il y a 1 an , tu n'y connaissais rien :eek:.
 

tototiti2008

XLDnaute Barbatruc
Re : Date formatée à partir d'une chaîne de caractères alphabétiques ou numériques

Bonjour à tous, Bonjour David,

Simplement excellent ;)

ça donnerait presque envie de se mettre à RegExp :D (pas taper :p)

en effet les généalogistes et autres historiens frustrés par le début de calendrier d'Excel en 1900 vont te bénir, à partir de ça ça doit même être facile de faire des différences de dates en VBA, tu as fait le plus dur

Chapeau bas :)
 

david84

XLDnaute Barbatruc
Re : Date formatée à partir d'une chaîne de caractères alphabétiques ou numériques

Bonjour,
Tu t'es juste trompé pour l'année : moi c'est 1957... Arf... Arf...
Ben ça alors, moi qui croyais qu'on était jumeaux !
c'est les généalogistes qui vont t'adorer ...
Il y en a un qui m'adore déjà...
ça donnerait presque envie de se mettre à RegExp (pas taper )
Je suis à ta disposition si cela t'intéresse.

Merci à tous pour vos tests.
J'incorporerai cette fonction à la fonction Extraire Date présente dans le fil initié par Jean-Noël sur les RegExp lorsque je trouverai un moment.
A+
 

david84

XLDnaute Barbatruc
Re : Date formatée à partir d'une chaîne de caractères alphabétiques ou numériques

Bonjour,

ci-joint une version améliorée de la fonction Date_AlphaNum.
Cette version traite notamment la version abrégée du mois écrit en toutes lettres.

Quelques exemples de chaînes de caractères que l'ancienne version ne traitait pas :
24 janv.2000
1er janvier 2014
2ème jour de février 1678
12 dec 1787
1er janvier de l'année 2014
1er nov de l'an de grâce 1715
2 dec mille six cent cinq
deux dec mille huit cent cinq
3 sept 1857
trois janv 1854
vingt-cinq sept mille sept cent soixante-dix-neuf
vingt-cinq déc sept cent soixante-dix-neuf
vingt-cinq sept sept
sept sept sept
vingt-deux sept mille sept cent quatre-vingt-sept
vingt-cinq déc mille sept cent dix-sept
15ème jour du mois de décembre de l'an de grâce mille deux cents soixante dix-sept
vingt et un févr dix-huit cent nonante deux
sept sept dix-sept cent soixante-dix-sept
21 nov douze cent deux
quinze avr quatre-vingt-huit
Merci de me faire remonter les éventuels plantages et oublis.

Lorsque cette version sera opérationnelle, je l'incorporerai dans la fonction ExtraireDate comme indiqué dans mon 1er message.

Le fichier actualisé se trouve au #message1.
A+
 

david84

XLDnaute Barbatruc
Re : Date formatée à partir d'une chaîne de caractères alphabétiques ou numériques

Bonjour,

ci-joint la version 3 de la fonction Date_AlphaNum (fichiers actualisés au message #1).

Quelques exemples de nouvelles chaînes de caractères traitées :
- 1 ou un ramène 01/01/0001
- 12 13 ramène 01/12/0013
- janvier ramène 01/01/2012
- décembre 1230 ramène 01/12/1230
- 12 mars ramène 12/03/2012
- deux mille ramène 01/02/1000
- 2 deux mille ramène 01/02/2000
- l'an trois, le 11 novembre ramène 11/11/0003
- l'an mil neuf cent soixante quatre, le 13 août ramène 13/08/1964
- l'an 1945 le 6 juin ramène 06/06/1945
- l'an mille neuf cent quatre-vingt treize, le samedi vingt-cinq décembre ramène 25/12/1993
- etc.

Comme notifié antérieurement, il peut exister des différences de traitement concernant les chaînes numériques selon que l'on laisse ou non la main à Excel pour les traiter en tant que date.
J'ai donc placé un argument optionnel qui permettra de choisir ou non de laisser Excel traiter la chaîne numériques en tant que date. Par défaut, ce n'est pas le cas : si vous le souhaitez, placer le 3ème argument sur 1 (cf. onglet test, colonnes C et F en comparaison des colonnes B et E).

Bien entendu, l'argument optionnel lié au format de date choisi est toujours d'actualité.

Merci de me faire remonter les éventuels commentaires, plantages et oublis.
A+
 

Tibo

XLDnaute Barbatruc
Re : Date formatée à partir d'une chaîne de caractères alphabétiques ou numériques

Bonsoir,

...Merci de me faire remonter les éventuels commentaires...

J'ai un commentaire : Mais où vas-tu t'arrêter !!! ;):D

Sinon, un grand bravo pour l’œuvre et la persévérance que tu mets à l'améliorer sans cesse.

Bonne soirée

@+
 

david84

XLDnaute Barbatruc
Re : Date formatée à partir d'une chaîne de caractères alphabétiques ou numériques

Re
J'ai un commentaire : Mais où vas-tu t'arrêter !!!
Et bien là, à part si vous avez d'autres idées où si vous avez relevé des bugs, je ne vois pas trop ce que je peux apporter de plus.
A+
 

Modeste

XLDnaute Barbatruc
Re : Date formatée à partir d'une chaîne de caractères alphabétiques ou numériques

Bonjour tous ... et les autres :p

David, si tu t'ennuyes tu pourrais te lancer dans une version pour claviers bègues: à quelle date correspondrait le "t-treize mai-mai deux-deux mille d-douze"? :eek:

Bravo pour ce travail d'orfèvre! ... même si ça me dépasse!
 

david84

XLDnaute Barbatruc
Re : Date formatée à partir d'une chaîne de caractères alphabétiques ou numériques

Re
David, si tu t'ennuyes tu pourrais te lancer dans une version pour claviers bègues
pas le temps de m'ennuyer en ce moment !
à quelle date correspondrait le "t-treize mai-mai deux-deux mille d-douze"?
une expression rationnelle pourrait éventuellement traiter ce cas-là mais je t'avoue ne pas y avoir réfléchi...
Bravo pour ce travail d'orfèvre! ...
Merci pour cette gentille incursion empreinte d'humour.
Si vous n'avez pas relevé de bug ou d'oubli sur des types de dates à traiter, j'incorporerai donc à l'occasion cette fonction à la fonction ExtraireDate comme je l'avais indiqué dans mes précédents messages.
A+
 

david84

XLDnaute Barbatruc
Re : Date formatée à partir d'une chaîne de caractères alphabétiques ou numériques

Bonjour,
suite à un MP de Tibo, qui posait la question du traitement de l'année 0, je propose de la traiter de la manière suivante : d'après mes recherches, l'année 0 dans le calendrier Grégorien n'existe pas (pas plus que dans le calendrier Républicain d'ailleurs) : l'ère chrétienne prend en compte l'an 1.
L'année précédant l'an 1 est l'an -1 avant JC(GL bien entendu).
Il est cependant vrai qu'Excel traite par défaut 20/12/00 en 20/12/2000.
Lorsque le 2ème argument optionnel est sur 1, c'est d'ailleurs ce que fait la fonction mais cela ne fonctionne que pour les dates rédigées en chiffres (20 12 00 par exemple).
Cette nouvelle version traite donc l'année 0 de la même manière, mais en étendant ce traitement aux dates dont le jour et/ou l'année sont rédigés en chiffres et/ou en lettres.
Ainsi,
20 12 0
vingt décembre-0
vingt décembre/00
vingt décembre 000
vingt décembre 0000
20 dec 00
vingt 12 0
ramènent toutes 20/12/2000 au format par défaut (mercredi 20 décembre 2000 au format jjjj jj mmmm aaaa).

Si cela vous convient, on peut partir sur cette base.
Si vous avez d'autres idées sur ce cas (ou sur d'autres d'ailleurs), n'hésitez pas.
La nouvelle version du fichier (v4) est au message #1.
A+
 

Tibo

XLDnaute Barbatruc
Re : Date formatée à partir d'une chaîne de caractères alphabétiques ou numériques

Salut David,

Bravo à toi pour cette nouvelle version.

Une petite question cependant concernant le paramètre ;1 :

Avec le 20 12 1, la fonction =Date_AlphaNum(A248) retourne 20/12/0001
Avec le 20 12 1, la fonction =Date_AlphaNum(A248;1) retourne 20/12/2001.

Je comprends là l'intérêt du paramètre 1

Par contre, avec la même date, =Date_AlphaNum(A248;"jjjj jj mmmm aaaa") retourne la même valeur que =Date_AlphaNum(A248;"jjjj jj mmmm aaaa";1) : jeudi 20 décembre 2001

Est-ce voulu ?

Je n'ai pas relu le fil dans son détail, la réponse s'y trouve peut-être.

Bon dimanche

@+
 

Discussions similaires

Statistiques des forums

Discussions
312 104
Messages
2 085 345
Membres
102 868
dernier inscrit
JJV