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

david84

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

Bonjour Tibo, le fil,
Une petite question cependant concernant le paramètre ;1
Comme tu l'as compris je pense, le paramètre 1 donne la main à Excel pour qu'il puisse éventuellement traiter la chaîne en tant que date. Si c'est le cas, le traitement est effectué dès le début de la fonction et celle-ci est interrompue.
On gagne en temps de traitement mais les résultats ramenés peuvent être différents. Cela dépend donc du type de traitement recherché.
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 ?
Pas vraiment. En fait je laisse Excel gérer le format choisi.
Si tu tapes dans une cellule quelconque 20/12/1 et tu appliques à cette cellule le format de date longue, Excel te ramène jeudi 20 décembre 2001. Je lui laisse donc faire le travail qu'il fait habituellement.

Maintenant, le fait que tu soulèves concerne les années inférieures à 100 dont la chaîne de caractères n'est pas interprétée par Excel comme une date, ce qui est le cas de 20 12 1 (il suffit de faire le test dans une cellule quelconque pour s'en apercevoir).
Si l'on choisi un format jjjj jj mmmm aaaa la fonction te ramène actuellement jeudi 20 décembre 2001.
Préférerais-tu qu'elle ramène jeudi 20 décembre 0001 (le 20 décembre de l'an 1 était un jeudi) ?

Si je teste 1 1 30 au même format la fonction ramène actuellement mercredi 01 janvier 1930.
Si je te comprends, tu trouverais plus cohérent que Date_AlphaNum(ta chaîne;"jjjj jj mmmm aaaa") ramène mardi 01 janvier 30 et que Date_AlphaNum(ta chaîne;"jjjj jj mmmm aaaa";1) ramène mercredi 01 janvier 1930.

Est-ce cela ?
A+
 

Tibo

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

er,

La présence du paramètre 1 donne la main à Excel : d'accord

A contrario, son absence ne devrait pas donner la main à Excel.

Si je teste 1 1 30 au même format la fonction ramène actuellement mercredi 01 janvier 1930.
Si je te comprends, tu trouverais plus cohérent que Date_AlphaNum(ta chaîne;"jjjj jj mmmm aaaa") ramène mardi 01 janvier 30 et que Date_AlphaNum(ta chaîne;"jjjj jj mmmm aaaa";1) ramène mercredi 01 janvier 1930.

Est-ce cela ?

Oui, car dans le cas présent, ta fonction (sans le paramètre 1) retourne une date en 1930, mais peut-être s'agit-il de 1830 ou 1730 ou ..., sachant que l'application concerne entre autres les généalogistes.

Cela dit, sur les actes anciens (actes de naissance, de mariage, décès, etc.), il me semble que les années sont toujours écrites de façon complète (en toutes lettres ou sur 4 chiffres).

Dans le même temps, il est très peu probable qu'une date 1 1 30 corresponde réellement au 1er janvier de l'an 30 de notre ère. Mais comme indiqué quelques lignes plus haut, il est difficile de rattacher cette année 30 à un siècle précis.

Une idée peut-être, en l'absence de ce paramètre 1 et d'une année sur 2 chiffres, retourner le résultat suivi d'un ? ou dans un format particulier (en italique ou en couleur ou... au choix) de façon à indiquer que le résultat est à prendre avec prudence.

Peut-être que des généalogistes rodent sur XLD. Qu'ils n'hésitent pas à intervenir pour donner leur avis.

Je renouvelle mon bravo et te souhaite un bon dimanche.

@+
 

david84

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

Re
A contrario, son absence ne devrait pas donner la main à Excel.

Le problème est qu'à partir du moment où tu veux formater une date et que tu laisses Excel faire ce travail, tu laisses à nouveau la main à Excel dans le sens où le système va appliquer le format comme il a l'habitude de le faire en traitant les années de 1 à 29 comme 2001 à 2029 et celles de 30 à 99 comme 1930 à 1999.
Question intéressante...je vais y réfléchir.
Merci de tes retours qui sont toujours les bienvenus.
A+
 

david84

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

Re Tibo,

Après réflexion, je fais le choix de ne pas retoucher la dernière version de la fonction Date_AlphaNum pour la raison suivante : comme expliqué au message #1, cette fonction n'a pas pour but d'extraire une date d'un texte quelconque mais de ramener une chaîne de caractères de type date au format choisi, ce qui n'est pas la même chose.
Il est donc souhaitable que la chaîne de caractère puisse être traitée comme une date quelconque par le système dès qu'un format lui est appliqué.

Ceci-dit, ta remarque est intéressante mais je pense que c'est plutôt à la fonction ExtraireDate (qui elle pour but d'extraire une ou plusieurs dates d'un texte) de faire ce travail, à savoir ramener une "date" correspondant à la chaîne traitée même si un format lui est appliqué :
- le 3 1 1 au format jjjj jj mmmm aaaa devrait ramener mercredi 03 janvier 0001 au lieu de mercredi 03 janvier 2001 comme c'est le cas actuellement,
- le 3 1 30 devrait ramener jeudi 03 janvier 0030 au lieu de vendredi 03 janvier 1930 comme c'est le cas actuellement.

Je vais réfléchir à la manière dont on peut s'y prendre.
Ceci-dit, il faut que la solution (si j'en trouve une) ne soit pas une usine à gaz car n'oublions pas que le traitement de ces dates formatées dont l'année est inférieure à 100 serait marginal pour ne pas dire exceptionnel voire "expérimental".

Un grand merci pour tes retours de tests !
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 nouvelle version suite aux remarques de Tibo afin d'obtenir un traitement des dates plus affiné pour les années 1 à 99 :
Concernant une année comprise entre 1 et 29 par exemple la chaîne
premier janvier un
placée en B1:
=ExtraireDateMat(B1) ramène 01/01/0001
=ExtraireDateMat(B1;;1) ramène 01/01/2001
=ExtraireDateMat(B1;"jjjj jj mmmm aaaa") ramène lundi 01 janvier 0001
=ExtraireDateMat(B1;"jjjj jj mmmm aaaa";1) ramène lundi 01 janvier 2001

Concernant une année comprise entre 30 et 99 par exemple la chaîne
premier janvier trente
placée en B1:
=ExtraireDateMat(B1) ramène 01/01/0030
=ExtraireDateMat(B1;;1) ramène 01/01/1930
=ExtraireDateMat(B1;"jjjj jj mmmm aaaa") ramène mardi 01 janvier 0030
=ExtraireDateMat(B1;"jjjj jj mmmm aaaa";1) ramène mercredi 01 janvier 1930

En résumé, retenez que le 2ème argument optionnel ne vous servira que si vous êtes amenés à traiter les années situées entre 1 et 99, soit parce que ce sont les années réelles à traiter, soit parce que l'année retranscrite est tronquée : vous l'utiliserez afin de ramener l'année la plus cohérente en fonction du contexte.

Le traitement des formats a également été complété (vous pouvez les tester de votre côté grâce au menu déroulant).

Ci-joint un lien vous permettant de vérifier la concordance du jour de semaine affiché en fonction du format choisi
A+
 

Pièces jointes

  • Date_AlphaNum_v5_XLD.xlsm
    103.1 KB · Affichages: 184
  • Date_AlphaNum_v5_XLD.xls
    372 KB · Affichages: 136

Discussions similaires

Statistiques des forums

Discussions
312 305
Messages
2 087 070
Membres
103 453
dernier inscrit
Choupi