Macro - Tri - BUG transformation format date

Résolu/Fermé
demandes - 8 juil. 2009 à 09:41
Le Pingou Messages postés 12035 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 1 avril 2024 - 15 juil. 2009 à 13:54
Bonjour,

J'ai créé une petite macro avec l'option Nouvelle macro > Enregistrer macro. Quand j'encode la macro tout se passe bien. Cependant, quand je lance la macro, à un moment donné, le système doit trier les dates dans l'ordre croissant et là, il m'inverse le jour et le mois. Pour être plus clair je vais donner un exemple:

Dates de départ:
4/07/2009
5/07/2009
6/07/2009

Dates après le tri de la macro:
7/04/2009
7/05/2009
7/06/2009

Je tiens à préciser que les informations viennent d'Internet et que les dates au départ ont se format là: 04/07/2009 à 05:23:52. Ensuite je remplace "à " par "".

Voici le codage de la macro que le système a réalisé:

Columns("A:B").Select
Selection.Delete Shift:=xlToLeft
Columns("B:B").Select
Selection.Replace What:="à ", Replacement:="", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False
Columns("B:B").EntireColumn.AutoFit
Range("A1:B1").Select
Selection.AutoFilter
Range("A1:B41").Sort Key1:=Range("B1"), Order1:=xlAscending, Header:= _
xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal
End Sub

Je vous remercie pour votre aide et vos conseils.
A voir également:

15 réponses

Le Pingou Messages postés 12035 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 1 avril 2024 1 425
13 juil. 2009 à 13:05
Bonjour,
J’ai enfin découvert le problème. La date/heure est un nombre dont la partie entière est l’année, mois et jour et la partie décimale représente l’heur, minute et seconde par exemple (40007.53125 correspond au 13 juillet 2009 à 12 :45).
Voici la procédure qui est correcte :

Sub Extrait_Trier_DateFormdate()
Dim c As Integer, nbli As Integer
' Supprimer les 2 colonnes de gauche
Columns("A:B").Delete Shift:=xlToLeft
nbli = WorksheetFunction.CountA(Columns("B:B"))
For c = 2 To nbli
Cells(c, 3).Value = CDate(Left(Cells(c, 2), 11)) + CDate(Right(Cells(c, 2), 8))
Next c
' Supprimer la plage date à traiter et déplacer à gauche les éléments traités
Range("B2:B" & nbli).Delete Shift:=xlToLeft
' trier ascendant sur la date
Range("A1:B" & nbli).Sort Key1:=Range("B1"), Order1:=xlAscending, Header:= _
xlYes, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal
End Sub
1
lermite222 Messages postés 8702 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 1 190
8 juil. 2009 à 10:52
Bonjour,
Et bien comme ça c'est pas possible de déterminer comment sont enrégistrées tes dates ?.
Tu peu mettre un exemple de ton classeur sur Cjoint.com ?
Ce serais plus constructif.
A+
0
Bonsoir lermite222,

Voici le lien vers le fichier http://cjoint.com/data/hisKxOKkDX.htm Il n’y a qu’à exécuter la macro pour voir directement le problème.

MERCI
0
Le Pingou Messages postés 12035 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 1 avril 2024 1 425
8 juil. 2009 à 22:09
Bonjour,
Il semble que le problème est au niveau de la fonction [Replace]. Essayez la procédure suivante:
Sub Archives_des_offensives_victorieuses()
'
' Archives_des_offensives_victorieuses Macro
' Macro enregistrée le 8/07/2009 par Potelberg Stéphane
'
Columns("A:B").Delete Shift:=xlToLeft
With Columns("B:B")
.Replace What:="/", Replacement:="."
.Replace What:="à", Replacement:=""
End With
Columns("B:B").EntireColumn.AutoFit
Range("A1:B1").Select
Selection.AutoFilter
Range("A1:B41").Sort Key1:=Range("B1"), Order1:=xlAscending, Header:= _
xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal
End Sub

0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
lermite222 Messages postés 8702 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 1 190
9 juil. 2009 à 09:21
Le problème est bien sû au niveau du Replace, pour y remédier j'ai ajouter 2 colonnes, si ces deux colonnes gène tu peu toujours les cacher.
Ton classeur
A+
0
Bonjour Le Pingou,

Je te remercie pour tes conseils, la macro fonctionne mais j'aimerais arriver à réaliser cette opération sans remplacer les "/" par ".", car je copie le résultat dans un autre tableau plus grand et le format date est du type: jj/mm/aaaa hh:mm:ss

De plus, je n'ai pas compris pourquoi la ligne Joueur/Date se retrouve en dessous après avoir exécuté la macro avec d'autres données.

Bonjour lermite222,

Je te remercie pour tes conseils, la macro fonctionne, mais comme le nombre de lignes à traiter varie. Donc, il faut soit que je supprime des lignes de tes formules en E et F pour ne pas avoir de blanc ou soit que je tire tes formules en E et F quand le nombre de lignes est plus important.

Conclusion

Je voulais surtout comprendre pourquoi il inversait le jour et le mois dans ma macro alors que quand je le fais manuellement je n'ai pas de problème.

Y a-t-il un moyen de réaliser la macro sans modifier les "/" en "." et sans ajouter des colonnes?

Je sais je suis exigent (rire).

Bonne journée…
0
Le Pingou Messages postés 12035 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 1 avril 2024 1 425
10 juil. 2009 à 15:10
Bonjour,
J'ai une question : avant intervention de la macro la colonne date est en format texte [07/07/2009 à 02:50:15]
est après la macro que voulez-vous format date/heure ou texte ?
0
Bonjour Le Pingou,

Je pense qu'avant la manipulation, les données sont au format Standard (copier/coller du Web).

Après, j'aimerais un format jj/mm/aaaa hh:mm:ss (date et heure). Normalement, le format se règle automatiquement en j/mm/aaaa h:mm après avoir supprimés les "à ". Donc, c'est bon.

MERCI
0
Le Pingou Messages postés 12035 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 1 avril 2024 1 425
10 juil. 2009 à 17:57
Bonjour,
Merci pour l'information.
Oui le format se règle automatiquement mais il interverti jour et mois ...!
0
Le Pingou Messages postés 12035 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 1 avril 2024 1 425
10 juil. 2009 à 20:32
Bonjour,
Quetion: lorsque le "à" de la colonne date est supprimer, avez-vous l'affichage suivant [07/07/2009 à 02:50:15] ou [07.07.2009 02:50:15] ?
Merci de la réponse.
0
Le Pingou Messages postés 12035 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 1 avril 2024 1 425
11 juil. 2009 à 17:16
Bonjour,
Je vous propose la procédure suivante :
Sub Extrait_Trier()
Dim c As Integer, nbli As Integer
' Supprimer les 2 colonnes de gauche
Columns("A:B").Delete Shift:=xlToLeft
nbli = WorksheetFunction.CountA(Columns("B:B"))
Columns("C:C").NumberFormat = "@"
For c = 2 To nbli
Cells(c, 3).Value = Left(Cells(c, 2), 11) & " " & Right(Cells(c, 2), 8)
Next c
' Supprimer la plage date à traiter et déplacer à gauche les éléments traités
Range("B2:B" & nbli).Delete Shift:=xlToLeft
' trier ascendant sur la date
Range("A1:B" & nbli).Sort Key1:=Range("B1"), Order1:=xlAscending, Header:= _
xlYes, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal
End Sub

Bon week-end
0
Bonjour Le Pingou,

Je te remercie pour tes conseils.

Désolé pour le retard, je n'étais pas là ce week-end.

Pour répondre à tes questions:

Il intervertit le jour et le mois uniquement quand j'exécute la macro. En réalisant chaque opération manuellement, le système n'intervit pas le jour et le mois.

Pour l'affichage de la date après avoir supprimer le "à ", le format est j/mm/aaaa h:mm, donc 7/07/2009 2:50:15.

Résultat de ta macro:

Elle fonctionne parfaitement. Par contre, quand je copie le résultat dans ma base de données, pour la colonne où il y a les dates, l'appui se fait à gauche au lieu de droite. Pourtant, le format reste le même (Personnalisée jj/mm/aaaa hh:mm:ss). Cela doit être dû au fait qu'après avoir utilisé ta macro dans le classeur transformation, le format est Texte. Donc, en copiant le résultat dans ma base de données Excel 2003, considère peut-être toujours cela comme du texte et non des dates, même si le format est Personnalisée jj/mm/aaaa hh:mm:ss.
0
Bonjour Le Pingou,

Après des vérifications, j'ai trouvé la cause du problème appui gauche au lieu d'appui droite, c'était à cause d'un espace en trop entre la date et l'heure: "11/07/2009 01:43:45" "devient "11/07/2009 01:43:45". Il faudra que je trouve comment intégrer cela à la macro pour éviter de devoir l'effectuer manuellement. Je chercherai prochainement.

Je te remercie pour ton aide.
0
Bonjour Le Pingou,

La macro fonctionne parfaitement, je te remercie pour tes recherches, ton aide et tes conseils.

Je vais essayer de mettre le sujet en mode résolu mais comme je ne suis pas inscrit, je ne sais pas si j'y arriverai.

Donc, si le sujet n'était pas en mode résolu, un modérateur pourrait-il réaliser cette opération.

MERCI
0
Le Pingou Messages postés 12035 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 1 avril 2024 1 425
15 juil. 2009 à 13:54
Merci.
0