![]() |
|
Forum
|
|
|
#1 (permalink) |
|
Guest
Messages: n/a
|
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.Special Cells(xlCellTypeConstants).Select 'Sheets("feuil2").Range("B1").EntireColumn.Special Cells(xlCellTypeConstants).Select 'Dim objChart As Chart, objRange As Range ' Set objRange = Worksheets("Feuil2").Range(Range("A1").EntireColum n.SpecialCells(xlCellTypeConstants), Worksheets("Feuil2").Range("B1").EntireColumn.Spec ialCells(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.... ++ |
| ANNONCES | |||
|
|
|
|
#2 (permalink) |
|
Guest
Messages: n/a
|
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 |
|
|
#4 (permalink) |
|
Guest
Messages: n/a
|
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 |
| ANNONCES | |
| Liens sociaux |
| Outils de la discussion | |
|
|