Autres Problème de tri de date en VBA

fel

XLDnaute Nouveau
Bonjour,
dans mon programme de recherche, je tri ma liste de courrier selon 9 critères.

Le tri fonctionne très bien sauf la 1ère colonne (Date) qui ne fonctionne pas je ne comprends pourquoi?

Quelqu'un pourrait il m'aider svp?

Merci
 

Pièces jointes

  • dam777-tri-courrier-v6.xlsm
    37.5 KB · Affichages: 9
Solution
Oui j ai oublié de préciser j ai pris la solution de "Gégé" qui a conservé le code suivant qui est essentiel pour la recherche des mots clés quand il y en a plusieurs .
VB:
Criteria1:="*" & sCrit & "*"
La soluce de Gégé implique d'entrer une date dans son format complet
et n'utilise pas le code Criteria1:="*" & sCrit & "*" pour la date
mais Criteria1:=Format(sCrit2, "dd/mm/yyyy") ...

Ci-dessous la sub avec la gestion d'erreur éventuelle :
VB:
Private Sub CommandButton2_Click()
  Dim Ind As Integer, dLig As Long, sCrit As String, sCrit2
  Dim TabCol As Variant, NumCol As Long
  ' Liste des colonnes à prendre en compte
  TabCol = Split("A,B,G,H,I,J,K,R,T", ",")
  ' Avec la feuille active
  With ActiveSheet
    If...

fel

XLDnaute Nouveau
Re,
oui vous avez raison c'est plutôt un pb de filtre.👍

Merci pour ta solution, elle marche nickel par contre si on renseigne un valeur autre que date (valeur erroné) on rentre dans le débogage.
Je suppose qu'il faut renvoyer une erreur c'est ça?
Si oui comment on fait?
 

fanch55

XLDnaute Barbatruc
Oui j ai oublié de préciser j ai pris la solution de "Gégé" qui a conservé le code suivant qui est essentiel pour la recherche des mots clés quand il y en a plusieurs .
VB:
Criteria1:="*" & sCrit & "*"
La soluce de Gégé implique d'entrer une date dans son format complet
et n'utilise pas le code Criteria1:="*" & sCrit & "*" pour la date
mais Criteria1:=Format(sCrit2, "dd/mm/yyyy") ...

Ci-dessous la sub avec la gestion d'erreur éventuelle :
VB:
Private Sub CommandButton2_Click()
  Dim Ind As Integer, dLig As Long, sCrit As String, sCrit2
  Dim TabCol As Variant, NumCol As Long
  ' Liste des colonnes à prendre en compte
  TabCol = Split("A,B,G,H,I,J,K,R,T", ",")
  ' Avec la feuille active
  With ActiveSheet
    If ActiveSheet.AutoFilter.FilterMode = True Then ActiveSheet.ShowAllData
    ' Définir la plage à traiter
    Set Rng = .Range("A6").CurrentRegion
    ' Déplacer la plage d'une ligne vers le bas et la redimensionner
    Set Rng = Rng.Resize(Rng.Rows.Count - 1, Rng.Columns.Count).Offset(1, 0)
    ' Suis l'ordre des TextBox
    For Ind = 1 To 9
      ' Préparer le critère de filtre
      sCrit = ""
      ' Si le TextBox contient une valeur
      If Me.Controls("Textbox" & Ind) <> "" Then
        ' Définir le numéro de colonen à traiter
        NumCol = Range(TabCol(Ind - 1) & "1").Column
        ' Critère de filtre
        sCrit = Me.Controls("Textbox" & Ind).Value
        If NumCol = 1 Then
            On Error Resume Next
            sCrit2 = DateSerial(CInt(Mid(Me.Controls("Textbox" & Ind).Value, 7, 4)), CInt(Mid(Me.Controls("Textbox" & Ind).Value, 4, 2)), CInt(Mid(Me.Controls("Textbox" & Ind).Value, 1, 2)))              'Application.WorksheetFunction.DateValue(Me.Controls("Textbox" & Ind).Value)
            If Err = 0 Then
                Rng.AutoFilter Field:=NumCol, Criteria1:=Format(sCrit2, "dd/mm/yyyy")
            Else
                Me.Controls("Textbox" & Ind).Value = ""
            End If
            On Error GoTo 0
        Else
            Rng.AutoFilter Field:=NumCol, Criteria1:="*" & sCrit & "*"
        End If
      End If
    Next Ind
  End With
End Sub
 

Discussions similaires

Statistiques des forums

Discussions
314 485
Messages
2 110 101
Membres
110 663
dernier inscrit
ToussaintBug