[VBA] extraire une date
Résolu
nightcyborg
-
pijaku Messages postés 12263 Date d'inscription Statut Modérateur Dernière intervention -
pijaku Messages postés 12263 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
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
A voir également:
- [VBA] extraire une date
- Extraire une video youtube - Guide
- Extraire le son d'une vidéo - Guide
- Extraire texte d'une image - Guide
- Extraire image pdf - Guide
- Extraire fichier rar - Guide
4 réponses
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.
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.
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.
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.
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
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 :
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