Trier Date

Bonjour à tous!

J'ai un petit problème sur un fichier, en effet je n'arrive pas à trier les dates de mon fichier.

J'aimerais pouvoir via un UserForm et un programme VBA pouvoir choisir de "telle date à telle date" et que ça puisse supprimer toutes les lignes non associés a ces dates.

Merci d'avance le forum!

Cordialement

13xxx.zip (19.66 Ko)

Bonjour,

Une partie de tes dates est au format texte (alignement à gauche) et non au format nombre (alignement à droite). De plus, tes dates au format texte sont au format anglo-saxon.

Ne pas oublier qu'une date dans Excel est un nombre = nombre de jours depuis le 1er janvier 1900.

La constitution de ta feuille de dates est à revoir.

je l'ai ai réglés en "jj/mm/aaaa hh:mm", moi je voudrais juste que le programme puisse par exemple trier les dates de 2018 et supprimer celle de 2019 par exemple

Cordialement

Bonjour,

Tes dates sont au format US (mm/dd/yyyy) donc, Excel en Français ne considère en dates valides (jj/mm/aaaa) que celles dont le jour en date US est inférieur à 13 (le mois pour Excel Français), les autres étant considérées comme du texte.

Une petite procédure pour transformer les dates du format US au format FR :

Sub Test()

    Dim Plage As Range
    Dim Cel As Range
    Dim T
    Dim LaDate As Date

    'défini la plage sur la colonne B de la feuille active à partir de B2
    With ActiveSheet: Set Plage = .Range(.Cells(2, 2), .Cells(.Rows.Count, 2).End(xlUp)): End With

    For Each Cel In Plage

        T = Split(Cel.Value, "/")

        'reconstruit la date au format Français (jj/mm/aaaa hh:mm)
        LaDate = CDate(DateSerial(Split(T(2), " ")(0), T(0), T(1)) & " " & Split(T(2), " ")(1))

        'et la met dans la colonne E
        Cel.Offset(, 3).Value = LaDate

    Next Cel

End Sub

Tout ça bien évidemment si tu utilise Excel en Français avec ces dates en Anglais sinon, donne plus d'explications !

Ah oui! en effet je viens de voir le problème des dates qui ne sont pas française, je viens de mettre le programme que vous m'avez envoyé (merci bcp!!!). Maintenant, j'aimerais savoir s'il était possible d'avoir un user form et d'y mettre des dates indiqués et qu'il me supprime les dates qui ne sont pas indiquées.

Par exemple, je souhaite sélectionner seulement les dates de 2019 et supprimer toutes les autres.

Cordialement!

fichiers avec programme

6xxx-3.xlsm (32.54 Ko)

SVP qqlun peut m'aider??

Sur ton UserForm, tu poses deux TextBox nommés "TextBox1" et "TextBox2" (noms par défaut, "TextBox1" pour la date de début et "TextBox2" pour la date de fin) et un bouton nommé "CommandButton1" puis tu colles le code ci-dessous dans le module de l'UserForm. Les dates inférieures à TextBox1 et supérieure à TextBox2 auront leur ligne entière supprimée donc, par prudence, faire un test sur une copie de la feuille. Attention, les dates sont sensées être valides en colonne B (tu les as remplacé par les dates issues de mon code précédant). Le code s'exécute sur la feuille active :

Private Sub CommandButton1_Click()

    Dim Plage As Range
    Dim I As Long

    If TextBox1.Text = "" Or TextBox2.Text = "" Then Exit Sub

    With ActiveSheet: Set Plage = .Range(.Cells(2, 2), .Cells(.Rows.Count, 2).End(xlUp)): End With

    If TestDate(TextBox1.Text) = False Then MsgBox "Date non valide pour la date de début !": Exit Sub
    If TestDate(TextBox2.Text) = False Then MsgBox "Date non valide pour la date de fin !": Exit Sub

    Application.ScreenUpdating = False

    Plage.NumberFormat = "general"

    For I = Plage.Count To 1 Step -1

        If Plage(I, 1).Value < CDbl(CDate(TextBox1.Text)) Or Plage(I, 1).Value > CDbl(CDate(TextBox2.Text)) Then

            Plage(I, 1).EntireRow.Delete

        End If

    Next I

    Plage.NumberFormat = "m/d/yyyy h:mm"

    Application.ScreenUpdating = True

End Sub

Function TestDate(LaDate As String) As Boolean

    Dim DateTest As Date

    TestDate = True

    On Error Resume Next
    DateTest = CDate(LaDate)

    If Err.Number <> 0 Then

        Err.Clear
        TestDate = False

    End If

End Function

ça marche! merci!

Bonjour,

@ Theze

Il semble que ta procédure de conversion modifie aussi les dates valides !...

Cdlt.

Comme tu peux le voir dans ma signature, je ne répond pas en message privé donc, la réponse je te la donne ici !

...je n'arrive pas à utiliser ta macro avec d'autre colonne, comment pourrais-je faire pour que celle-ci s'applique à la colonne E par exemple ?

La propriété "Cells" de l'objet Range (qui renvoi aussi un Range) attend deux arguments, l'index de ligne et l'index de colonne. Ces deux arguments sont optionnels (on le voit dans l'intellisense aux crochets qui entourent les arguments). Pour faire référence à la colonne E qui a comme index, dans l'ordonnancement, le numéro 5, il suffit de l'indiquer dans le second argument donc, Cells(2, 5) et Cells(.Rows.Count, 5) :

With ActiveSheet: Set Plage = .Range(.Cells(2, 5), .Cells(.Rows.Count, 5).End(xlUp)): End With
Rechercher des sujets similaires à "trier date"