Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Critére de filtre dans un textbox.

2 réponses
Avatar
Alpha
Bonjour
J'ai un tableau avec des noms en B3:B1000.
Je souhaite créer un filtre avec un userform et un textbox
Je souhaite que l'on puisse saisir dans le textbox le nom de la personne à
filtrer.J'ai mon textbox mon userform mes boutons OK et Annuler.
Comment faire ?
Merci beaucoup
Alpha

2 réponses

Avatar
Denis Michon
Bonjour Alpha,

Au lieu d'un textbox, il semble qu'il serait préférable d'utiliser un Combobox qui contiendrait la liste des valeurs
uniques de ta plage de données.


Tout le code qui suit peut être mis dans ton formulaire,
Je crois qu'il ne te reste plus qu'à adapter le nom de la feuille à 2 endroits selon celle où se trouvent tes données.
Évidemment, tu dois aussi adapter le nom du combobox selon celui que tu auras choisi.

Tu ne dois pas OBLIGATOIREMENT définir la propriété RowSource de ton combobox.

'à chaque fois que tu choisiras une nouvelle valeur dans ton combobox, le filtre automatique se mettra à jour
'---------------------------------------
Private Sub ComboBox1_Change()

With Worksheets("Feuil2") ' Nom de la feuille à déterminer

With .Range("B1:B" & Range("B65536").End(xlUp).Row)
.AutoFilter field:=1, Criteria1:=Me.ComboBox1.Text
End With
End With
End Sub
'---------------------------------------


'Dès que ton formulaire se chargera, la liste de ton combobox sera mise à jour.
Private Sub UserForm_Initialize()
ListeUnique
End Sub


' ce qui suit a été élaboré par Tom Ogilvy (forum anglais - excel)
'Ces 2 procédures s'assurent qu'il n'y aura pas de doublons dans
'ta liste de ton combobox + met ta liste en ordre croissant

'---------------------------------------
Sub ListeUnique()

Dim vArr As Variant, vArr1 As Variant, Rng As Range

With Worksheets("Feuil2") ' Nom de la feuille à déterminer
Set Rng = .Range(Cells(1, "A"), .Cells(1, "A").End(xlDown))
End With
vArr = Application.Transpose(Rng)
ShellSort vArr
ReDim vArr1(1 To 1)
vArr1(1) = vArr(1)
j = 1
For i = LBound(vArr, 1) + 1 To UBound(vArr, 1)
If vArr(i) <> vArr1(j) Then
j = j + 1
ReDim Preserve vArr1(1 To j)
vArr1(j) = vArr(i)
End If
Next
With Me.ComboBox1
.MatchRequired = True
.MatchEntry = fmMatchEntryFirstLetter
.Style = fmStyleDropDownList
.list = Application.Transpose(vArr1)
End With

Set Rng = Nothing

End Sub
'---------------------------------------

Sub ShellSort(list As Variant, Optional ByVal LowIndex As Variant, _
Optional HiIndex As Variant)

Dim i As Long, j As Long, inc As Long
Dim var As Variant

If IsMissing(LowIndex) Then LowIndex = LBound(list)
If IsMissing(HiIndex) Then HiIndex = UBound(list)
inc = 1
Do While inc <= HiIndex - LowIndex: inc = 3 * inc + 1: Loop
Do
inc = inc 3
For i = LowIndex + inc To HiIndex
var = list(i)
j = i
Do While list(j - inc) > var
list(j) = list(j - inc)
j = j - inc
If j <= inc Then Exit Do
Loop
list(j) = var
Next
Loop While inc > 1

End Sub
'---------------------------------------


Salutations!




"Alpha" a écrit dans le message de news:
Bonjour
J'ai un tableau avec des noms en B3:B1000.
Je souhaite créer un filtre avec un userform et un textbox
Je souhaite que l'on puisse saisir dans le textbox le nom de la personne à
filtrer.J'ai mon textbox mon userform mes boutons OK et Annuler.
Comment faire ?
Merci beaucoup
Alpha
Avatar
Alpha
Merci beaucoup Denis quelle richesse, quelle qualité !
Merci pour toutes tes explications et pour la procédure.
Encore une occasion pour apprendre avec un tel professeur.
Merci
Alpha

"Denis Michon" a écrit dans le message de news:
xIOvb.60058$
Bonjour Alpha,

Au lieu d'un textbox, il semble qu'il serait préférable d'utiliser un
Combobox qui contiendrait la liste des valeurs

uniques de ta plage de données.


Tout le code qui suit peut être mis dans ton formulaire,
Je crois qu'il ne te reste plus qu'à adapter le nom de la feuille à 2
endroits selon celle où se trouvent tes données.

Évidemment, tu dois aussi adapter le nom du combobox selon celui que tu
auras choisi.


Tu ne dois pas OBLIGATOIREMENT définir la propriété RowSource de ton
combobox.


'à chaque fois que tu choisiras une nouvelle valeur dans ton combobox, le
filtre automatique se mettra à jour

'---------------------------------------
Private Sub ComboBox1_Change()

With Worksheets("Feuil2") ' Nom de la feuille à déterminer

With .Range("B1:B" & Range("B65536").End(xlUp).Row)
.AutoFilter field:=1, Criteria1:=Me.ComboBox1.Text
End With
End With
End Sub
'---------------------------------------


'Dès que ton formulaire se chargera, la liste de ton combobox sera mise à
jour.

Private Sub UserForm_Initialize()
ListeUnique
End Sub


' ce qui suit a été élaboré par Tom Ogilvy (forum anglais - excel)
'Ces 2 procédures s'assurent qu'il n'y aura pas de doublons dans
'ta liste de ton combobox + met ta liste en ordre croissant

'---------------------------------------
Sub ListeUnique()

Dim vArr As Variant, vArr1 As Variant, Rng As Range

With Worksheets("Feuil2") ' Nom de la feuille à déterminer
Set Rng = .Range(Cells(1, "A"), .Cells(1, "A").End(xlDown))
End With
vArr = Application.Transpose(Rng)
ShellSort vArr
ReDim vArr1(1 To 1)
vArr1(1) = vArr(1)
j = 1
For i = LBound(vArr, 1) + 1 To UBound(vArr, 1)
If vArr(i) <> vArr1(j) Then
j = j + 1
ReDim Preserve vArr1(1 To j)
vArr1(j) = vArr(i)
End If
Next
With Me.ComboBox1
.MatchRequired = True
.MatchEntry = fmMatchEntryFirstLetter
.Style = fmStyleDropDownList
.list = Application.Transpose(vArr1)
End With

Set Rng = Nothing

End Sub
'---------------------------------------

Sub ShellSort(list As Variant, Optional ByVal LowIndex As Variant, _
Optional HiIndex As Variant)

Dim i As Long, j As Long, inc As Long
Dim var As Variant

If IsMissing(LowIndex) Then LowIndex = LBound(list)
If IsMissing(HiIndex) Then HiIndex = UBound(list)
inc = 1
Do While inc <= HiIndex - LowIndex: inc = 3 * inc + 1: Loop
Do
inc = inc 3
For i = LowIndex + inc To HiIndex
var = list(i)
j = i
Do While list(j - inc) > var
list(j) = list(j - inc)
j = j - inc
If j <= inc Then Exit Do
Loop
list(j) = var
Next
Loop While inc > 1

End Sub
'---------------------------------------


Salutations!




"Alpha" a écrit dans le message de
news:

Bonjour
J'ai un tableau avec des noms en B3:B1000.
Je souhaite créer un filtre avec un userform et un textbox
Je souhaite que l'on puisse saisir dans le textbox le nom de la personne à
filtrer.J'ai mon textbox mon userform mes boutons OK et Annuler.
Comment faire ?
Merci beaucoup
Alpha