VBA filtrer avec une textbox
Salut à tous,
J'ai une macro dans le fichier A qui va récupérer une base de donnée dans le fichier data ts.
Elle fonctionne correctement mais j'aimerais rajouter :
Une fois que le tri a été fait sur la colonne A, faire afficher une textbox pour trier sur la colonne G ( exemple entrer la date 03/10/2024 ) et ensuite reprendre la suite de la macro.
Merci d'avance à vous.
Julien
Sub ImportDATA()
Workbooks.OpenText Filename:="z:\common1\Tab_Soba\Ligne B&P\03 - TS\data TS.xlsx", Origin:=xlWindows, _
StartRow:=1, DataType:=xlDelimited, TextQualifier:= _
xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, Semicolon _
:=False, Comma:=False, Space:=False, Other:=False, FieldInfo _
:=Array(1, 1)
NbOfMax = Range("A1").End(xlDown).Row
Selection.AutoFilter
ActiveSheet.Range("$A$1:$P$444").AutoFilter Field:=1, Criteria1:=Array( _
"DA TRIAG", "TS DA", "TS DA1-4", "TS DA2-3"), Operator:=xlFilterValues
Range("A2:P10000").Select
Selection.Copy
'Copie des valeurs dans charge
Windows("fichier A.xlsm").Activate
Sheets("Sheet1").Activate
ActiveSheet.Cells(Rows.Count, "A").End(xlUp)(2).Select
ActiveSheet.Paste
Windows("data TS.xlsx").Activate
ActiveSheet.ShowAllData
Workbooks(2).Save
Workbooks(2).Close
Bonjour
Une fois que le tri a été fait sur la colonne A, faire afficher une textbox pour trier sur la colonne G
Ce n'est pas une trop bonne idée car la textbox (ou plutôt une Inputbox) devra déjà contenir les mêmes caractères et la même structure que la date mentionnée en colonne G.
exemple : si dans l'inputbox vous mettez 03-10-24 ou 03-10-2024 ou 03/10/2024. Le seul format qui sera reconnu est celui correspondant à la colonne G
Du coup, vous risquez que le filtre ne soit pas effectué ou d'avoir un bug.
Pour minimiser les erreurs, allez au plus simple en faisant votre filtrage en colonne G une fois les données importées par la macro
- cliquez sur la flèche du filtre en G1
- choisissez "Filtres chronologique" --> "est égal à"
Cela vous amène à cette fenêtre où il vous suffit de faire le choix date en cliquant sur le calendrier à droite
Cela vous laisse plus libre du choix que via un code où si vous vous trompez dans la date vous devez recommencer tout (y compris supprimer les données importées)
Pour votre code essayez comme ceci
Sub ImportDATA()
Dim chemin As String, fichier As String
Dim Nbofmax As Integer
fichier = "data TS.xlsx"
chemin = "z:\common1\Tab_Soba\Ligne B&P\03 - TS\"
Workbooks.OpenText Filename:=chemin & fichier, Origin:=xlWindows, _
StartRow:=1, DataType:=xlDelimited, TextQualifier:= _
xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, Semicolon _
:=False, Comma:=False, Space:=False, Other:=False, FieldInfo _
:=Array(1, 1)
With ActiveWorkbook.ActiveSheet
Nbofmax = .Range("A" & Rows.Count).End(xlUp).Row
.Range("A1:P" & Nbofmax).AutoFilter Field:=1, Criteria1:=Array( _
"DA TRIAG", "TS DA", "TS DA1-4", "TS DA2-3"), Operator:=xlFilterValues
.Range("A2:P" & Nbofmax).Copy
End With
'Copie des valeurs dans charge
With ThisWorkbook.Sheets("sheet1")
Nbofmax = .Range("A" & Rows.Count).End(xlUp).Row + 1
.Cells(Nbofmax, "A").Paste
End With
Workbooks(fichier).Close False
End SubCrdlt
Re
Oups juste .... désolé.
Le code modifié
Sub ImportDATA()
Dim chemin As String, fichier As String
Dim Nbofmax As Integer, dlg As Integer
fichier = "data TS.xlsx"
chemin = "z:\common1\Tab_Soba\Ligne B&P\03 - TS\"
Workbooks.OpenText Filename:=chemin & fichier, Origin:=xlWindows, _
StartRow:=1, DataType:=xlDelimited, TextQualifier:= _
xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, Semicolon _
:=False, Comma:=False, Space:=False, Other:=False, FieldInfo _
:=Array(1, 1)
With ActiveWorkbook.ActiveSheet
On Error Resume Next
.ShowAllData 'defiltrer
On Error GoTo 0
Nbofmax = .Range("A" & Rows.Count).End(xlUp).Row
.Range("A1:P" & Nbofmax).AutoFilter Field:=1, Criteria1:=Array( _
"DA TRIAG", "TS DA", "TS DA1-4", "TS DA2-3"), Operator:=xlFilterValues
'Copie des valeurs dans charge
dlg = ThisWorkbook.Sheets("sheet1").Range("A" & Rows.Count).End(xlUp).Row + 1
.Range("A2:P" & Nbofmax).Copy ThisWorkbook.Sheets("sheet1").Cells(dlg, "A")
End With
Workbooks(fichier).Close False
End SubJ'ai rajouté une ligne pour défiltrer pour le cas où le fichier data contiendrait des filtres inappropriés
Si ok et terminé pensez à
Cordialement
