Problème tri colonne date

Bonjour à tous,

Je cherche à trier une colonne de date par ordre de plus ancienne/récente mais l'outil de tri d'excel me propose de tirer par ordre alphabétique.

Ma colonne de Date est le résultat d'une importation d'un fichier .xls dont les dates étaient de forme 19.02.2016 ( donc pas vraiment un date ). j'ai donc remplacé les "." par des "/" et les espaces dans les cellules par rien à l'aide de l'outil remplacer et tout marche parfaitement.

La problème c'est que je voudrais faire ces remplacements dans une macro.

j'ai donc fait "Columns("K:K").Replace what:=" ", Replacement:="", LookAt:=xlPart, SearchOrder:=xlByRows" et pareil pour les "." mais le résultat n'est pas le même que lorsque je fait le remplacement à la main et me propose toujours de trier par ordre alphabétique.

J'ai fait le test de collage spécial dans les deux cas ( copier une cellule avec un 1 et coller sur ma colonne de date ):

Cas du remplacement à la main : toutes mes dates passent à la forme 42XXX ( logique ).

Cas du remplacement par la macro : Une partie des dates est au format 42XXX et le reste en XX/XX/XXXX et je ne comprend pas du tout pourquoi !

J'ai aussi remarqué que si je vais dans une des cellules "problème" et que je fais "entrer" la date passe à droite et est utilisable comme celles du format 42XXX.

Est-ce que quelqu'un a déjà rencontré ce problème ? Ou alors si vous avez une idée d'un caractère caché qui me fait rester au format texte je suis preneur !

Merci à tous et bonne journée.

Bonjour,

Fournir les données d'origine (au format) 19.02.2016

et ta macro...

A+

Bonjour,

Je n'ai pas trouvé ton fichier.

Cordialement.

Effectivement j'ai oublié de la mettre.

J'ai enlevé du fichier les autres colonnes inutiles et j'ai juste laissé la macro de tri.

Merci pour votre aide.

34tri-date.zip (12.71 Ko)

Re,

Sub Tri()
    Dim c As Range
    With ActiveSheet
        For Each c In .Range("G2:G505")
            c.Value = DateValue(Replace(c, ".", "/"))
        Next c
        .Range("G2:G505").Sort key1:=.Range("G2"), order1:=xlAscending, Header:=xlNo
    End With
End Sub

Elle est dans ton fichier. Tu la lances.

Cordialement.

68ment-tri-date.zip (11.73 Ko)

Re,

Merci beaucoup pour ton aide, effectivement ça marche !

Une idée de pourquoi ma méthode était mauvaise ?

Cordialement.

Re,

Tu ne forçais pas la conversion en date et elle ne se fait pas toujours spontanément...

On est toujours obligé de tester quelle méthode va marcher, même dans des cas apparemment semblable. On risque toujours une inversion mois/jour si le jour est inférieur à 13 (reconnaissance par VBA en format américain). Et au bout de pas mal d'années, je me garderais bien d'affirmer que telle méthode est sûre lors de la manipulation de dates sous forme de chaînes.

Il reste toujours la possibilité d'extraire jour, mois et année pour refaire une conversion en date ave DateSerial qui, elle, ne sera jamais ambiguë.

Cordialement.

Bonjour,

Pfui... encore battu.

Vais devenir le poupou d'Excel pratique !

C'est effectivement la voie (DateSerial) que j'avais choisie : c'est peut-être un peu plus abscons..

Sub autre()
Dim a, Arr
    With ActiveSheet
        For Each o In .Range("G2:G505")
            Arr = Split(o, ".")
            o.Value = DateSerial(Trim(Arr(2)), Arr(1), Arr(0))
        Next
        .Range("G2:G505").Sort key1:=.Range("G2"), order1:=xlAscending, Header:=xlNo
    End With
End Sub

A+

Re,

Merci pour toutes ces informations MFerand !

C'est toujours bon à savoir et au moins je ne ferai pas cette erreur la prochaine fois.

Merci quand même à galopin d'avoir cherché une solution aussi

Bonne journée.

Cordialement.

De rien !

Note que DateSerial, retenu par Galopin [re-Salut du jour] est en principe le plus sûr car il renvoie directement le numéro de série utilisé par Excel pour stocker les dates, alors que la formulation d'une date sous forme texte implique sa reconnaissance comme date avant d'en stocker le numéro de série...

Bonne continuation.

Rechercher des sujets similaires à "probleme tri colonne date"