Microsoft 365 Tri date impossible

  • Initiateur de la discussion Initiateur de la discussion moanin
  • 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 !

moanin

XLDnaute Accro
Bonjour à tous 😉



Dans une colonne j’ai des dates sous la forme :

03.04.1998

J’aimerais faire un tri par année.

Je n’arrive pas à les trier et dans "format" / date je n’ai pas l’équivalent.

Comment puis-je faire ?

Merci
IMG_6894.jpeg
 
Bonjour moanin, bonjour le forum !

J'arrive un peu après la bataille ......

J'ai exactement la même problème avec des exports de données d'un ERP dans Excel. Du coup, je me suis fait une petite macro qui met au bon format des dates du style 29.01.2023 :
VB:
Sub Format_Dates()
Dim Ligne As Long
Dim Rep As String
Dim Colonne As Variant
Dim A, B, T

Colonne = ActiveCell.Column
Colonne = Split(Columns(Colonne).Address(ColumnAbsolute:=False), ":")(1)
Ligne = ActiveCell.Row
Application.ScreenUpdating = False
With ActiveSheet 'Mise au format des dates d'échéance
    With .Range(Colonne & Ligne & ":" & Colonne & Range(Colonne & Rows.Count).End(xlUp).Row)
        T = .Value
        For A = 1 To UBound(T, 1)
            For B = 1 To UBound(T, 2)
                T(A, B) = Replace(T(A, B), ".", "/")
                .Item(A) = CDate(T(A, B))
            Next
        Next
    End With
End With
End Sub

Il suffit de se placer sur la première ligne de la colonne à modifier et de lancer cette macro.
 
Bonjour @ThierryP
Mieux optimisée ainsi :
VB:
Sub FormatDates()
   Dim RngCol As Range, T(), L As Long
   Set RngCol = ActiveCell
   Set RngCol = RngCol.Resize(RngCol(1000000, 1).End(xlUp).Row - RngCol.Row + 1)
   T = RngCol.Value
   For L = 1 To UBound(T, 1)
      T(L, 1) = CDate(Replace(T(L, 1), ".", "/"))
      Next L
   RngCol.Value = T
   End Sub
 
Bonjour Dranreb,

Effectivement, beaucoup mois de lignes ..... mais j'ai une erreur "Incompatibilité de type" sur la ligne
VB:
 T = RngCol.Value
du coup, ça marche beaucoup moins bien🤔🤔
Les valeurs dans les cellules sont des dates au format : 01.01.2023
 
Corrigez comme suit :
VB:
Sub FormatDates()
   Dim RngCol As Range, T(), L As Long
   Set RngCol = ActiveCell
   Set RngCol = RngCol.Resize(RngCol(1000000, 1).End(xlUp).Row - RngCol.Row + 1)
   If RngCol.Rows.Count = 1 Then
      ReDim T(1 To 1, 1 To 1): T(1, 1) = RngCol.Value
   Else: T = RngCol.Value: End If
   For L = 1 To UBound(T, 1)
      T(L, 1) = CDate(Replace(T(L, 1), ".", "/"))
      Next L
   RngCol.Value = T
   End Sub
 
Merci pour le retour !
J'ai dû changer cette ligne
VB:
Set RngCol = RngCol.Resize(RngCol(1000000, 1).End(xlUp).Row - RngCol.Row + 1)
qui ne renvoie que la première cellule, par :
Code:
Set RngCol = RngCol.Resize(Range("A" & Cells.Rows.Count).End(xlUp).Row - RngCol.Row + 1)
pour prendre en compte toute la plage.

Ta solution est effectivement bien plus efficace, le temps de traitement de 1 million de lignes passe de 38 secondes avec ma solution à 6 secondes !👏👏👏
 
- 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

Réponses
1
Affichages
212
Réponses
3
Affichages
112
Réponses
9
Affichages
483
  • Question Question
XL 2016 Date
Réponses
6
Affichages
580
Retour