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

  • Initiateur de la discussion Initiateur de la discussion C@thy
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

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
 
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
 
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:
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
 
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:
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

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

Dernière édition:
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
 
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

- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Retour