XL 2013 récupérer les dates dans une chaine (formule excel)

patricktoulon

XLDnaute Barbatruc
Bonjour à tous
je vais commencer a me faire un recueil d'exemple de formule excel pour le texte

aujourd'hui je cherche une formule qui pourrait me donner la Nieme( de 1 à x) date dans une chaine
à l'heure actuelle j'ai la première simplement avec STXT ET CHERCHE
=STXT(A1;CHERCHE("??/??/????";A1;1);10)
j'aimerais trouver une formule qui me permette d'avoir la 2d , la 3eme etc...
 

JHA

XLDnaute Barbatruc
Bonjour à tous,

A tout hasard:
VB:
=SIERREUR(SI($H$1=1;STXT(A1;CHERCHE("??/??/????";A1;1);10);STXT(A1;CHERCHE("??/??/????";A1;11*($H$1-1));10));"maximum "&$J$1)
Code:
=SIERREUR(SI($H$1=1;STXT($A1;CHERCHE("??/??/????";$A1;1);10);STXT(SUBSTITUE($A$1;";";"@";$H$1-1);CHERCHE("@";SUBSTITUE($A$1;";";"@";$H$1-1);1)+1;10));"maximum "&$J$1)

JHA
 

Pièces jointes

  • Classeur trouver date.xlsx
    18.2 KB · Affichages: 1

patricktoulon

XLDnaute Barbatruc
Bonjour @JHA
ça ne semble pas fonctionner
1708777715912.png
 

crocrocro

XLDnaute Occasionnel
Désolé pour cette réponse qui n'en est pas une :
Pourquoi, puisque tu veux te faire un recueil de formules, ne pas passer par des fonctions stockées dans un fichier macros complémentaires et les utiliser comme les fonctions Excel ?
En quelques lignes, tu ferais quasiment tout ce que tu veux, et tu peux documenter tes fonctions comme celles d'Excel.
 

patricktoulon

XLDnaute Barbatruc
re
tiens je suis allé repêcher tout ça dans un de mes xla
le regdial est facultatif (c'est juste pour avoir le dialogue fx
1708783864291.png

VB:
'janvier 2015
'patricktoulon sur Developpez.com
Function GetDateOnChain(TxT As String, index)
    Dim tbl(), dx$
    ReDim Preserve tbl(1 To 100)
    For i = 1 To Len(TxT)
        tbl(i) = ""
        dx = Mid(TxT, i, 10)
        If IsDate(dx) And dx Like "##/##/####" Then x = x + 1: tbl(x) = DateValue(dx) : i = i + 11
    Next
    If index > 0 Then
        GetDateOnChain = tbl(index)
    Else
        ReDim Preserve tbl(1 To Application.Caller.Cells.Count)
        If Application.Caller.Rows.Count > 1 Then t = Application.Transpose(tbl)
        GetDateOnChain = t
    End If
End Function

Sub RegDialFonction()
    Dim Funct_description As String, argumtsArray

    '(max 255 caracteres)
    Funct_description = "Fonction GetDateOnChain" & vbCrLf & _
                         "avec argument index 0 retourne un tableau(matriciel)" & vbCrLf & _
                        "avec argument > 0 retourne l'occurence" & vbCrLf & _
                        "Créated By patricktoulon"

    'Description des arguments de la fonction
    argumtsArray = Array("chaine string à traiter", "index pour la Nieme occurence")


    'appel  la sub pour enregistrer
    Application.MacroOptions Macro:="GetDateOnChain", _
                             Description:=Mid(Funct_description, 1, 255), _
                             ArgumentDescriptions:=argumtsArray, _
                             Category:="personnalisée"
End Sub
 

AtTheOne

XLDnaute Accro
Supporter XLD
Bonjour à toutes & à tous, bonjour @patricktoulon , @JHA, @crocrocro
J'ai une solution avec une formule, un peu lourde il est vrai, mais qui fonctionne avec EXCEL2007 (c'est simplifiable avec la fonction LET de EXCEL2021)
Comme c'est une formule matricielle je l'ai placée dans un nom "Extraction" , le N° de la date à extraire est dans la cellule nommée "N°Date", la chaîne dans la cellule nommée "Chaîne"
A bientôt
 

Pièces jointes

  • Extraction nième Date d'une Chaîne.xlsx
    9.4 KB · Affichages: 4

patricktoulon

XLDnaute Barbatruc
bonjour @AtTheOne
c'est vraiment bien fait
le seul dommage avec çe system de name(si je me souviens bien ) c'est que ca fonctionne sur une seul colonne
a moins que justement les name supp soit fait pour ca
ce genre de truc il faudrait faire un tuto pour expliquer ça
👌👏
edit je viens de tester sur une autre colonne ça fonctionne
a voir dans un tableau

edit 2
et oui c'est le name chaine qui est fixe
on reviens a ce que je disais
n'y aurait il pas moyen de mettre dans le name chaine
par exemple =feuil1!$B$2:$b$10
et dans l'extraction remplacer chaine par un indirecte ou je ne sais quoi

=SIERREUR(DATEVAL(STXT(Chaîne;PETITE.VALEUR(SI(FREQUENCE(SIERREUR(CHERCHE("??/??/????";Chaîne;LIGNE(DECALER(Feuil1!$A$1;0;0;NBCAR(Chaîne);1)));NBCAR(Chaîne)+1);SIERREUR(CHERCHE("??/??/????";Chaîne;LIGNE(DECALER(Feuil1!$A$1;0;0;NBCAR(Chaîne);1)));NBCAR(Chaîne)+1))<>0;SIERREUR(CHERCHE("??/??/????";Chaîne;LIGNE(DECALER(Feuil1!$A$1;0;0;NBCAR(Chaîne);1)));NBCA
bref je garde aussi ;)
 
Dernière édition:

AtTheOne

XLDnaute Accro
Supporter XLD
Re
Les noms ne sont pas obligatoires, c'est juste pour la lisibilité dans les cellules et éviter le CTRL MAJ ENTREE.
Pour le tableau, c'est fait dans cette nouvelle version sans utiliser les noms (c'est un peu galère pour lire la formule !)
 

Pièces jointes

  • Extraction nième Date d'une Chaîne.xlsx
    11 KB · Affichages: 5

Discussions similaires

Statistiques des forums

Discussions
313 297
Messages
2 096 924
Membres
106 789
dernier inscrit
FrancoisVLD