• Initiateur de la discussion Initiateur de la discussion jbat
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

J

jbat

Guest
bonjour à tous,

j'ai un problème que je vais résumer ainsi:

j'ai un chiffre qui peut être sous la forme 201.77.112.417 donc string ou sous la forme 201177112417 donc nombre.

avec ce chiffre je peux retrouver une date de naissance en effet, le 77 correspond à l'année de naissance et le 112 c'est le mois suivit du jour de naissance.

je suis en train de faire une fonction qui me sort cette date de naissance mais j'ai quelques petits soucis quant à concatener le tout sous forme de date jj.mm.aaaa.
voilà donc si queqlu'un a une astuce...
merci et bon week-end à tous
 
moi j'ai fait ça mais je reste perplexe sur ma formule isnumber...:
Function avs_naiss(no_avs As Variant)

'test le format'
If Application.WorksheetFunction.IsNumber(no_avs) = False Then
avs_naiss1 = False
ElseIf no_avs - Int(no_avs) = 0 Then
avs_naiss1 = True
Else: avs_naiss1 = False
End If
'test sur les points'
If Application.WorksheetFunction.IsNumber(no_avs) = False And Application.WorksheetFunction.IsNumber(mid(no_avs, 4, 1)) = False And Application.WorksheetFunction.IsNumber(mid(no_avs, 7, 1)) = False Then
avs_naiss2 = False
Else: avs_naiss2 = True
End If

If avs_naiss1 = False Or avs_naiss2 = False Then
avs_naiss = "#Error in No_AVS format!"
ElseIf Application.WorksheetFunction.IsNumber(mid(no_avs, 4, 1)) = True Then
avs_naiss3 = 1
Else: avs_naiss3 = 2
End If

If mid(no_avs, (4 + 2 * avs_naiss3), 1) = 0 Or mid(no_avs, (4 + 2 * avs_naiss3), 1) = 9 Then
avs_naiss = "#Error in No_AVS format!"
ElseIf mid(no_avs, 4 + 2 * avs_naiss3, 1) < 5 And Modulo(mid(no_avs, 5 + 2 * avs_naiss3, 2), 31) = 0 Then
avs_naiss = DateAdd("yyyy", mid(no_avs, 3 + avs_naiss3, 2), DateAdd("m", (mid(no_avs, 4 + 2 * avs_naiss3, 1) - 1) * 3 + 1 + Int(mid(no_avs, 5 + 2 * avs_naiss3, 2) / 31.5), DateAdd("d", 31, 0)))
Else: avs_naiss = DateAdd("yyyy", mid(no_avs, 3 + avs_naiss3, 2), DateAdd("m", (mid(no_avs, 4 + 2 * avs_naiss3, 1) - 5) * 3 + 1 + Int(mid(no_avs, 5 + 2 * avs_naiss3, 2) / 31.5), DateAdd("d", Modulo(mid(no_avs, 5 + 2 * avs_naiss3, 2), 31), 0)))
End If

If avs_naiss >= Date Then
avs_naiss = 1
Else: avs_naiss = avs_naiss
End If



'c11=IF(ISNUMBER(VALUE(No_AVS))=FALSE;FALSE;IF(No_AVS-TRUNC(No_AVS)=0;TRUE;FALSE))
'c12=AND(ISNUMBER(VALUE(No_AVS))=FALSE;ISNUMBER(1*MID(No_AVS;4;1))=FALSE;ISNUMBER(1*MID(No_AVS;7;1))=FALSE)
'=IF(OR(C11=TRUE;C12=TRUE)=TRUE;;RETURN("#ERROR IN No_AVS FORMAT!"))
'c14=IF(ISNUMBER(1*MID(No_AVS;4;1))=TRUE;1;2)
'=IF(OR(1*MID(No_AVS;4+2*C14;1)=0;1*MID(No_AVS;4+2*C14;1)=9)=TRUE;RETURN("#ERROR IN No_AVS FORMAT!")😉
'c16=DATE(MID(No_AVS;3+C14;2);(MID(No_AVS;4+2*C14;1)-IF(1*MID(No_AVS;4+2*C14;1)<5;1;5))*3+1+TRUNC(MID(No_AVS;5+2*C14;2)/31.5);IF(MOD(MID(No_AVS;5+2*C14;2);31)=0;31;MOD(MID(No_AVS;5+2*C14;2);31)))
'c17=IF(C16>=NOW();1;C16)
'=RETURN(C17)'


End Function
 
Re, et merci pour ta précision

Mais elle risque, du moins dans un premier d'en interresser d'autre plus musclé que moi...

Maintenant, pour revenir à mon coup de G......

S'il ne s'agit pas du même Luc et Belge à la fois.... Sorry for all..

jp
 
valeur ou caractère?

j'ai écrit cette fonction dans le but de savoir si lorsque je rentre un chiffre du format 140.77.112.217 ou 14077112217 je puisse savoir si en position 4 il y a un point ou un chiffre et de ce fait si ma valeur est string ou nombre mais je n'arrive pas à rendre un résultat...

Function isnumberr(no_avs As Variant)
If Application.WorksheetFunction.IsNumber(mid(no_avs, 4, 1)) = False Then
avs_naiss1 = False
ElseIf no_avs - Int(no_avs) = 0 Then
avs_naiss1 = True
Else: avs_naiss1 = False
End If
isnumberr = avs_naiss1

End Function

quelqu'un sait-il pourquoi?

merci à tous
 
Re...

Voici une formule, attention les yeux 473 caractères (le 11 décembre)

=DATE(STXT(SUBSTITUE(A2;".";"");4;2);EQUIV(1;FREQUENCE(STXT(SUBSTITUE(A2;".";"");6;3)-(ENT(STXT(SUBSTITUE(A2;".";"");6;3)/500)*400);{101;132;163;201;232;263;301;332;363;401;432;463});0);STXT(SUBSTITUE(A2;".";"");6;3)-(ENT(STXT(SUBSTITUE(A2;".";"");6;3)/500)*400)-INDEX({101;132;163;201;232;263;301;332;363;401;432;463};EQUIV(1;FREQUENCE(STXT(SUBSTITUE(A2;".";"");6;3)-(ENT(STXT(SUBSTITUE(A2;".";"");6;3)/500)*400);{101;132;163;201;232;263;301;332;363;401;432;463});0);0)+1)

C'est une formule matricielle à Valider par Crtl+Shift+Entrer

Pour l'essai la cellule contenant la valeur était A2.

Je suis partie de la chaîne alpha 201.77.432.417, si tu n'as que des valeurs numériques tu peux supprimer SUBSTITUE(A2;".";"") par A2.

Pour faire plus court, j'ai utilisé la fonction fréquence qui évite de faire des SI(Tranches1;...;SI(Tranches2;....)
La fonction Equiv(1....) me retourne le numéro de la tranche donc le numéro du mois.

Après même opération pour le jour dans le mois

Bonne journée

@+Jean-Marie
 
Bonjour,

Tu peux essayer ces 2 formules, c'est un début de collection.

Si tes données se présentent avec des points :
=DATE((STXT(A7;5;2)+1900+SI(STXT(A7;5;2)*1<10;100));(CHOISIR(STXT(A7;8;1)-SI(STXT(A7;8;1)*1>4;4);1;4;7;10)+SI(STXT(A7;9;2)*1>31;1+SI(STXT(A7;9;2)*1>62;1)));STXT(A7;9;2)-SI(STXT(A7;9;2)*1>31;31+SI(STXT(A7;9;2)*1>62;31)))
Sinon :
=DATE((STXT(A8;4;2)+1900+SI(STXT(A8;4;2)*1<10;100));(CHOISIR(STXT(A8;6;1)-SI(STXT(A8;6;1)*1>4;4);1;4;7;10)+SI(STXT(A8;7;2)*1>31;1+SI(STXT(A8;7;2)*1>62;1)));STXT(A8;7;2)-SI(STXT(A8;7;2)*1>31;31+SI(STXT(A8;7;2)*1>62;31)))

La formule est décomposée dans le fichier joint.
 

Pièces jointes

Re jbat,

Je viens de voir "rapide" le fichier de Monique, je n'ai pa encore eu le temps d'analyser, déjà que le débur n'est facile, mais cela semble très intééressant...

Bonne soirée (ah elle n'est encore commencée), bon on fait avec

jp
 
oui je l'étudie moi aussi mais pas facile...
j'ai encore une question:
la fonction mid() renvois un caractère comment je peut le transformer en valeur dans VBA? dans excel je fais =value(mid()) mais dans VBA ?

bonne soirée et surtout bon week end!
youhouhou!
 
Re,

Qu'il y ait ou non des séparateurs entre les différents éléments du n° :

=DATE((STXT(A9;5-SI(ESTNUM(A9);1);2)+1900+SI(STXT(A9;5-SI(ESTNUM(A9);1);2)*1<10;100));(CHOISIR(STXT(A9;8-SI(ESTNUM(A9);2);1)-SI(STXT(A9;8-SI(ESTNUM(A9);2);1)*1>4;4);1;4;7;10)+SI(STXT(A9;9-SI(ESTNUM(A9);2);2)*1>31;1+SI(STXT(A9;9-SI(ESTNUM(A9);2);2)*1>62;1)));STXT(A9;9-SI(ESTNUM(A9);2);2)-SI(STXT(A9;9-SI(ESTNUM(A9);2);2)*1>31;31+SI(STXT(A9;9-SI(ESTNUM(A9);2);2)*1>62;31)))
 
Re,

En anglais :

Avec des points dans le n°
=DATE((MID(A7,5,2)+1900+IF(MID(A7,5,2)*1<10,100)),(CHOOSE(MID(A7,8,1)-IF(MID(A7,8,1)*1>4,4),1,4,7,10)+IF(MID(A7,9,2)*1>31,1+IF(MID(A7,9,2)*1>62,1))),MID(A7,9,2)-IF(MID(A7,9,2)*1>31,31+IF(MID(A7,9,2)*1>62,31)))

Sans points, format nombre standard
=DATE((MID(A8,4,2)+1900+IF(MID(A8,4,2)*1<10,100)),(CHOOSE(MID(A8,6,1)-IF(MID(A8,6,1)*1>4,4),1,4,7,10)+IF(MID(A8,7,2)*1>31,1+IF(MID(A8,7,2)*1>62,1))),MID(A8,7,2)-IF(MID(A8,7,2)*1>31,31+IF(MID(A8,7,2)*1>62,31)))

Peu importe le format
=DATE((MID(A9,5-IF(ISNUMBER(A9),1),2)+1900+IF(MID(A9,5-IF(ISNUMBER(A9),1),2)*1<10,100)),(CHOOSE(MID(A9,8-IF(ISNUMBER(A9),2),1)-IF(MID(A9,8-IF(ISNUMBER(A9),2),1)*1>4,4),1,4,7,10)+IF(MID(A9,9-IF(ISNUMBER(A9),2),2)*1>31,1+IF(MID(A9,9-IF(ISNUMBER(A9),2),2)*1>62,1))),MID(A9,9-IF(ISNUMBER(A9),2),2)-IF(MID(A9,9-IF(ISNUMBER(A9),2),2)*1>31,31+IF(MID(A9,9-IF(ISNUMBER(A9),2),2)*1>62,31)))
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD
Assurez vous de marquer un message comme solution pour une meilleure transparence.

Discussions similaires

Réponses
6
Affichages
331
Retour