[VBA] extraire une date

Résolu
nightcyborg -  
pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   -
Bonjour,

je travail actuellement sur une macro Excel et j'aurais besoin d'extraire 2 dates dans une chaine de caractères comme celle là :

"pour la période du 01/11/2008 au 30/11/2008"

j'ai bien pensé à utiliser des regex comme en PHP, mais je sais pas comment faire en fait ^^

merci de votre aide
Configuration: Windows Vista
Firefox 3.0.5

4 réponses

  1. xav3601 Messages postés 3390 Statut Membre 312
     
    bonjour

    et bien si tu sais a quelle endroit ce situe la date, c'est a dire si ta phrase a toujours la meme sythaxe tu peux utiliser la fonction Mid.
    Utilisation de la fonction Mid:

    date1 = Mid("pour la période du 01/11/2008 au 30/11/2008" ,20,10)

    date2 = Mid("pour la période du 01/11/2008 au 30/11/2008" ,34,10)

    le premier chiffre correspond au premier caractere et le deuxieme a longueur de la chaine extraire, ils sont donc a adapter si ca joue pas :-)
    j'espere que ca t'aidera!

    ps: si jamais la phrase change tu peux peut etre utiliser les fonction strev et instrev.
    1
  2. nightcyborg
     
    ben merci, ça fonctionne impec. je pense que ça devrai le faire.
    0
  3. xav3601 Messages postés 3390 Statut Membre 312
     
    De rien :-)

    pense a mettre le post en resolue et a valider la reponse ;-)
    0
  4. nightcyborg
     
    euh ben j'aurais une autre question en fait.

    j'ai des colonnes de chiffres qui contiennent de temps en temps des mots (du genre "oofert" ou "suite") et je des les remplacer par le chiffre 0.

    comment faire ? je ne troouve pas la solution.
    0
    1. nightcyborg
       
      bon ben j'ai rien dis, c'est bon merci j'ai trouvé.
      0
    2. Dacid
       
      Je viens de faire cette fonction qui... Fonctionne très bien:
      Function extraireDateDeChaine(str As String) As String
      Dim posi, i As Integer
      Dim ret, cChar, charOk As String
      
      ret = ""
      charOk = "0123456789/"
      posi = InStr(str, "/")
      If (posi > 0) Then
          For i = posi - 1 To 0 Step -1 ' Récupérer le début de la date
              If (posi < 2) Then ' On traite ici les / en début de chaine pour qu'il passe dans la récursivité
                  Exit For
              End If
              If (Not IsNumeric(Mid(str, i, 1))) Then
                  posi = i + 1
                  Exit For
              End If
          Next
          For i = posi To Len(str)
              cChar = Mid(str, i, 1)
              If (InStr(charOk, cChar)) Then
                ret = ret & cChar
              Else
                  Exit For
              End If
          Next
          'ret = Right(s, Len(s) - InStr(1, s, "/") + 4)
          'ret = Left(ret, 11)
      End If
      If ((ret <> "") And (Len(ret) < 6)) Then ' C'était un slash en dehors du contexte d'une date, l'oter et relancer la recherche
          ret = extraireDateDeChaine(Left(str, posi - 1) & Right(str, Len(str) - posi))
      End If
      extraireDateDeChaine = ret
      End Function
      0
    3. mimb
       
      salut à tous
      cette function marche nikel mais j'aurais besoin que le résultat soit un double et non un string pour le comparer à une autre date;
      est ce que quelqu'un sait comment faire
      tks!!!
      0
    4. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
       
      Salut mimb,
      En résultat un double? Pourquoi pas une date, si c'est pour comparer à une autre date...
      Suffit de toutes façons de changer, dans la function, les lignes indiquées en gras :
      Function extraireDateDeChaine(str As String) As Date
      Dim posi, i As Integer
      Dim ret, cChar, charOk As String
      
      ret = ""
      charOk = "0123456789/"
      posi = InStr(str, "/")
      If (posi > 0) Then
          For i = posi - 1 To 0 Step -1 ' Récupérer le début de la date
              If (posi < 2) Then ' On traite ici les / en début de chaine pour qu'il passe dans la récursivité
                  Exit For
              End If
              If (Not IsNumeric(Mid(str, i, 1))) Then
                  posi = i + 1
                  Exit For
              End If
          Next
          For i = posi To Len(str)
              cChar = Mid(str, i, 1)
              If (InStr(charOk, cChar)) Then
                ret = ret & cChar
              Else
                  Exit For
              End If
          Next
          'ret = Right(s, Len(s) - InStr(1, s, "/") + 4)
          'ret = Left(ret, 11)
      End If
      If ((ret <> "") And (Len(ret) < 6)) Then ' C'était un slash en dehors du contexte d'une date, l'oter et relancer la recherche
          ret = extraireDateDeChaine(Left(str, posi - 1) & Right(str, Len(str) - posi))
      End If
      extraireDateDeChaine = CDate(ret)
      End Function
      0