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

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

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