Autres (RESOLU)Extraire une année composée de quatre chiffres ("aaaa")

chaelie2015

XLDnaute Accro
Bonsoir Forum
J'ai un texte alphanumérique de longueur variable dans la cellule B5. Mon objectif est d'extraire une année composée de quatre chiffres ("aaaa") à partir de cette chaîne et de l'afficher dans la cellule C5.
Exemple : Dans B5=49/2021 KDLP/04 donc j'aurai Dans C5= 2021
Merci
 
Solution
Bonsoir,

je suppose que l'année peut être située n'importe où dans le texte alors je te propose cette fonction personnalisée à copier dans un module standard.
VB:
Public Function rec_an(txt) ' recherche année dans texte
Dim idx As Integer
Dim ann As String
    For idx = 1 To Len(txt) - 3
        ann = Mid(txt, idx, 4)
        If IsNumeric(ann) Then
            If ann < 2099 And ann > 1899 Then ' à adapter
                If IsDate(DateValue("1/1/" & ann)) Then rec_an = ann: Exit Function
            End If
        End If
    Next idx
    rec_an = "absent"
End Function

gbinforme

XLDnaute Impliqué
Bonsoir,

je suppose que l'année peut être située n'importe où dans le texte alors je te propose cette fonction personnalisée à copier dans un module standard.
VB:
Public Function rec_an(txt) ' recherche année dans texte
Dim idx As Integer
Dim ann As String
    For idx = 1 To Len(txt) - 3
        ann = Mid(txt, idx, 4)
        If IsNumeric(ann) Then
            If ann < 2099 And ann > 1899 Then ' à adapter
                If IsDate(DateValue("1/1/" & ann)) Then rec_an = ann: Exit Function
            End If
        End If
    Next idx
    rec_an = "absent"
End Function
 

laurent950

XLDnaute Accro
Bonsoir

Fonction Personnalisé : Regex et son Pattern "(\d{4})"
Recherche la première date dans un texte d'une cellule Excel
["A5"] =ExtraireDate(La cellule)

Récupère la première date trouvé dans le Texte.
L'année sera automatiquement trouvé dans un texte et récupéré dans la cellule Excel.

VB:
Option Explicit
Function ExtraireDate(Rng As Range) As String
    Dim Matches As Object
    Dim Match As Object
    Dim reg As Object
        Set reg = CreateObject("VBScript.RegExp")
    Dim CherchePattern(1 To 2) As Variant
    ' Stock Pattern dans une variable Tableau
    ' Aux Choix de la construction du pattern dans la case du tableau
          CherchePattern(1) = "\b\d{4}\b|d{4}"
          CherchePattern(2) = "(\d{4})"     ' "(^|\D)(\d{4})(\D|$)"
    ' Exemple ici c'est la case 2 du tableau
    ' Alors l'indice sera la case du tableau
    Dim N As Integer
        N = 2
    Dim i As Integer
    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    Set Rng = Rng.Cells(1, 1)
'   Recherche en Ligne :
' ---------------------
            reg.Pattern = CherchePattern(N) ' l'indice N sera = a la case du tableau.
            reg.MultiLine = True: reg.IgnoreCase = False: reg.Global = True: Debug.Print reg.test(Rng.Text)
            Set Matches = reg.Execute(Rng.Text)
            ' Cible de la recherche (Partie du Mots ou chaine recherché !)
            For Each Match In Matches
                'Debug.Print "source >>", Match.Value
'                For i = 0 To Match.SubMatches.Count - 1
'                    Debug.Print "[$" & i + 1 & "]", Match.SubMatches(i)
'                Next i
                 ExtraireDate = Match.Value
                 Exit For
            Next Match
    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' libération d'objets
    Set Matches = Nothing
    Set Match = Nothing
    Set reg = Nothing
End Function
 
Dernière édition:

chaelie2015

XLDnaute Accro
Bonsoir,

je suppose que l'année peut être située n'importe où dans le texte alors je te propose cette fonction personnalisée à copier dans un module standard.
VB:
Public Function rec_an(txt) ' recherche année dans texte
Dim idx As Integer
Dim ann As String
    For idx = 1 To Len(txt) - 3
        ann = Mid(txt, idx, 4)
        If IsNumeric(ann) Then
            If ann < 2099 And ann > 1899 Then ' à adapter
                If IsDate(DateValue("1/1/" & ann)) Then rec_an = ann: Exit Function
            End If
        End If
    Next idx
    rec_an = "absent"
End Function
Bonsoir gbinforme
Avec votre permission, gbinforme, et pour résumer : l'objectif global de la fonction "rec_an(B5)" est de localiser et d'extraire une année (au format "AAAA") à partir d'une chaîne de texte, sans avoir à définir un emplacement spécifique pour cette année dans la chaîne. La fonction effectue des vérifications pour s'assurer de la validité de l'année extraite, et si aucune année n'est détectée, la fonction renvoie le message "absent".
 

mapomme

XLDnaute Barbatruc
Supporter XLD
Bonsoir à tous,

Avec une formule matricielle :
VB:
=SIERREUR(--STXT(A1;EQUIV(1;SI(ESTERREUR(ANNEE("1/1/" & STXT(A1;LIGNE(INDIRECT("1:" &(NBCAR(A1)-3)));4)));"";1);0);4);"")

1691703502127.png
 

Pièces jointes

  • chaelie2015- extraire année- v1.xlsx
    10.3 KB · Affichages: 9

Discussions similaires

Statistiques des forums

Discussions
312 207
Messages
2 086 232
Membres
103 161
dernier inscrit
Rogombe bryan