Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

XL 2016 Trouver un chaine de caractère par sa forme

  • Initiateur de la discussion Initiateur de la discussion R1-
  • 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 !

R1-

XLDnaute Junior
Bonjour,

J'ai des fichiers dans lesquels je cherche à extraire une date toujours sous la forme "##/##/##" sauf que cette date peut se trouver n'importe ou sur la feuille et parfois même dans une case comportant d'autres caractères.
Il n'y a cependant qu'une seul date sur toute la feuille.
Vous trouverez un exemple en PJ.

Avez vous des idées sur comment je peux m'y prendre ?
 

Pièces jointes

Solution
@Lolote83 ... bonne piste
voici une fonction qui devrait fonctionner pour mettre la date cehrcher en M1 par exemple :
VB:
Sub TrouveDate()
'
Range("M1").Value = Right(Cells.Find(What:="??/??/??", _
                                       LookIn:=xlFormulas, _
                                       LookAt:=xlPart, _
                                       SearchOrder:=xlByRows, _
                                       SearchDirection:=xlNext, _
                                       MatchCase:=False, _
                                       SearchFormat:=False).Value _
                          , 8)
End Sub
Je comptais effectivement utiliser le VBA, j'avais pensé à utiliser "like" qui est à ma connaissance la seule fonction capable d'identifier ce genre de chaine de caractères avec un "for Each" analysant les cellules les unes après les autres, mais cela me semble particulièrement lourd pour rechercher une date, je continue donc mes recherches.
 
Dans ton VBA, tu peux pour chaque chaine à tester utiliser la fonction suivante :
VB:
Function RegExOk(Value As String, Pattern As String, _
  Optional GlobalSearch As Boolean, Optional IgnoreCase As Boolean, _
  Optional MultiLine As Boolean) As Boolean
  Dim re As Object
 
  Set re = CreateObject("VBScript.RegExp")
  With re
    .Pattern = Pattern
    .Global = GlobalSearch
    .IgnoreCase = IgnoreCase
    .MultiLine = MultiLine
    RegExOk = .Test(Value)
  End With
  Set re = Nothing
End Function

(ajout)
Je l'ai fait rapidement à partir de cette ressource : https://www.educba.com/vba-regex/
et pour tes dates le pattern sera [0-9]{2}/[0-9]{2}/[0-9]{2}
et le .global = false (une partie de la chaine ..; pas toute la chaine)
 
Dernière édition:
Bonjour à tous,
En utilisant un simple CTRL+F et en recherchant /*/, je tombe sur la date en cellule I12
Du coup, une macro qui ferai cette recherche pourrait nous donner la cellule correspondante. Reste plus qu'a extraire la date.
Si celle-ci est toujours en fin de phrase, un droite(cellule,8) donnerait la date

Je regarde si le temps me le permet de cogiter à qqch
@+ Lolote83
 
Réactions: R1-
Re bonjour,
Si tes dates sont toujours au format "##/##/##" comme tu sembles le dire au debut
je cherche à extraire une date toujours sous la forme "##/##/##"
J'ai fait cette petite macro
VB:
Sub ChercheDate()
    '---------------------------------------- Recherche cellule contenant /*/
    Cells.Find(What:="/*/", After:=ActiveCell, LookIn:=xlFormulas, LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False, SearchFormat:=False).Activate
   
    xValeur = ActiveCell.Value              'On récupère la valeur de la cellule
    xPos1 = InStr(1, xValeur, "/")          'On cherche la position du 1er caractère /
    xJour = Mid(xValeur, xPos1 - 2, 2)      'A partir de cette position, on extrait le jour
    xMois = Mid(xValeur, xPos1 + 1, 2)      'A partir de cette poistion, on extrait le mois
    xAnnee = Mid(xValeur, xPos1 + 4, 2)     'A partir de cette position, on extrait l'année
   
    xDateReconstituee = CDate(xJour & "/" & xMois & "/" & xAnnee)
End Sub
@+ Lolote83
 
@Lolote83 ... bonne piste
voici une fonction qui devrait fonctionner pour mettre la date cehrcher en M1 par exemple :
VB:
Sub TrouveDate()
'
Range("M1").Value = Right(Cells.Find(What:="??/??/??", _
                                       LookIn:=xlFormulas, _
                                       LookAt:=xlPart, _
                                       SearchOrder:=xlByRows, _
                                       SearchDirection:=xlNext, _
                                       MatchCase:=False, _
                                       SearchFormat:=False).Value _
                          , 8)
End Sub
 
Re bonjour @Deadpool_CC ,
J'étais aussi partie sur le fait que la date contenait 8 caractères et en extraire la partie droite, mais si la cellule contient du texte après la date est-ce que ta fonction marcherait ? Je n'ai pas testé.
D’où mon utilisation de la position du 1er caractère dans la chaine /
Exemple : Date de livraison 08/05/22 pour vérification
@+ Lolote83
 
EN M1 si date apparait en anglais ajoute Range("M1").NumberFormat = "mm/dd/yyyy"

@Lolote83 ... en effet si date pas à la fin je suis HS
"Date de livraison 02/08/22 au petit matin" me met en M1 "it matin"
Donc ta solution est meilleur (Sniff)

le principal c'est qu'il est une solution qui fonctionne.
 
Parfait ça marche bien, bon malheureusement, la date n'est pas toujours en dernière position, mais en repérant la position des "/", avec la fonction "instr", puis en utilisant la fonction "mid", on peut retomber sur nos pates.

Voici le code que j'ai retenu :

VB:
Sub MEF()

Dim C_Date as string
Dim Date_cmp as string

C_Date = Cells.Find(What:="??/??/??", LookIn:=xlFormulas, LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False, SearchFormat:=False).Value

Date_cmp = Mid(C_Date, InStr(1, C_Date, "/", 8) - 2)

MsgBox Date_cmp

End sub

merci a tous pour votre aide

PS : Pour être honnête , il peut y avoir 3 dates différentes sur le document... mais bon ça ce sera pour une prochaine fois.
 
- 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

Discussions similaires

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…