vba - filtre automatique - problème avec les dates

  • Initiateur de la discussion Etudiant en détresse
  • Date de début
E

Etudiant en détresse

Guest
Salut à tous! Voilà je suis en stage pr mes études et il m'a été demandé de faire un programme VBA pr piloter excel. En fait, il faut que je traite les valeurs d'un fichier excel de la forme :
- colonne A : date de la mesure au format jj/mm/aaaa
- colonne B : heure de la mesure au format hh/mm/ss
- colonne C : mesure au format standard
en plus faut ke j'ai fini d'ici deux semaines... je suis mal!

il faut modéliser les valeurs pr des intervalles choisis par l'utilisateur, dc j'ai choisi de faire une boite de dialogue pr entrer les choix de l'utilisateur en mémoire, et après faire un filtre automatique... mais rien ne marche et je comprends rien!!!!
ca me tri rien... et en plus y a des pb de compatibilité jj/mm/aaaa et mm/jj/aaaa avec VBA...

voilà le programme ke j'ai fait,
Code:


Dim c1 As Date
Dim c2 As Date

Private Sub CommandButton1_Click()


TextBox1.Value = Format(TextBox1.Value, "dd/mm/yyyy")
TextBox2.Value = Format(TextBox2.Value, "dd/mm/yyyy")


If UserForm1.TextBox1.Text = "" Then
MsgBox "Vous n'avez rien saisi," & Chr(10) & "recommencez!"
Exit Sub

Else
TextBox1.Value = Format(TextBox1.Value, "dd/mm/yyyy")
Range("E1").Value = TextBox1.Value
ActiveCell.Offset(1, 0).Select
End If

If UserForm1.TextBox2.Text = "" Then
MsgBox "Vous n'avez rien saisi," & Chr(10) & "recommencez!"
Exit Sub

Else
TextBox2.Value = Format(TextBox2.Value, "dd/mm/yyyy")
Range("E2").Value = TextBox2.Value
ActiveCell.Offset(1, 0).Select
End If

Range("E1") = Format(Range("E1").Value, "dd/mm/yyyy")
Range("E2") = Format(Range("E2").Value, "dd/mm/yyyy")

c1 = Format(Range("E1").Value, "dd/mm/yyyy")
c2 = Format(Range("E2").Value, "dd/mm/yyyy")

Range("A:C").AutoFilter field:=1, Criteria1:=">=" & c1, Operator:=xlAnd, Criteria2:="<=" & c2
Sheets("Feuil1").AutoFilter.Range.Copy Sheets("Feuil2").Range("A1:C1")

Sheets("Feuil2").Range("1:1").Delete Shift:=xlShiftToLeft
Sheets("Feuil2").Columns("A").Delete Shift:=xlShiftToLeft


'Graphique
'Sheets("feuil2").Range("A1").EntireColumn.SpecialCells(xlCellTypeConstants).Select
'Sheets("feuil2").Range("B1").EntireColumn.SpecialCells(xlCellTypeConstants).Select

'Dim objChart As Chart, objRange As Range

' Set objRange = Worksheets("Feuil2").Range(Range("A1").EntireColumn.SpecialCells(xlCellTypeConstants), Worksheets("Feuil2").Range("B1").EntireColumn.SpecialCells(xlCellTypeConstants))
' Set objChart = ThisWorkbook.Charts.Add
'objChart.ChartType = xlLine
' objChart.SetSourceData objRange, xlColumns

Unload Me

End Sub




Merci d'avance pour votre aide
j'espère que vous trouverez une solution à mon pb.... ++
 
R

Ronan

Guest
Bonsoir,

La solution est toute trouvée.
Dans Excel, impossible de faire des filtres contenant des dates avec VBA.
La seule solution, est de convertir avant de faire le filtre, toute la colonne contenant les dates en numéro de série.
Puis, de convertir en numéro de série, également, la date saisie dans le textbox et de faire le filtre automatique.
Une fois le filtre exécuté, reformater les cellules au format date.
Et le tour est joué. Ni vu, ni connu, j't'embrouille.

Voici un exemple avec un tableau en A1:C21. Une colonne contenant des dates située dans la colonne A. Un userform nommé userform1, contenant un textbox nommé textbox1 et un bouton de commande nommé commandbutton1 :

Private Sub CommandButton1_Click()
Dim DateSaisie As Date
Dim NumDate As Long
If Me.TextBox1 = "" Then
Fin:
MsgBox "Aucune valeur saisie ou date erronée"
Me.TextBox1.Value = ""
Me.TextBox1.SetFocus
Exit Sub
End If
On Error GoTo Fin
DateSaisie = DateValue(Me.TextBox1.Value)
NumDate = DateSerial(Year(DateSaisie), Month(DateSaisie), Day(DateSaisie))
Range("a2:a" & Cells(65536, 1).End(xlUp).Row).NumberFormatLocal = "0"
Selection.AutoFilter Field:=1, Criteria1:=NumDate
Range("a2:a" & Cells(65536, 1).End(xlUp).Row).NumberFormatLocal = "jj/mm/aa"
End Sub

Private Sub UserForm_Initialize()
Range("a1").Select
Me.TextBox1.SetFocus
End Sub

Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
Selection.AutoFilter Field:=1
Range("a2:a" & Cells(65536, 1).End(xlUp).Row).NumberFormatLocal = "jj/mm/aa"
End Sub

@+

Ronan
 

Pièces jointes

  • Classeur1.zip
    9.2 KB · Affichages: 106
  • Classeur1.zip
    9.2 KB · Affichages: 96
  • Classeur1.zip
    9.2 KB · Affichages: 101
@

@+Thierry

Guest
Bonjour Ronan, Xavier, le Forum

Je suis content que la solution proposée à Xavier lui convienne mais par contre je ne suis pas d'accord avec cette affirmation catégorique et un peu expéditive "Dans Excel, impossible de faire des filtres contenant des dates avec VBA."

Il n'y a qu'à faire quelques recherches sur ce Forum car c'est une question qui est revenue souvent de faire des AutoFilter sur un critère de date et même entre deux dates inclusives et où j'ai trouvé une solution "paliative" bien plus simple... Sans convertir tout le tableau en en numéro de série...

Bonne Journée
@+Thierry
 

Discussions similaires

Réponses
1
Affichages
325

Statistiques des forums

Discussions
312 325
Messages
2 087 304
Membres
103 513
dernier inscrit
adel.01.01.80.19