extraction d'une partie de chaine

ls8

XLDnaute Nouveau
Bonjour le forum

je lis avec une boucle une serie de cellules qui contiennent chacune une date au format "JJ/MM/AAAA" ou une heure au format "hh:mm:ss"
à l'intérieur d'une chaine de caracteres, avec une position pas toujours identique dans la chaine.
Exemple
range("c,l").value= "StartDate: 10/08/2006"
range("c,l").value= "StartDate:11/08/2006 09:15:00,"

Dans les 2 cas je voudrais juste récupérer les 10 caractères de la date

Auriez-vous un bout de code (VBA) ou une piste qui me permettrait de résoudre élégamment ma question ?
Mon idée première : une combinaison de .find, instr, like [??/??/????] ou [hh:mm:ss]
Je tourne en rond de forum en bouquins !
Cordialement
 

vbacrumble

XLDnaute Accro
Re : extraction d'une partie de chaine

Bonjour tous

EDITION: un mix de tout cela en VBA
Code:
Option Explicit

Sub Macro1()
Dim plg As Range, c As Range

Set plg = _
        ActiveSheet.Range("A1:A" & _
        Range("a65536").End(xlUp).Row).SpecialCells(2, 2)
For Each c In plg

    With c.Offset(, 1)
        .FormulaR1C1 = "=MID(RC[-1],SEARCH("":"",RC[-1])+1,10)*1"
        .Value = .Value
        .NumberFormat = "dd/mm/yy"
    End With
Next c
Set plg = Nothing
End Sub
VBA:Une possibilité avec Split (ici n'est qu'un exemple , à adapter à un traitement d'une plage de cellules
Code:
Option Explicit
Dim chaine$, strDate$, strHeure$, m$
chaine = "StartDate:11/08/2006 09:15:00"
strDate = Left(Split(chaine, ":")(1), 10)
strHeure = Split(chaine)(1)
m = "La date est :" + Space(2) + strDate & Chr(13)
m = m + "L'heure est :" + Space(7) + strHeure
MsgBox m, vbInformation + vbOKOnly, "RESULTATS"
End Sub

EXCEL: utilisez Données/Convertir (dans le menu Données d'Excel)

Formule:
si en a1: StartDate:11/08/2006 09:15:00,
en B1: =STXT(A1;CHERCHE(":";A1)+1;10)*1
 
Dernière édition:

nolich

XLDnaute Occasionnel
Re : extraction d'une partie de chaine

Bonsoir Is8 et vbacrumble, bonsoir à toutes et à tous,

une autre façon de procéder (les variables sont facultatives si tu utilises directement les fonctions dans Mid) :

Code:
Sub test()
  Dim St As String
  Dim PlaceSlash As Long
  Dim MaDateChaine As String

  St = "StartDate:26/03/2009 22:15:00"
  PlaceSlash = InStr(1, St, "/")
  MaDateChaine = Mid(St, PlaceSlash - 2, 10)
  
  St = "StartDate: 27/03/2009"
  PlaceSlash = InStr(1, St, "/")
  MaDateChaine = Mid(St, PlaceSlash - 2, 10)
End Sub

En fait, je cherche la place du slash de la date (donc après le jour et avant le mois), puis j'extrais les 10 caractères en partant de 2 caractères avant le slash. Naturellement, il faut que la date de ta chaîne de caractères soit au format JJ/MM/AAAA.
 

ls8

XLDnaute Nouveau
Re : extraction d'une partie de chaine

Merci à tous les deux,

J'ai aussi une solution voisine, venue d'ailleurs.

Bien cordialement
ls8


Private Sub Command1_Click()
MsgBox on_essaye(" peu importe blablabla 10:08:06 blibli blabla ")
MsgBox on_essaye(" peu importe blablabla 22/01/2001 blibli blabla ")
MsgBox on_essaye(" peu importe blablabla 22/01/2001 23:02 blibli blabla ")
End Sub

Private Function on_essaye(la_chaine As String) As String
on_essaye = la_chaine
Do While Not on_essaye Like "##?##*"
on_essaye = Mid(on_essaye, 2)
Loop
Do While Not IsDate(on_essaye)
on_essaye = Left(on_essaye, Len(on_essaye) - 1)
Loop
End Function
 

Discussions similaires

Statistiques des forums

Discussions
312 470
Messages
2 088 700
Membres
103 927
dernier inscrit
Mkeal