Trier une colonne de date en ordre decroissant

Moreno076

XLDnaute Impliqué
Bonjour à tous.

Ci joint je n'arrive pas à trier la colonne date de rupture par ordre décroissant.
J'ai un bouton avec une macro. triage date.

Est ce qu'une personne pourrait me modifier ce fichier svp, je n'y arrive absolument pas.

D'autre part comment réinitialiser le fichier j'ai le gros bouton gris qui est en mode gestion terminée etje voudrais le déplacer et pouvoir avoir un bouton réinitialiser le fichier.

Merci pour votre aide.
 

Dranreb

XLDnaute Barbatruc
Ah. Je n'avais pas vu que vous utilisiez Excel 2003.
Il y avait un bogue Microsoft sur les dates dans cette version.
Il vaudrait mieux faire :
VB:
For L = 2 To UBound(T, 1)
   If Not IsEmpty(T(L, 1) Then T(L, 1) = Format(T(L, 1), "dd mmmm yyyy")
   Next L
En espérant que Excel 2003 le convertisse en date. Mais je crois que c'est le cas.
 
Dernière édition:

Moreno076

XLDnaute Impliqué
PlgDon.Columns("H").NumberFormat = "m/d/yyyy"
Désolé je ne comprends pas pouvez vous modifier et recopier la macro svp

Sub T_DATE()
Columns("H:H").Select
Selection.NumberFormat = "m/d/yyyy"
Dim PlgDon As Range, T(), L As Long
Set PlgDon = Sheets("Synthèse").UsedRange
T = PlgDon.Columns("H").Value
For L = 2 To UBound(T, 1)
If VarType(T(L, 1)) = vbString Then T(L, 1) = CDate(T(L, 1))
Next L
PlgDon.Columns("H").Value = T
PlgDon.Sort key1:=PlgDon.Columns("H"), Order1:=xlDescending, _
key2:=PlgDon.Columns("H"), Order2:=xlDescending, _
key3:=PlgDon.Columns("C"), Order3:=xlDescending, _
Header:=xlYes, MatchCase:=False, Orientation:=xlTopToBottom
End Sub

Merci
 

Dranreb

XLDnaute Barbatruc
Ou même comme ça :
VB:
Sub T_DATE()
Dim PlgDon As Range, T(), L As Long
Set PlgDon = Sheets("Synthèse").UsedRange
With PlgDon.Columns("H")
   T = .Value
   For L = 2 To UBound(T, 1)
      If VarType(T(L, 1)) = vbString Then T(L, 1) = CDate(T(L, 1))
      Next L
   .NumberFormat = "m/d/yyyy"
   .Value = T
   End With
PlgDon.Sort key1:=PlgDon.Columns("H"), Order1:=xlDescending, _
            key2:=PlgDon.Columns("C"), Order2:=xlDescending, _
            Header:=xlYes, MatchCase:=False, Orientation:=xlTopToBottom
End Sub
 

Moreno076

XLDnaute Impliqué
Ou même comme ça :
VB:
Sub T_DATE()
Dim PlgDon As Range, T(), L As Long
Set PlgDon = Sheets("Synthèse").UsedRange
With PlgDon.Columns("H")
   T = .Value
   For L = 2 To UBound(T, 1)
      If VarType(T(L, 1)) = vbString Then T(L, 1) = CDate(T(L, 1))
      Next L
   .NumberFormat = "m/d/yyyy"
   .Value = T
   End With
PlgDon.Sort key1:=PlgDon.Columns("H"), Order1:=xlDescending, _
            key2:=PlgDon.Columns("C"), Order2:=xlDescending, _
            Header:=xlYes, MatchCase:=False, Orientation:=xlTopToBottom
End Sub
Ok merci ca fonctionne je regarde tout ça tout de suite merci encore
 

Dranreb

XLDnaute Barbatruc
Étonnant. Et en mettant CDbl au lieu de CDate, pareil ?
En mettant CDbl systématiquzement, je veux dire, quel que soit Vartype(T(L, C)), sans le tester donc.
Là il ne peut plus inverser le jour et le mois, bon sang !
 
Dernière édition:

Dranreb

XLDnaute Barbatruc
Zut, il faut quand même le tester pour mettre d'abord CDate(T(L,1)).
Mais ensuite systématiquement T(L, C) = CDbl(T(L, C))
Mais c'est quand même bizarre. Mes souvenir de Excel 2003, maintenant assez lointains, me disaient qu'en affectant le tableau à .Value2 au lieu de .Value le problème disparaissait.
 

Discussions similaires

Réponses
5
Affichages
731

Statistiques des forums

Discussions
311 720
Messages
2 081 909
Membres
101 836
dernier inscrit
karmon