[vba] extraire une date - [resolu]

extraire une date - [resolu] [vba] - VB/VBA/VBS - Programmation

Marsh Posté le 14-02-2004 à 12:42:48    

mystr = " xxxxx k k k wwwww 10/10/2004 dkdkdkdkdkdkkd"
 
jaimerai recuprer la date comment faire ?
 
 
jarrive a detecter si ya une date avec Like "*##/##/####*"
 
mais ca me renvoie juste true ou false
jai essaye avec Format mais ca marche pas


Message édité par red faction le 17-02-2004 à 13:06:07
Reply

Marsh Posté le 14-02-2004 à 12:42:48   

Reply

Marsh Posté le 14-02-2004 à 12:48:07    

le coup du like est pas mal puisque ça te permet de savoir rapidement si il y a un truc qui ressemble à une date dans ta chaîne sans devoir passer par un algo un peu pénible. Mais en fait tu n'y échappes pas parce qu'il n'y a pas d'équivalent pour extraire la chaine (sauf peut être avec des regexp mais ça sort du cadre de mes compétences).
 
Donc il va falloir que tu y ailles à coup de InStr et Mid [:spamafote]


---------------
Whichever format the fan may want to listen is fine with us – vinyl, wax cylinders, shellac, 8-track, iPod, cloud storage, cranial implants – just as long as it’s loud and rockin' (Billy Gibbons, ZZ Top)
Reply

Marsh Posté le 14-02-2004 à 12:55:13    

like aurait pu renvoyer la pos au moins  :fou:

Reply

Marsh Posté le 14-02-2004 à 14:05:58    

le prob c que je peut avoir des caracteres '/' avant et apres la date  :sweat:

Reply

Marsh Posté le 14-02-2004 à 14:07:15    

oui :/
peut être les regexp alors [:spamafote]


---------------
Whichever format the fan may want to listen is fine with us – vinyl, wax cylinders, shellac, 8-track, iPod, cloud storage, cranial implants – just as long as it’s loud and rockin' (Billy Gibbons, ZZ Top)
Reply

Marsh Posté le 14-02-2004 à 14:48:12    

Code :
  1. Dim regex As RegExp
  2. Dim s As String
  3.  
  4. s = " 15 1 5fghfgghgf1  51 51 5 02/02/2003 1    gggg"
  5.  
  6. Set regex = New RegExp
  7. regex.Global = True
  8. regex.Pattern = "?????"
  9. MsgBox regex.Replace(s, "" )


 
manque plus que le pattern qq peut maider ?


Message édité par red faction le 14-02-2004 à 15:16:50
Reply

Marsh Posté le 14-02-2004 à 18:13:45    

[:yoyoz]

Reply

Marsh Posté le 17-02-2004 à 12:26:04    

Bonjour,
Et si tu fais une recherche avec des left and right, des instr, et hop le tour est joue.
Faut juste esperer que les formats de datre sont identiques : xx/xx/xxxx (2 digit, slash, 2 digit, slash, 4 digit) et qu'il n'y a pas d'autre slash dans ta string.
 
genre:
 
Dim s As String
s = " 15 1 5fghfgghgf1  51 51 5 02/02/2003 1    gggg"
s = Right(s, Len(s) - InStr(1, s, "/" ) + 4)
s = Left(s, 11)
MsgBox s
 
et la ca ne sort que 02/02/2003, quelques que soit le nombre de caractere avant ou apres.
 
I.

Reply

Marsh Posté le 17-02-2004 à 13:07:21    

ok sinon jai trouve ceci comme pattern qui marche tres bien
 

Code :
  1. \d\d/\d\d/\d\d\d\d


Reply

Marsh Posté le 27-05-2011 à 11:39:22    

Je viens de faire cette fonction qui ...fonctionne très bien.
 

Code :
  1. Function extraireDateDeChaine(str As String) As String
  2. Dim posi, i As Integer
  3. Dim ret, cChar, charOk As String
  4. ret = ""
  5. charOk = "0123456789/"
  6. posi = InStr(str, "/" )
  7. If (posi > 0) Then
  8.     For i = posi - 1 To 0 Step -1 ' Récupérer le début de la date
  9.         If (posi < 2) Then ' On traite ici les / en début de chaine pour qu'il passe dans la récursivité
  10.             Exit For
  11.         End If
  12.         If (Not IsNumeric(Mid(str, i, 1))) Then
  13.             posi = i + 1
  14.             Exit For
  15.         End If
  16.     Next
  17.     For i = posi To Len(str)
  18.         cChar = Mid(str, i, 1)
  19.         If (InStr(charOk, cChar)) Then
  20.           ret = ret & cChar
  21.         Else
  22.             Exit For
  23.         End If
  24.     Next
  25.     'ret = Right(s, Len(s) - InStr(1, s, "/" ) + 4)
  26.     'ret = Left(ret, 11)
  27. End If
  28. If ((ret <> "" ) And (Len(ret) < 6)) Then ' C'était un slash en dehors du contexte d'une date, l'oter et relancer la recherche
  29.     ret = extraireDateDeChaine(Left(str, posi - 1) & Right(str, Len(str) - posi))
  30. End If
  31. extraireDateDeChaine = ret
  32. End Function


Message édité par dacid le 27-05-2011 à 11:52:53
Reply

Marsh Posté le 27-05-2011 à 11:39:22   

Reply

Marsh Posté le 27-05-2011 à 11:53:00    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed