XL 2019 Recherche Jour dans Date non reconnue

LLM35

XLDnaute Nouveau
Bonjour,
Je cherche grâce à une date par exemple lun. 17 janv. 2022 (Non reconnue par Excel) à, grâce à une formule, pouvoir dans une autre cellule obtenir le numéro de jour (Dans ce cas le 17). J'ai beau essayer avoir différentes méthodes rien ne marche, par exemple cette formule :

=Si(Estnum(Cherche("17";S4;1));17;...) S4 étant ma cellule avec la date.

Cette formule ne marche pas car ayant tous les jours du mois (de 1 à 31), avec la Formule
=Si(Estnum(Cherche("1";S4;1));1;...) cela me met 1 à chaque cellule avec un 1 dedans en 1 comme dans le fichier Joint.

Merci
 

Pièces jointes

  • TestDate.xlsx
    13.2 KB · Affichages: 3

Cousinhub

XLDnaute Barbatruc
Bonjour,
Et si tu transformais directement tes "pseudos-dates" en dates réelles.
Dans le fichier joint, les étapes (4 en tout...) nécessaires pour ce faire.
Étape 1, tu sélectionnes les "dates", Ctrl + H (Edition/Remplacer), tu remplaces les points par rien
Étape 2, tes cellules étant déjà sélectionnées, ruban "Données", "Convertir"
Et tu suis selon les infos dans le fichier
En colonne B, tu as les vraies dates
Bonne journée
 

Pièces jointes

  • convert date.xlsx
    79.7 KB · Affichages: 1

Dranreb

XLDnaute Barbatruc
Bonjour.
Une autre approche partant du fichier d'origine :
En B2, à propager sur 20 lignes :
Code:
=SI($A2<>"";JOUR(SI(ESTTEXTE($A2);DATEVAL(SUBSTITUE(STXT($A2;6;20);".";""));$A2));"")
En C2, à propager sur 20 lignes :
Code:
=SI($A2<>"";MOIS(SI(ESTTEXTE($A2);DATEVAL(SUBSTITUE(STXT($A2;6;20);".";""));$A2));"")
En D2, à propager sur 20 lignes :
Code:
=SI($A2<>"";ANNEE(SI(ESTTEXTE($A2);DATEVAL(SUBSTITUE(STXT($A2;6;20);".";""));$A2));"")
Mais je suis d'accord qu'il vaudrait mieux remplacer les textes en A par les dates calculées par DATEVAL(SUBSTITUE(STXT($A2;6;20);".";"")) ou DATEVAL(STXT(SUBSTITUE($A4;".";"");5;15)) et leur mettre un format de nombre personnalisé "jjj. j mmm aaaa"
Et éventuellement, si vous tenez à votre point derrière les mois abrégés, une MeFC à formule =TEXTE(A2;"mmm")<>TEXTE(A2;"mmmm") et Nombre Personnalisé jjj. j mmm. aaaa

Et si ces dates sont volontairement saisies avec le jour de la semaine pour vérification de cohérence, un peu de VBA dans le module de l'objet Worksheet représentant la feuille :
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
   Dim Texte As String, Dt As Date, JSm As String, P As Byte, TSpl() As String
   If Target.Column <> 1 Then Exit Sub
   If VarType(Target.Value) = vbString Then
      Texte = Target.Value
      TSpl = Split(Replace(Target.Value, ".", ""), " ")
      If UBound(TSpl) = 3 Then
         JSm = TSpl(0): For P = 1 To 3: TSpl(P - 1) = TSpl(P): Next P: TSpl(3) = ""
         Texte = Join(TSpl, " "): End If
      On Error Resume Next
      Dt = DateValue(Texte): If Err Then Exit Sub
      If JSm <> "" And Format(Dt, "jjj") <> JSm Then If MsgBox("""" & JSm & ". " & Texte _
         & """ saisi." & vbLf & """" & Format(Dt, "ddd d mmm" & IIf(Format(Dt, "mmm") <> _
         Format(Dt, "mmmm"), ".", "") & " yyyy") & """ à assumer ?", _
         vbYesNo, "Changement " & Target.Address) = vbNo Then Exit Sub
      If Err = 0 Then Target.Value = Dt
      End If
   End Sub
 
Dernière édition:

Discussions similaires