Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Comment changer de format Date en vba??

10 réponses
Avatar
fred
Bonjour,
Suite à l'importation par vba excel d'une page Web j'ai dans une cellule un
format date de type :
Mon, 18 Sep 2006 11:46:40 +0200
Comment faire pour que le format soit de type : 18/09/2006 11:46
Merci de votre aide

10 réponses

Avatar
FxM
Bonjour,
Suite à l'importation par vba excel d'une page Web j'ai dans une cellule un
format date de type :
Mon, 18 Sep 2006 11:46:40 +0200
Comment faire pour que le format soit de type : 18/09/2006 11:46
Merci de votre aide




Bonjour,

Pour faire certaines stats sur les forums, j'ai développé la fonction
suivante. Elle transforme une date en heure GMT. Exemple :
'Mon, 2 may 2006 18:20:32 +0200
'en ... heure GMT sous forme connue d'Excel
'02/05/2006 16:20:32

@+
FxM

(attention aux coupures de ligne !)
Public Function decode_date(entree, Optional opt, Optional forma)
'transforme ...
'Mon, 2 may 2006 18:20:32 +0200
'en ... heure GMT sous forme connue d'Excel
'02/05/2006 16:20:32

'Stop
Dim tablo_mois, tablo_heure, result_dat, result_heure, entree_vraie
Dim heure As Integer, minute As Integer, x As Integer

entree_vraie = entree
On Error GoTo fin:
If Left(entree, 1) = " " Then entree = Right(entree, Len(entree) - 1)

If Not IsNumeric(Left(entree, 1)) Then entree = Right(entree,
Len(entree) - InStr(1, entree, " "))
tablo_mois = Split(entree, " ")

Select Case UCase(tablo_mois(1))
Case "JAN", "JANUARY", "JANVIER": tablo_mois(1) = 1
Case "FEB", "FEBRUARY", "FEVRIER": tablo_mois(1) = 2
Case "MAR", "MARCH", "MARS": tablo_mois(1) = 3
Case "APR", "APRIL", "AVRIL": tablo_mois(1) = 4
Case "MAY", "MAI": tablo_mois(1) = 5
Case "JUN", "JUNE", "JUIN": tablo_mois(1) = 6
Case "JUL", "JULY", "JUILLET": tablo_mois(1) = 7
Case "AUG", "AUGUST", "AOUT", "AOÛT": tablo_mois(1) = 8
Case "SEP", "SEPTEMBER", "SEPTEMBRE": tablo_mois(1) = 9
Case "OCT", "OCTOBER", "OCTOBRE": tablo_mois(1) = 10
Case "NOV", "NOVEMBER", "NOVEMBRE": tablo_mois(1) = 11
Case "DEC", "DECEMBER", "DECEMBRE", UCase("Décembre"): tablo_mois(1) = 12
End Select
tablo_heure = Split(tablo_mois(3), ":")
result_dat = DateSerial(CInt(tablo_mois(2)), CInt(tablo_mois(1)),
CInt(tablo_mois(0)))
result_heure = TimeSerial(CInt(tablo_heure(0)), CInt(tablo_heure(1)),
CInt(tablo_heure(2)))
If UBound(tablo_mois) = 3 Then
heure = 0: minute = 0: x = 0
Else
If InStr(1, UCase(tablo_mois(4)), "GMT") > 0 Then
heure = 0: minute = 0: x = 0
Else
heure = CInt(Mid(tablo_mois(4), 2, 2)): minute =
CInt(Mid(tablo_mois(4), 4, 2))
Select Case Left(tablo_mois(4), 1)
Case "+": x = -1
Case "-": x = 1
Case Else
End Select
End If
End If

'Stop
forma = Application.Substitute(forma, "a", "y")
forma = Application.Substitute(forma, "j", "d")
decode_date = Format(result_dat + result_heure + x * (heure / 24 +
minute / 24 / 60), forma)
Exit Function
fin:
decode_date = entree_vraie
On Error GoTo 0
End Function

Avatar
Jacquouille
Dis François,
C'est pas plus facile de regarder sa montre pour connaître l'heure ? -)

--
Bien amicalmement,
Vivement conseillés:
http://www.excelabo.net
http://jacxl.free.fr/mpfe/trombino.html
http://dj.joss.free.fr/netiquet.htm
http://frederic.sigonneau.free.fr/

Jacquouille.

"FxM" a écrit dans le message de news:
OQPQw%
Bonjour,
Suite à l'importation par vba excel d'une page Web j'ai dans une cellule
un format date de type :
Mon, 18 Sep 2006 11:46:40 +0200
Comment faire pour que le format soit de type : 18/09/2006 11:46
Merci de votre aide




Bonjour,

Pour faire certaines stats sur les forums, j'ai développé la fonction
suivante. Elle transforme une date en heure GMT. Exemple :
'Mon, 2 may 2006 18:20:32 +0200
'en ... heure GMT sous forme connue d'Excel
'02/05/2006 16:20:32

@+
FxM

(attention aux coupures de ligne !)
Public Function decode_date(entree, Optional opt, Optional forma)
'transforme ...
'Mon, 2 may 2006 18:20:32 +0200
'en ... heure GMT sous forme connue d'Excel
'02/05/2006 16:20:32

'Stop
Dim tablo_mois, tablo_heure, result_dat, result_heure, entree_vraie
Dim heure As Integer, minute As Integer, x As Integer

entree_vraie = entree
On Error GoTo fin:
If Left(entree, 1) = " " Then entree = Right(entree, Len(entree) - 1)

If Not IsNumeric(Left(entree, 1)) Then entree = Right(entree,
Len(entree) - InStr(1, entree, " "))
tablo_mois = Split(entree, " ")

Select Case UCase(tablo_mois(1))
Case "JAN", "JANUARY", "JANVIER": tablo_mois(1) = 1
Case "FEB", "FEBRUARY", "FEVRIER": tablo_mois(1) = 2
Case "MAR", "MARCH", "MARS": tablo_mois(1) = 3
Case "APR", "APRIL", "AVRIL": tablo_mois(1) = 4
Case "MAY", "MAI": tablo_mois(1) = 5
Case "JUN", "JUNE", "JUIN": tablo_mois(1) = 6
Case "JUL", "JULY", "JUILLET": tablo_mois(1) = 7
Case "AUG", "AUGUST", "AOUT", "AOÛT": tablo_mois(1) = 8
Case "SEP", "SEPTEMBER", "SEPTEMBRE": tablo_mois(1) = 9
Case "OCT", "OCTOBER", "OCTOBRE": tablo_mois(1) = 10
Case "NOV", "NOVEMBER", "NOVEMBRE": tablo_mois(1) = 11
Case "DEC", "DECEMBER", "DECEMBRE", UCase("Décembre"): tablo_mois(1) =
12
End Select
tablo_heure = Split(tablo_mois(3), ":")
result_dat = DateSerial(CInt(tablo_mois(2)), CInt(tablo_mois(1)),
CInt(tablo_mois(0)))
result_heure = TimeSerial(CInt(tablo_heure(0)), CInt(tablo_heure(1)),
CInt(tablo_heure(2)))
If UBound(tablo_mois) = 3 Then
heure = 0: minute = 0: x = 0
Else
If InStr(1, UCase(tablo_mois(4)), "GMT") > 0 Then
heure = 0: minute = 0: x = 0
Else
heure = CInt(Mid(tablo_mois(4), 2, 2)): minute =
CInt(Mid(tablo_mois(4), 4, 2))
Select Case Left(tablo_mois(4), 1)
Case "+": x = -1
Case "-": x = 1
Case Else
End Select
End If
End If

'Stop
forma = Application.Substitute(forma, "a", "y")
forma = Application.Substitute(forma, "j", "d")
decode_date = Format(result_dat + result_heure + x * (heure / 24 + minute
/ 24 / 60), forma)
Exit Function
fin:
decode_date = entree_vraie
On Error GoTo 0
End Function



Avatar
FxM
Dis François,
C'est pas plus facile de regarder sa montre pour connaître l'heure ? -)



Mon bon Jacquouille,

Ce n'est pas si simple. Il faut regarder vite car ça change tout le
temps :o)

François

Avatar
Bob Phillips
=--(GAUCHE(A1,TROUVE("+",A1)-2))

--
HTH

Bob Phillips

(replace somewhere in email address with gmail if mailing direct)

"fred" wrote in message
news:450ec1b4$0$31428$
Bonjour,
Suite à l'importation par vba excel d'une page Web j'ai dans une cellule
un

format date de type :
Mon, 18 Sep 2006 11:46:40 +0200
Comment faire pour que le format soit de type : 18/09/2006 11:46
Merci de votre aide




Avatar
fred
J'ai testé...mais je n'arrive pas à utiliser la function.
Les dates diverses format sont en Colonne C de ma feuille.
En vba j'ai mis ceci
ActiveCell.FormulaR1C1 = "Þcode_date(R[1]C:R[4]C)"
Mais je n'ai pas de changement!!!

"FxM" a écrit dans le message de news:

Dis François,
C'est pas plus facile de regarder sa montre pour connaître l'heure ? -)



Mon bon Jacquouille,

Ce n'est pas si simple. Il faut regarder vite car ça change tout le temps
:o)

François



Avatar
FxM
Bonjour fred,

ActiveCell.FormulaR1C1 = "Þcode_date(R[1]C:R[4]C)"
Premier souci : la fonction ne traite qu'une cellule à la fois.

Donc plantage avec (R[1]C:R[4]C) qui est une zone de 4 cellules.
J'ai un doute quant à mettre 4 résultats dans une seule cellule ou alors
ta date est dans plusieurs cellules (élément non précises dans la
question initiale).

La seconde chose est qu'il me semble que le contenu de la fonction
devrait être légèrement adapté à ton besoin exact ...

(Attention aux coupures de ligne)
Public Function decode_date_fred(entree)
Dim tablo_mois, tablo_heure, result_dat, result_heure

'si entree -> "Mon, 18 Sep 2006 11:46:40 +0200"

entree = Right(entree, Len(entree) - InStr(1, entree, " "))
'entree = "18 Sep 2006 11:46:40 +0200"

tablo_mois = Split(entree, " ")
'tablo_mois(0) = "18"
'tablo_mois(1) = "Sep"
'tablo_mois(2) = "2006"
'tablo_mois(3) = "11:46:40"
'tablo_mois(4) = "+0200"

Select Case UCase(tablo_mois(1))
Case "JAN", "JANUARY", "JANVIER": tablo_mois(1) = 1
Case "FEB", "FEBRUARY", "FEVRIER": tablo_mois(1) = 2
Case "MAR", "MARCH", "MARS": tablo_mois(1) = 3
Case "APR", "APRIL", "AVRIL": tablo_mois(1) = 4
Case "MAY", "MAI": tablo_mois(1) = 5
Case "JUN", "JUNE", "JUIN": tablo_mois(1) = 6
Case "JUL", "JULY", "JUILLET": tablo_mois(1) = 7
Case "AUG", "AUGUST", "AOUT", "AOÛT": tablo_mois(1) = 8
Case "SEP", "SEPTEMBER", "SEPTEMBRE": tablo_mois(1) = 9
Case "OCT", "OCTOBER", "OCTOBRE": tablo_mois(1) = 10
Case "NOV", "NOVEMBER", "NOVEMBRE": tablo_mois(1) = 11
Case "DEC", "DECEMBER", "DECEMBRE", UCase("Décembre"): tablo_mois(1) = 12
'tablo_mois(1) = 9

End Select

tablo_heure = Split(tablo_mois(3), ":")
'tablo_heure(0) = "11"
'tablo_heure(1) = "46"
'tablo_heure(2) = "40"

result_dat = DateSerial(CInt(tablo_mois(2)), CInt(tablo_mois(1)),
CInt(tablo_mois(0)))
'result_date = #18/09/2006#

result_heure = TimeSerial(CInt(tablo_heure(0)), CInt(tablo_heure(1)),
CInt(tablo_heure(2)))
'result_date = #11:46:40#

'si tu n'as vraiment pas besoin des secondes :
' result_heure = TimeSerial(CInt(tablo_heure(0)), CInt(tablo_heure(1)))

decode_date_fred = Format(result_dat + result_heure , "dd/mm/yyyy hh:mm")
' decode_date_fred = "18/09/2006 11:46"

End Function




Les dates diverses format sont en Colonne C de ma feuille.


A vérifier :
for each cel in range("C1:C22")
cel.offset(0,1).value = decode_date_fred(cel.value)
next cel

Lit le contenu de chaque cellule de C1 à C22 et met la valeur
correspondante en cellules D1 à D22.


Voilà, voilà ....

@+
FxM






J'ai testé...mais je n'arrive pas à utiliser la function.
Les dates diverses format sont en Colonne C de ma feuille.
En vba j'ai mis ceci
ActiveCell.FormulaR1C1 = "Þcode_date(R[1]C:R[4]C)"
Mais je n'ai pas de changement!!!

"FxM" a écrit dans le message de news:

Dis François,
C'est pas plus facile de regarder sa montre pour connaître l'heure ? -)

Mon bon Jacquouille,


Ce n'est pas si simple. Il faut regarder vite car ça change tout le temps
:o)

François







Avatar
fred
Merci FxM..j'ai testé et ça fonctionne maintenant...en gardant la première
function decode_date avec un souci tout de même le format date "Sun, 10 Sep
2006 19:10:21 +0200" me donne "09/10/2006 19:10" et non "10/09/2006
19:10"!
Avec function decode_date_fred j'ai une erreur d'execution au niveau
"Select Case UCase(tablo_mois(1))" , l'indice n'appartient pas à la
sélection.
(en effet j'ai des dates de type 13/10/0006)!
Merci tout de même


"FxM" a écrit dans le message de news:
ejwRl%23$
Bonjour fred,

ActiveCell.FormulaR1C1 = "Þcode_date(R[1]C:R[4]C)"
Premier souci : la fonction ne traite qu'une cellule à la fois.

Donc plantage avec (R[1]C:R[4]C) qui est une zone de 4 cellules.
J'ai un doute quant à mettre 4 résultats dans une seule cellule ou alors
ta date est dans plusieurs cellules (élément non précises dans la question
initiale).

La seconde chose est qu'il me semble que le contenu de la fonction devrait
être légèrement adapté à ton besoin exact ...

(Attention aux coupures de ligne)
Public Function decode_date_fred(entree)
Dim tablo_mois, tablo_heure, result_dat, result_heure

'si entree -> "Mon, 18 Sep 2006 11:46:40 +0200"

entree = Right(entree, Len(entree) - InStr(1, entree, " "))
'entree = "18 Sep 2006 11:46:40 +0200"

tablo_mois = Split(entree, " ")
'tablo_mois(0) = "18"
'tablo_mois(1) = "Sep"
'tablo_mois(2) = "2006"
'tablo_mois(3) = "11:46:40"
'tablo_mois(4) = "+0200"

Select Case UCase(tablo_mois(1))
Case "JAN", "JANUARY", "JANVIER": tablo_mois(1) = 1
Case "FEB", "FEBRUARY", "FEVRIER": tablo_mois(1) = 2
Case "MAR", "MARCH", "MARS": tablo_mois(1) = 3
Case "APR", "APRIL", "AVRIL": tablo_mois(1) = 4
Case "MAY", "MAI": tablo_mois(1) = 5
Case "JUN", "JUNE", "JUIN": tablo_mois(1) = 6
Case "JUL", "JULY", "JUILLET": tablo_mois(1) = 7
Case "AUG", "AUGUST", "AOUT", "AOÛT": tablo_mois(1) = 8
Case "SEP", "SEPTEMBER", "SEPTEMBRE": tablo_mois(1) = 9
Case "OCT", "OCTOBER", "OCTOBRE": tablo_mois(1) = 10
Case "NOV", "NOVEMBER", "NOVEMBRE": tablo_mois(1) = 11
Case "DEC", "DECEMBER", "DECEMBRE", UCase("Décembre"): tablo_mois(1) =
12
'tablo_mois(1) = 9

End Select

tablo_heure = Split(tablo_mois(3), ":")
'tablo_heure(0) = "11"
'tablo_heure(1) = "46"
'tablo_heure(2) = "40"

result_dat = DateSerial(CInt(tablo_mois(2)), CInt(tablo_mois(1)),
CInt(tablo_mois(0)))
'result_date = #18/09/2006#

result_heure = TimeSerial(CInt(tablo_heure(0)), CInt(tablo_heure(1)),
CInt(tablo_heure(2)))
'result_date = #11:46:40#

'si tu n'as vraiment pas besoin des secondes :
' result_heure = TimeSerial(CInt(tablo_heure(0)), CInt(tablo_heure(1)))

decode_date_fred = Format(result_dat + result_heure , "dd/mm/yyyy hh:mm")
' decode_date_fred = "18/09/2006 11:46"

End Function




Les dates diverses format sont en Colonne C de ma feuille.


A vérifier :
for each cel in range("C1:C22")
cel.offset(0,1).value = decode_date_fred(cel.value)
next cel

Lit le contenu de chaque cellule de C1 à C22 et met la valeur
correspondante en cellules D1 à D22.


Voilà, voilà ....

@+
FxM






J'ai testé...mais je n'arrive pas à utiliser la function.
Les dates diverses format sont en Colonne C de ma feuille.
En vba j'ai mis ceci
ActiveCell.FormulaR1C1 = "Þcode_date(R[1]C:R[4]C)"
Mais je n'ai pas de changement!!!

"FxM" a écrit dans le message de news:

Dis François,
C'est pas plus facile de regarder sa montre pour connaître l'heure
-)

Mon bon Jacquouille,


Ce n'est pas si simple. Il faut regarder vite car ça change tout le
temps :o)

François








Avatar
FxM
Bonsoir Fred,


function decode_date avec un souci tout de même le format date "Sun,
10 Sep

2006 19:10:21 +0200" me donne "09/10/2006 19:10" et non "10/09/2006
19:10"!


Si tu as cela, c'est que (pour forma) tu as entré
"dd/mm/yyyy hh:mm"
et pas
"dd/mm/yyyy hh:mm"



Avec function decode_date_fred j'ai une erreur d'execution au niveau
"Select Case UCase(tablo_mois(1))" , l'indice n'appartient pas à la
sélection.


Comme tu as du le voir, la seconde fonction a été considérablement
allégée par rapport à la première. En particulier, la vérification de la
présence du jour (Sun, Mon etc) a été enlevée [je répond au problème
tel que posé :o) ].

Tu peux réincorporer la vérif
If Not IsNumeric(Left(entree, 1)) Then entree = Right(entree,
Len(entree) - InStr(1, entree, " "))

Tu risques de rencontrer également la date débutant par un espace.
Contournement par :
If Left(entree, 1) = " " Then entree = Right(entree, Len(entree) - 1)


(en effet j'ai des dates de type 13/10/0006)!
Tu vas rencontrer de gros problèmes si avant 1900.


Au besoin, met des exemples de dates sur cjoint.com pour qu'on y jette
un oeil.

@+
FxM



Merci FxM..j'ai testé et ça fonctionne maintenant...en gardant la première
function decode_date avec un souci tout de même le format date "Sun, 10 Sep
2006 19:10:21 +0200" me donne "09/10/2006 19:10" et non "10/09/2006
19:10"!
Avec function decode_date_fred j'ai une erreur d'execution au niveau
"Select Case UCase(tablo_mois(1))" , l'indice n'appartient pas à la
sélection.
(en effet j'ai des dates de type 13/10/0006)!
Merci tout de même


"FxM" a écrit dans le message de news:
ejwRl%23$
Bonjour fred,

ActiveCell.FormulaR1C1 = "Þcode_date(R[1]C:R[4]C)"
Premier souci : la fonction ne traite qu'une cellule à la fois.

Donc plantage avec (R[1]C:R[4]C) qui est une zone de 4 cellules.
J'ai un doute quant à mettre 4 résultats dans une seule cellule ou alors
ta date est dans plusieurs cellules (élément non précises dans la question
initiale).

La seconde chose est qu'il me semble que le contenu de la fonction devrait
être légèrement adapté à ton besoin exact ...

(Attention aux coupures de ligne)
Public Function decode_date_fred(entree)
Dim tablo_mois, tablo_heure, result_dat, result_heure

'si entree -> "Mon, 18 Sep 2006 11:46:40 +0200"

entree = Right(entree, Len(entree) - InStr(1, entree, " "))
'entree = "18 Sep 2006 11:46:40 +0200"

tablo_mois = Split(entree, " ")
'tablo_mois(0) = "18"
'tablo_mois(1) = "Sep"
'tablo_mois(2) = "2006"
'tablo_mois(3) = "11:46:40"
'tablo_mois(4) = "+0200"

Select Case UCase(tablo_mois(1))
Case "JAN", "JANUARY", "JANVIER": tablo_mois(1) = 1
Case "FEB", "FEBRUARY", "FEVRIER": tablo_mois(1) = 2
Case "MAR", "MARCH", "MARS": tablo_mois(1) = 3
Case "APR", "APRIL", "AVRIL": tablo_mois(1) = 4
Case "MAY", "MAI": tablo_mois(1) = 5
Case "JUN", "JUNE", "JUIN": tablo_mois(1) = 6
Case "JUL", "JULY", "JUILLET": tablo_mois(1) = 7
Case "AUG", "AUGUST", "AOUT", "AOÛT": tablo_mois(1) = 8
Case "SEP", "SEPTEMBER", "SEPTEMBRE": tablo_mois(1) = 9
Case "OCT", "OCTOBER", "OCTOBRE": tablo_mois(1) = 10
Case "NOV", "NOVEMBER", "NOVEMBRE": tablo_mois(1) = 11
Case "DEC", "DECEMBER", "DECEMBRE", UCase("Décembre"): tablo_mois(1) =
12
'tablo_mois(1) = 9

End Select

tablo_heure = Split(tablo_mois(3), ":")
'tablo_heure(0) = "11"
'tablo_heure(1) = "46"
'tablo_heure(2) = "40"

result_dat = DateSerial(CInt(tablo_mois(2)), CInt(tablo_mois(1)),
CInt(tablo_mois(0)))
'result_date = #18/09/2006#

result_heure = TimeSerial(CInt(tablo_heure(0)), CInt(tablo_heure(1)),
CInt(tablo_heure(2)))
'result_date = #11:46:40#

'si tu n'as vraiment pas besoin des secondes :
' result_heure = TimeSerial(CInt(tablo_heure(0)), CInt(tablo_heure(1)))

decode_date_fred = Format(result_dat + result_heure , "dd/mm/yyyy hh:mm")
' decode_date_fred = "18/09/2006 11:46"

End Function




Les dates diverses format sont en Colonne C de ma feuille.
A vérifier :

for each cel in range("C1:C22")
cel.offset(0,1).value = decode_date_fred(cel.value)
next cel

Lit le contenu de chaque cellule de C1 à C22 et met la valeur
correspondante en cellules D1 à D22.


Voilà, voilà ....

@+
FxM






J'ai testé...mais je n'arrive pas à utiliser la function.
Les dates diverses format sont en Colonne C de ma feuille.
En vba j'ai mis ceci
ActiveCell.FormulaR1C1 = "Þcode_date(R[1]C:R[4]C)"
Mais je n'ai pas de changement!!!

"FxM" a écrit dans le message de news:

Dis François,
C'est pas plus facile de regarder sa montre pour connaître l'heure
-)

Mon bon Jacquouille,


Ce n'est pas si simple. Il faut regarder vite car ça change tout le
temps :o)

François










Avatar
fred
OK j'ai corrigé pour le format Date...ça remet correctement le mois et le
jour.
decode_date = Format(result_dat + result_heure, "mm/dd/yyyy hh:mm")
J'avais aussi les espaces a enlever en début de date :
If Left(entree, 1) = " " Then entree = Right(entree, Len(entree) - 1)
J'avais aussi en fin de date ...UT...j'ai contourné en utlisant par exemple
sur C1:
Range("C1").Select
Selection.Replace What:=" UT", Replacement:="", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:úlse, SearchFormat:úlse, _
ReplaceFormat:úlse
Dernière chose...le traitement de la function semble un peu long...je pense
que cela provient de ceci:
for each cel in range("C1:C65536")...je devrais peut-être utiliser une
UsedRange.Rows.Count?
Merci bcp pour votre aide!!!


"FxM" a écrit dans le message de news:

Bonsoir Fred,


function decode_date avec un souci tout de même le format date "Sun,
10 Sep

2006 19:10:21 +0200" me donne "09/10/2006 19:10" et non "10/09/2006
19:10"!


Si tu as cela, c'est que (pour forma) tu as entré
"dd/mm/yyyy hh:mm"
et pas
"dd/mm/yyyy hh:mm"



Avec function decode_date_fred j'ai une erreur d'execution au niveau
"Select Case UCase(tablo_mois(1))" , l'indice n'appartient pas à la
sélection.


Comme tu as du le voir, la seconde fonction a été considérablement allégée
par rapport à la première. En particulier, la vérification de la présence
du jour (Sun, Mon etc) a été enlevée [je répond au problème tel que posé
:o) ].

Tu peux réincorporer la vérif
If Not IsNumeric(Left(entree, 1)) Then entree = Right(entree,
Len(entree) - InStr(1, entree, " "))

Tu risques de rencontrer également la date débutant par un espace.
Contournement par :
If Left(entree, 1) = " " Then entree = Right(entree, Len(entree) - 1)


(en effet j'ai des dates de type 13/10/0006)!
Tu vas rencontrer de gros problèmes si avant 1900.


Au besoin, met des exemples de dates sur cjoint.com pour qu'on y jette un
oeil.

@+
FxM



Merci FxM..j'ai testé et ça fonctionne maintenant...en gardant la
première function decode_date avec un souci tout de même le format date
"Sun, 10 Sep 2006 19:10:21 +0200" me donne "09/10/2006 19:10" et non
"10/09/2006 19:10"!
Avec function decode_date_fred j'ai une erreur d'execution au niveau
"Select Case UCase(tablo_mois(1))" , l'indice n'appartient pas à la
sélection.
(en effet j'ai des dates de type 13/10/0006)!
Merci tout de même


"FxM" a écrit dans le message de news:
ejwRl%23$
Bonjour fred,

ActiveCell.FormulaR1C1 = "Þcode_date(R[1]C:R[4]C)"
Premier souci : la fonction ne traite qu'une cellule à la fois.

Donc plantage avec (R[1]C:R[4]C) qui est une zone de 4 cellules.
J'ai un doute quant à mettre 4 résultats dans une seule cellule ou alors
ta date est dans plusieurs cellules (élément non précises dans la
question initiale).

La seconde chose est qu'il me semble que le contenu de la fonction
devrait être légèrement adapté à ton besoin exact ...

(Attention aux coupures de ligne)
Public Function decode_date_fred(entree)
Dim tablo_mois, tablo_heure, result_dat, result_heure

'si entree -> "Mon, 18 Sep 2006 11:46:40 +0200"

entree = Right(entree, Len(entree) - InStr(1, entree, " "))
'entree = "18 Sep 2006 11:46:40 +0200"

tablo_mois = Split(entree, " ")
'tablo_mois(0) = "18"
'tablo_mois(1) = "Sep"
'tablo_mois(2) = "2006"
'tablo_mois(3) = "11:46:40"
'tablo_mois(4) = "+0200"

Select Case UCase(tablo_mois(1))
Case "JAN", "JANUARY", "JANVIER": tablo_mois(1) = 1
Case "FEB", "FEBRUARY", "FEVRIER": tablo_mois(1) = 2
Case "MAR", "MARCH", "MARS": tablo_mois(1) = 3
Case "APR", "APRIL", "AVRIL": tablo_mois(1) = 4
Case "MAY", "MAI": tablo_mois(1) = 5
Case "JUN", "JUNE", "JUIN": tablo_mois(1) = 6
Case "JUL", "JULY", "JUILLET": tablo_mois(1) = 7
Case "AUG", "AUGUST", "AOUT", "AOÛT": tablo_mois(1) = 8
Case "SEP", "SEPTEMBER", "SEPTEMBRE": tablo_mois(1) = 9
Case "OCT", "OCTOBER", "OCTOBRE": tablo_mois(1) = 10
Case "NOV", "NOVEMBER", "NOVEMBRE": tablo_mois(1) = 11
Case "DEC", "DECEMBER", "DECEMBRE", UCase("Décembre"): tablo_mois(1) =
12
'tablo_mois(1) = 9

End Select

tablo_heure = Split(tablo_mois(3), ":")
'tablo_heure(0) = "11"
'tablo_heure(1) = "46"
'tablo_heure(2) = "40"

result_dat = DateSerial(CInt(tablo_mois(2)), CInt(tablo_mois(1)),
CInt(tablo_mois(0)))
'result_date = #18/09/2006#

result_heure = TimeSerial(CInt(tablo_heure(0)), CInt(tablo_heure(1)),
CInt(tablo_heure(2)))
'result_date = #11:46:40#

'si tu n'as vraiment pas besoin des secondes :
' result_heure = TimeSerial(CInt(tablo_heure(0)), CInt(tablo_heure(1)))

decode_date_fred = Format(result_dat + result_heure , "dd/mm/yyyy
hh:mm")
' decode_date_fred = "18/09/2006 11:46"

End Function




Les dates diverses format sont en Colonne C de ma feuille.
A vérifier :

for each cel in range("C1:C22")
cel.offset(0,1).value = decode_date_fred(cel.value)
next cel

Lit le contenu de chaque cellule de C1 à C22 et met la valeur
correspondante en cellules D1 à D22.


Voilà, voilà ....

@+
FxM






J'ai testé...mais je n'arrive pas à utiliser la function.
Les dates diverses format sont en Colonne C de ma feuille.
En vba j'ai mis ceci
ActiveCell.FormulaR1C1 = "Þcode_date(R[1]C:R[4]C)"
Mais je n'ai pas de changement!!!

"FxM" a écrit dans le message de news:

Dis François,
C'est pas plus facile de regarder sa montre pour connaître l'heure -)

Mon bon Jacquouille,


Ce n'est pas si simple. Il faut regarder vite car ça change tout le
temps :o)

François












Avatar
FxM
Usedrange fair parfois quelques caprices en donnant des zones trop
grandes. Ca ne pourra de toute facon pas être pire que 65536 :o)

Sinon, tu as aussi :
for each cel in range("C1:C" & range("C65536").end(xlup).row)

@+
FxM


OK j'ai corrigé pour le format Date...ça remet correctement le mois et le
jour.
decode_date = Format(result_dat + result_heure, "mm/dd/yyyy hh:mm")
J'avais aussi les espaces a enlever en début de date :
If Left(entree, 1) = " " Then entree = Right(entree, Len(entree) - 1)
J'avais aussi en fin de date ...UT...j'ai contourné en utlisant par exemple
sur C1:
Range("C1").Select
Selection.Replace What:=" UT", Replacement:="", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:úlse, SearchFormat:úlse, _
ReplaceFormat:úlse
Dernière chose...le traitement de la function semble un peu long...je pense
que cela provient de ceci:
for each cel in range("C1:C65536")...je devrais peut-être utiliser une
UsedRange.Rows.Count?
Merci bcp pour votre aide!!!


"FxM" a écrit dans le message de news:

Bonsoir Fred,


function decode_date avec un souci tout de même le format date "Sun,
10 Sep

2006 19:10:21 +0200" me donne "09/10/2006 19:10" et non "10/09/2006
19:10"!
Si tu as cela, c'est que (pour forma) tu as entré

"dd/mm/yyyy hh:mm"
et pas
"dd/mm/yyyy hh:mm"



Avec function decode_date_fred j'ai une erreur d'execution au niveau
"Select Case UCase(tablo_mois(1))" , l'indice n'appartient pas à la
sélection.
Comme tu as du le voir, la seconde fonction a été considérablement allégée

par rapport à la première. En particulier, la vérification de la présence
du jour (Sun, Mon etc) a été enlevée [je répond au problème tel que posé
:o) ].

Tu peux réincorporer la vérif
If Not IsNumeric(Left(entree, 1)) Then entree = Right(entree,
Len(entree) - InStr(1, entree, " "))

Tu risques de rencontrer également la date débutant par un espace.
Contournement par :
If Left(entree, 1) = " " Then entree = Right(entree, Len(entree) - 1)


(en effet j'ai des dates de type 13/10/0006)!
Tu vas rencontrer de gros problèmes si avant 1900.


Au besoin, met des exemples de dates sur cjoint.com pour qu'on y jette un
oeil.

@+
FxM



Merci FxM..j'ai testé et ça fonctionne maintenant...en gardant la
première function decode_date avec un souci tout de même le format date
"Sun, 10 Sep 2006 19:10:21 +0200" me donne "09/10/2006 19:10" et non
"10/09/2006 19:10"!
Avec function decode_date_fred j'ai une erreur d'execution au niveau
"Select Case UCase(tablo_mois(1))" , l'indice n'appartient pas à la
sélection.
(en effet j'ai des dates de type 13/10/0006)!
Merci tout de même


"FxM" a écrit dans le message de news:
ejwRl%23$
Bonjour fred,

ActiveCell.FormulaR1C1 = "Þcode_date(R[1]C:R[4]C)"
Premier souci : la fonction ne traite qu'une cellule à la fois.

Donc plantage avec (R[1]C:R[4]C) qui est une zone de 4 cellules.
J'ai un doute quant à mettre 4 résultats dans une seule cellule ou alors
ta date est dans plusieurs cellules (élément non précises dans la
question initiale).

La seconde chose est qu'il me semble que le contenu de la fonction
devrait être légèrement adapté à ton besoin exact ...

(Attention aux coupures de ligne)
Public Function decode_date_fred(entree)
Dim tablo_mois, tablo_heure, result_dat, result_heure

'si entree -> "Mon, 18 Sep 2006 11:46:40 +0200"

entree = Right(entree, Len(entree) - InStr(1, entree, " "))
'entree = "18 Sep 2006 11:46:40 +0200"

tablo_mois = Split(entree, " ")
'tablo_mois(0) = "18"
'tablo_mois(1) = "Sep"
'tablo_mois(2) = "2006"
'tablo_mois(3) = "11:46:40"
'tablo_mois(4) = "+0200"

Select Case UCase(tablo_mois(1))
Case "JAN", "JANUARY", "JANVIER": tablo_mois(1) = 1
Case "FEB", "FEBRUARY", "FEVRIER": tablo_mois(1) = 2
Case "MAR", "MARCH", "MARS": tablo_mois(1) = 3
Case "APR", "APRIL", "AVRIL": tablo_mois(1) = 4
Case "MAY", "MAI": tablo_mois(1) = 5
Case "JUN", "JUNE", "JUIN": tablo_mois(1) = 6
Case "JUL", "JULY", "JUILLET": tablo_mois(1) = 7
Case "AUG", "AUGUST", "AOUT", "AOÛT": tablo_mois(1) = 8
Case "SEP", "SEPTEMBER", "SEPTEMBRE": tablo_mois(1) = 9
Case "OCT", "OCTOBER", "OCTOBRE": tablo_mois(1) = 10
Case "NOV", "NOVEMBER", "NOVEMBRE": tablo_mois(1) = 11
Case "DEC", "DECEMBER", "DECEMBRE", UCase("Décembre"): tablo_mois(1) =
12
'tablo_mois(1) = 9

End Select

tablo_heure = Split(tablo_mois(3), ":")
'tablo_heure(0) = "11"
'tablo_heure(1) = "46"
'tablo_heure(2) = "40"

result_dat = DateSerial(CInt(tablo_mois(2)), CInt(tablo_mois(1)),
CInt(tablo_mois(0)))
'result_date = #18/09/2006#

result_heure = TimeSerial(CInt(tablo_heure(0)), CInt(tablo_heure(1)),
CInt(tablo_heure(2)))
'result_date = #11:46:40#

'si tu n'as vraiment pas besoin des secondes :
' result_heure = TimeSerial(CInt(tablo_heure(0)), CInt(tablo_heure(1)))

decode_date_fred = Format(result_dat + result_heure , "dd/mm/yyyy
hh:mm")
' decode_date_fred = "18/09/2006 11:46"

End Function




Les dates diverses format sont en Colonne C de ma feuille.
A vérifier :

for each cel in range("C1:C22")
cel.offset(0,1).value = decode_date_fred(cel.value)
next cel

Lit le contenu de chaque cellule de C1 à C22 et met la valeur
correspondante en cellules D1 à D22.


Voilà, voilà ....

@+
FxM






J'ai testé...mais je n'arrive pas à utiliser la function.
Les dates diverses format sont en Colonne C de ma feuille.
En vba j'ai mis ceci
ActiveCell.FormulaR1C1 = "Þcode_date(R[1]C:R[4]C)"
Mais je n'ai pas de changement!!!

"FxM" a écrit dans le message de news:

Dis François,
C'est pas plus facile de regarder sa montre pour connaître l'heure -)

Mon bon Jacquouille,


Ce n'est pas si simple. Il faut regarder vite car ça change tout le
temps :o)

François