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
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
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
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" <Alpha@ducentaure.fr> a écrit dans le message de news:e6aAjDRsDHA.1872@TK2MSFTNGP09.phx.gbl...
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
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
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
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" <denis.michon@cgocable.ca> a écrit dans le message de news:
xIOvb.60058$Ng3.10944@charlie.risq.qc.ca...
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" <Alpha@ducentaure.fr> a écrit dans le message de
news:e6aAjDRsDHA.1872@TK2MSFTNGP09.phx.gbl...
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
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