OVH Cloud OVH Cloud

Homogénéiser des formats de données

5 réponses
Avatar
Evargalo
Bonjour,

Je récupère des dates dans un fichier Excel à partir d'un logiciel sur lequel je n'ai pas le main.

Mon problème est que le logiciel-source contient un bug ennuyeux:

- si le jour du mois est inférieur ou égal à 12, alors la donnée apparaît sous la format time et s'affiche: MM/DD/YYYY hh:mm

- Mais si le jour du mois est supérieur à 12, la donnée apparaît comme une chaine de caractères (format string) sous la forme: JJ/MM/AAAA hh:mm

Apparemment le développeur du logiciel a voulu franciser les dates en inversant jour et mois et s'est joliment planté.

Mon souci, c'est que je veux exploiter les dates recueillies, et pour cela j'aimerais uniformiser les données reçues: soit avoir tout au format time, soit avoir tout au format string.

Mes quelques essais à base de petites macros ou de formules échouent lamentablement (je débute totalement en VBA) et je me retrouve bien bloqué.

Quelqu'un aurait-il une piste ?

5 réponses

Avatar
DanielCo
Bonjour,
xécute cette macro (prévue pour la colonne A, à adapter).
Sub test2()
Columns(1).NumberFormat = "dd/mm/yyyy hh:mm"
For Each C In Range("A1", Cells(Rows.Count, 1).End(xlUp))
If Application.IsText(C.Value) Then
C.Value = DateSerial(Mid(C.Value, 7, 4), Mid(C.Value, 4,
2), Left(C.Value, 2)) + _
TimeSerial(Mid(C.Value, 12, 2), Right(C.Value, 2), 0)
End If
Next C
End Sub
Daniel


Bonjour,

Je récupère des dates dans un fichier Excel à partir d'un logiciel sur lequel
je n'ai pas le main.

Mon problème est que le logiciel-source contient un bug ennuyeux:

- si le jour du mois est inférieur ou égal à 12, alors la donnée apparaît
sous la format time et s'affiche: MM/DD/YYYY hh:mm

- Mais si le jour du mois est supérieur à 12, la donnée apparaît comme une
chaine de caractères (format string) sous la forme: JJ/MM/AAAA hh:mm

Apparemment le développeur du logiciel a voulu franciser les dates en
inversant jour et mois et s'est joliment planté.

Mon souci, c'est que je veux exploiter les dates recueillies, et pour cela
j'aimerais uniformiser les données reçues: soit avoir tout au format time,
soit avoir tout au format string.

Mes quelques essais à base de petites macros ou de formules échouent
lamentablement (je débute totalement en VBA) et je me retrouve bien bloqué.

Quelqu'un aurait-il une piste ?
Avatar
evargalo
Le mercredi 21 Mai 2014 à 13:44 par Evargalo :
Bonjour,

Je récupère des dates dans un fichier Excel à partir d'un
logiciel sur lequel je n'ai pas le main.

Mon problème est que le logiciel-source contient un bug ennuyeux:

- si le jour du mois est inférieur ou égal à 12, alors la
donnée apparaît sous la format time et s'affiche: MM/DD/YYYY
hh:mm

- Mais si le jour du mois est supérieur à 12, la donnée
apparaît comme une chaine de caractères (format string) sous la
forme: JJ/MM/AAAA hh:mm

Apparemment le développeur du logiciel a voulu franciser les dates en
inversant jour et mois et s'est joliment planté.

Mon souci, c'est que je veux exploiter les dates recueillies, et pour cela
j'aimerais uniformiser les données reçues: soit avoir tout au
format time, soit avoir tout au format string.

Mes quelques essais à base de petites macros ou de formules
échouent lamentablement (je débute totalement en VBA) et je me
retrouve bien bloqué.

Quelqu'un aurait-il une piste ?


Formidable !

J'ai adapté un tout petit peu, entre autre parce que j'avais mal expliqué ma situation au début, mais tout ça tourne bien comme il faut.

Un grand merci, et bravo pour la rapidité de la réponse.


Ma macro finale:

Sub CorrigeDate()
Columns(1).NumberFormat = "dd/mm/yyyy hh:mm"
For Each C In Range(ActiveCell, Cells(Rows.Count, 1).End(xlUp))
If Left(C.Value, 2) < 13 Then
C.Value = DateSerial(Mid(C.Value, 7, 4), Left(C.Value, 2), Mid(C.Value, 4, 2)) + TimeSerial(Mid(C.Value, 12, 2), Mid(C.Value, 15, 2), 0)
End If
Next C
End Sub
Avatar
MichD
Bonjour,

Peux-tu nous donner des exemples de dates affichées dans ta feuille de
calcul dans Excel.
Quel est l'affichage en colonne A lorsque tu les reçois et quelle devrait
être l'affichage d'après ton format date par défaut.
Avatar
evargalo
Le mercredi 21 Mai 2014 à 16:23 par MichD :
Bonjour,

Peux-tu nous donner des exemples de dates affichées dans ta feuille de
calcul dans Excel.
Quel est l'affichage en colonne A lorsque tu les reçois et quelle
devrait
être l'affichage d'après ton format date par défaut.


Une date telle que le 10 avril à 16:46 s'affiche:
04/10/2014 16:46
alignée à droite, si je fais =estnum() de la cellule j'obtiens VRAI.
Sa cellule est au format personnalisé: jj/mm/aaaa hh:mm

Une date telle que le 14 avril à 12:50 s'affiche:
14/04/2014 12:50
alignée à gauche, si je fais =estnum() de la cellule j'obtiens FAUX.
Sa cellule est au format standard

J'ai finalement un souci avec ma procédure essayée plus haut grâce au code de Daniel et qui fonctionne très bien sur une colonne, mais pas sur une autre...
Avatar
MichD
As-tu essayé ceci :

Dans une cellule vide, tu saisis la valeur 1
Tu copies cette cellule dans le presse-papier
Tu sélectionnes la plage de cellules où se retrouvent les dates
Tu fais un collage spécial - Valeur et multiplication

Obtiens-tu le format date désiré?