XL 2010 Tri date selon mois jours sans tenir compte de l'année

C@thy

XLDnaute Barbatruc
Bonjour le forum,
J'ai une colonne avec des dates, et je voudrais trier la base selon cette colonne sur le critère mm/jj sans tenir compte de l'année. Faut-il absolument passer par une colonne intermédiaire?

Merci de votre aide.

C@thy
 

R@chid

XLDnaute Barbatruc
Bonsoir @ tous,
R

J'ai mis une macro (juste pour l'exemple)
VB:
Sub ExempleFiltre()
ActiveSheet.Range("$A$1:$A$50").AutoFilter Field:=1, Criteria1:=xlFilterAllDatesInPeriodJanuary, Operator:=xlFilterDynamic
End Sub
L'exemple ici filtre tous les dates d'un mois de janvier
(et ce quelque ce soit l'année)

Mais évidemment, c'est plus intuitif en pilotant le filtre à la souris ;)
Mais notre amie C@thy parle d'un tri et pas d'un filtre, sinon je suis Excel 2019 si tu peux m'expliquer comment m'y mettre, merci Staple1600 :).

Cordialement
 

CISCO

XLDnaute Barbatruc
Bonjour à tous

Re
Je sélectionne une colonne contenant des dates
Puis Données/Filtrer => je clique sur la flèche du filtre pour dérouler les options du filtre et je choisis Filtres chronologiques
Effectivement, ça y est aussi sur Excel 2010. Je ne connaissais pas cette commande Filtres chronologiques. Reste plus qu'à trouver comment s'y prendre pour que ce filtre ne tienne compte que du jour et du mois, et pas de l'année.

Perso, je trouve que ma dernière proposition (colonne G), fait pas mal le boulot (s'il ni a pas 10000 dates à classer !).

@ plus
 
Dernière édition:

C@thy

XLDnaute Barbatruc
Merci à tous. Je parle effectivement d'un tri et non pas d'un filtre. Je ne peux pas télécharger les documents ma box ne fonctionne pas (merci Free) donc si vous pouviez mettre les formules écrites dans la réponse ce serait super...

C@thy
 

CISCO

XLDnaute Barbatruc
Bonjour à tous, bonjour C@thy

Si tu mets des dates dans A1:A3, tu peux faire avec une des 4 formules matricielles suivantes, écrites sur la ligne 1, puis tirées vers le bas :

Code:
PETITE.VALEUR(A$1:A$3-DATE(ANNEE(A$1:A$3);1;1)+1;LIGNES($1:1))
ou
Code:
TEXTE(ARRONDI(100*MOD(PETITE.VALEUR(MOIS(A$1:A$3)+JOUR(A$1:A$3)/100;LIGNES($1:1));1);0);"00")&"/"&TEXTE(ENT(PETITE.VALEUR(MOIS(A$1:A$3)+JOUR(A$1:A$3)/100;LIGNES($1:1)));"00")
ou
Code:
DATE(1900;ENT(PETITE.VALEUR(MOIS(A$1:A$3)+JOUR(A$1:A$3)/100;LIGNES($1:1)));ARRONDI(100*MOD(PETITE.VALEUR(MOIS(A$1:A$3)+JOUR(A$1:A$3)/100;LIGNES($1:1));1);0))
ou
Code:
INDEX(A$1:A$3;MAX(SI(PETITE.VALEUR(MOIS(A$1:A$3)+JOUR(A$1:A$3)/100;LIGNES($1:1))=MOIS(A$1:A$3)+JOUR(A$1:A$3)/100;LIGNE($1:$3))))
à mettre au format jj/mm pour toutes sauf la seconde.

La première formule ne donne pas systématiquement la bonne date, à un ou deux jours près.

Tu as le choix.

@ plus
 
Dernière édition:

job75

XLDnaute Barbatruc
Bonjour C@thy, c'est un bonheur de te retrouver ici, salut R@chid, JM, CISCO,

Voyez le fichier joint :

- dates sur la plage A2:A7

- colonne B auxiliaire avec en B2 =TEXTE(A2;"mm.jj")

- formule matricielle en C2 à valider par Ctrl+Maj+Entrée :
Code:
=SIERREUR(INDEX(A$2:A$7;EQUIV(PETITE.VALEUR(NB.SI(B$2:B$7;"<"&B$2:B$7);LIGNES(C$2:C2));NB.SI(B$2:B$7;"<"&B$2:B$7);0));"")
Il est intéressant de voir ce qui se passe quand on enlève le point en B2 ou qu'on le remplace par "/".

On peut remplacer le point par un espace.

A+
 

Pièces jointes

  • Tri(1).xlsx
    10.3 KB · Affichages: 1

job75

XLDnaute Barbatruc
S'il y a des doublons de mois/jour il vaut mieux cette formule en B2 =TEXTE(A2;"mm.jj.aaaa")

De plus il vaut mieux ajouter un test pour la formule en C2 :
Code:
=SIERREUR(INDEX(A$2:A$9;EQUIV(PETITE.VALEUR(SI(ESTNUM(A$2:A$9);NB.SI(B$2:B$9;"<"&B$2:B$9));LIGNES(C$2:C2));NB.SI(B$2:B$9;"<"&B$2:B$9);0));"")

Fichier (2).
 

Pièces jointes

  • Tri(2).xlsx
    10.6 KB · Affichages: 5
Dernière édition:

R@chid

XLDnaute Barbatruc
Bonjour @ tous,
avec une formule matricielle et sans colonne intermédiaire, sur le fichier Tri(2).xlsx de notre ami Job75, en E2 :
VB:
=SIERREUR(INDEX(A$2:A$8;EQUIV(PETITE.VALEUR(TEXTE(A$2:A$8;"mmdd")+ANNEE(A$2:A$8)/9^9;LIGNES($2:2));TEXTE(A$2:A$8;"mmdd")+ANNEE(A$2:A$8)/9^9;0));"")
@ valider par Ctrl+Shift+Enter
@ tirer vers le bas


Cordialement
 

job75

XLDnaute Barbatruc
Si l'on veut du VBA voyez le fichier joint et ces macros :
VB:
Sub TriMoisJour()
Dim tablo, a(), b(), i&, dat, n&
tablo = [A1].CurrentRegion.Resize(, 2) 'matrice, plus rapide, au moins 2 éléments
ReDim a(UBound(tablo))
ReDim b(UBound(tablo))
For i = 2 To UBound(tablo)
    dat = tablo(i, 1)
    If IsDate(dat) Then
        a(n) = Format(dat, "mm.dd.yyyy")
        b(n) = CDbl(dat) 'convertit en nombre
        n = n + 1
    End If
Next
tri a, b, 0, n - 1
'---restitution---
If ActiveSheet.FilterMode Then ActiveSheet.ShowAllData 'si la feuille est filtrée
With [B2] '1ère cellule de destination, à adapter (ce peut être A2)
    If n Then .Resize(n) = Application.Transpose(b) 'Transpose est limitée à 65536 lignes
    .Offset(n).Resize(Rows.Count - n - .Row + 1).ClearContents 'RAZ en dessous
End With
End Sub

Sub tri(a, b, gauc, droi) ' Quick sort
Dim ref, g, d, temp
ref = a((gauc + droi) \ 2)
g = gauc: d = droi
Do
    Do While a(g) < ref: g = g + 1: Loop
    Do While ref < a(d): d = d - 1: Loop
    If g <= d Then
      temp = a(g): a(g) = a(d): a(d) = temp
      temp = b(g): b(g) = b(d): b(d) = temp
      g = g + 1: d = d - 1
    End If
Loop While g <= d
If g < droi Then Call tri(a, b, g, droi)
If gauc < d Then Call tri(a, b, gauc, d)
End Sub
 

Pièces jointes

  • Tri VBA(1).xlsm
    19.7 KB · Affichages: 3

Discussions similaires

Statistiques des forums

Discussions
312 294
Messages
2 086 895
Membres
103 404
dernier inscrit
sultan87