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
8fichier-a.zip (81.01 Ko)
8data-ts.xlsx (69.48 Ko)

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

presse papier01

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 Sub

Crdlt

Bonjour Dan,

Merci pour votre réponse, par contre ja'i un souci avec votre macro

image

Merci d'avance

Julien

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 Sub

J'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

Rechercher des sujets similaires à "vba filtrer textbox"