Extraire et reconstituer date
Bonjour à tous,
Dans une liste de libellés bancaires, je voudrais obtenir la date contenue dans la colonne Description si elle existe et qu'elle est au format jour/mois ou jour/mois/année, sinon prendre la date de la colonne Date. Attention au changement d'année.
Pas de vba et pour Excel 2021 et 365
Merci de vos réponses et de vos idées, je sèche lamentablement.
Hello,
alors là...
J'étais persuadé que c'était impossible vu le gloubiboulga des données, donc pour rigoler j'ai donné ça à Claude.
Ben j'en suis tout étonné mais il l'a fait
Je n'y serais jamais arrivé seul et, sincèrement, je me pose la question si qq'un sur les forums aurait pu arrivé à ça en moins de 10 minutes
=LET(
txt; $B4;
refDate; $A4;
mots; SUPPRESPACE(STXT(SUBSTITUE(txt;" ";REPT(" ";100));(SEQUENCE(30)-1)*100+1;100));
estComplet; (NBCAR(mots)=10)*SIERREUR(ESTNUM(--GAUCHE(mots;2))*1;0)*(STXT(mots;3;1)="/")*SIERREUR(ESTNUM(--STXT(mots;4;2))*1;0)*(STXT(mots;6;1)="/")*SIERREUR(ESTNUM(--DROITE(mots;4))*1;0);
estPartiel; (NBCAR(mots)=5)*SIERREUR(ESTNUM(--GAUCHE(mots;2))*1;0)*(STXT(mots;3;1)="/")*SIERREUR(ESTNUM(--DROITE(mots;2))*1;0);
posComplet; SIERREUR(EQUIV(1;estComplet;0);0);
posPartiel; SIERREUR(EQUIV(1;estPartiel;0);0);
motComplet; SI(posComplet>0;INDEX(mots;posComplet);"");
motPartiel; SI(posPartiel>0;INDEX(mots;posPartiel);"");
jjC; SIERREUR(--GAUCHE(motComplet;2);1);
mmC; SIERREUR(--STXT(motComplet;4;2);1);
aaC; SIERREUR(--DROITE(motComplet;4);2000);
dateComplete; SI(ET(motComplet<>"";mmC>=1;mmC<=12;jjC>=1;jjC<=31;JOUR(DATE(aaC;mmC;jjC))=jjC);DATE(aaC;mmC;jjC);0);
jjP; SIERREUR(--GAUCHE(motPartiel;2);1);
mmP; SIERREUR(--DROITE(motPartiel;2);1);
aaP; ANNEE(refDate)-SI(mmP>MOIS(refDate);1;0);
datePartielle; SI(ET(motPartiel<>"";mmP>=1;mmP<=12;jjP>=1;jjP<=31;JOUR(DATE(aaP;mmP;jjP))=jjP);DATE(aaP;mmP;jjP);0);
SI(dateComplete<>0;dateComplete;SI(datePartielle<>0;datePartielle;refDate))
)
Je révise mon jugement sur l'IA sur ce coup
Bonjour à tous,
Je serai parti sur des formules plus modernes que Claude... Un premier jet me donne de bons résultats. D'ailleurs les voici :
Il y a juste sur les virements où je suis sceptique. Puisque d'après ma compréhension la colonne B est prioritaire sur A, pourquoi ne pas récupérer la date indiquée ?
Voici ma proposition :
=LET(
savedDate; A4;
foundDateT; REGEX.EXTRAIRE(Tableau1[@Description];"\b(\d{2}/\d{2})(?=\s*|/\d{2,4}\b)");
_m0; SI(
OU(1*TEXTE.APRES(foundDateT;"/")>12;1*TEXTE.APRES(foundDateT;"/")<1;ESTERREUR(1*TEXTE.APRES(foundDateT;"/")));
NA();
1*TEXTE.APRES(foundDateT;"/"));
_d; SI(ESTERREUR(_m0); JOUR(savedDate); 1*TEXTE.AVANT(foundDateT;"/"));
_m; SI(ESTERREUR(_m0); MOIS(savedDate); _m0);
_yT0; TEXTE.AVANT(TEXTE.APRES(Tableau1[@Description]; foundDateT); " ");
_yT1; SI(REGEX.TEST(_yT0; "(?:\d{2}|\d{4})"); 1*_yT0 + 2000 * ((1*_yT0)<100); NA());
_y; SI(ESTERREUR(_yT1); ANNEE(savedDate) - 1*(_m=12); _yT1);
DATE(_y;_m;_d)
)Hello
@saboh12617 les fonctions REGEX ne sont pas connues de 2021 il me semble
Hello
@saboh12617 les fonctions REGEX ne sont pas connues de 2021 il me semble
Ah bien vu ! J'avais oublié... Formule 365 exclusivement du coup.
Hello,
Une proposition
=LET(
Liste;FRACTIONNER.TEXTE(SUPPRESPACE(Tableau1[@Description]);" ");
ChercheSlash;SIERREUR(CHERCHE("/";Liste);0);
NombreSlash;NBCAR(Liste)-NBCAR(SUBSTITUE(Liste;"/";""));
DateNonFormatee;FILTRE(Liste;(ChercheSlash<>0)*(((ChercheSlash=3)*(NBCAR(Liste)=5))+((NombreSlash=2)*(NBCAR(Liste)=10)));Tableau1[@Date]);
MoisColLib;--DROITE(DateNonFormatee;2);
MoisColDate;MOIS(Tableau1[@Date]);
SI(OU(N(DateNonFormatee) > 0;NBCAR(DateNonFormatee)=10); --DateNonFormatee; SI(MoisColLib > MoisColDate; DATE(ANNEE(Tableau1[@Date])-1; MoisColLib; GAUCHE(DateNonFormatee;2));DATE(ANNEE(Tableau1[@Date]); MoisColLib; GAUCHE(DateNonFormatee;2))))
)@+
Juste par curiosité, @saboh12617 et @BAROUTE78, ils vous a fallu combien de temps pour mettre au points vos formules (grosso modo) ?