Rechercher via listbox
Salut chers tous
Je voudrais a l'aide de listbox afficher les enregistrements concernant un code donné
Le code de recherche a été fait mais un soucis se pressente
Pourriez vous jeter un coup d’œil et m'aider ?
Merci
Bonjour
il trouve l'onglet Sheets("Grille_de_Dispensation")
mètre plutôt le codename
ex:
dl = Feuil1.Range("A" & Rows.Count).End(xlUp).Row
With Feuil1.[A1].CurrentRegion.Resize(dl, 11)
A+
Maurice
Bonjour
il trouve l'onglet Sheets("Grille_de_Dispensation")
mètre plutôt le codename
ex:
dl = Feuil1.Range("A" & Rows.Count).End(xlUp).Row With Feuil1.[A1].CurrentRegion.Resize(dl, 11)
A+
Maurice
Oui jai fais cette correction mais toujours un soucis lors de la recherche quand je saisi dans le text box de recherche
Salut KTM le fil...
Dis moi quand tu dis un soucis se présente tu parles de l'erreur sur ListBox2.Clear ? Si c'est ça c'est normal dans UserForm_Initialise tu as mis :
Private Sub UserForm_Initialize()
Dim dl As Long
dl = Sheets("Grille_de_Dispensation").Range("A" & Rows.Count).End(xlUp).Row
With Sheets("Grille_de_Dispensation").[A1].CurrentRegion.Resize(dl, 11)
ListBox2.ColumnCount = .Columns.Count
If .Rows.Count > 1 Then ListBox2.RowSource = .Rows(2).Resize(.Rows.Count - 1).Address
End With
End Sub
Tu attibue donc une valeur à RowSource et tu ne peux pas faire un .Clear. tu dois changer ton code comme ceci en effaçant le .RowSource
Private Sub TextBox6_Change()
Dim S As String, i As Long, Lmax As Long, Nbr As Long, k As Long, NbreCol As Integer
Dim L, V, LigneOK, m As Long
NbreCol = 11
If TextBox6 = "" Then
Dim xRg As Range
Set xRg = Range(Range("A2"), Range("A" & Rows.Count).End(xlUp).Offset(, 10))
ListBox2.ColumnHeads = False
ListBox2.List = xRg.Value
Else
ListBox2.RowSource = ""
Lmax = Range("A" & Rows.Count).End(xlUp).Row
V = Range(Range("A2"), Cells(Lmax, NbreCol)).Value
ReDim LigneOK(1 To Lmax - 1)
S = "*" & LCase(TextBox6) & "*"
For i = 1 To Lmax - 1
For m = 1 To NbreCol
LigneOK(i) = False
If LCase(V(i, m)) Like S Then
LigneOK(i) = True
Nbr = Nbr + 1
Exit For
End If
Next m
Next i
If Nbr = 0 Then Exit Sub
ReDim L(0 To Nbr - 1, 0 To NbreCol - 1)
Nbr = -1
For i = 1 To Lmax - 1
If LigneOK(i) Then
Nbr = Nbr + 1
For k = 0 To NbreCol - 1
L(Nbr, k) = V(i, k + 1)
Next k
End If
Next i
ListBox2.List = L
End If
End Sub
J'espère ne pas me tromper d'erreur.
Salut KTM le fil...
Dis moi quand tu dis un soucis se présente tu parles de l'erreur sur ListBox2.Clear ? Si c'est ça c'est normal dans UserForm_Initialise tu as mis :
Private Sub UserForm_Initialize() Dim dl As Long dl = Sheets("Grille_de_Dispensation").Range("A" & Rows.Count).End(xlUp).Row With Sheets("Grille_de_Dispensation").[A1].CurrentRegion.Resize(dl, 11) ListBox2.ColumnCount = .Columns.Count If .Rows.Count > 1 Then ListBox2.RowSource = .Rows(2).Resize(.Rows.Count - 1).Address End With End Sub
Tu attibue donc une valeur à RowSource et tu ne peux pas faire un .Clear. tu dois changer ton code comme ceci en effaçant le .RowSource
Private Sub TextBox6_Change() Dim S As String, i As Long, Lmax As Long, Nbr As Long, k As Long, NbreCol As Integer Dim L, V, LigneOK, m As Long NbreCol = 11 If TextBox6 = "" Then Dim xRg As Range Set xRg = Range(Range("A2"), Range("A" & Rows.Count).End(xlUp).Offset(, 10)) ListBox2.ColumnHeads = False ListBox2.List = xRg.Value Else ListBox2.RowSource = "" Lmax = Range("A" & Rows.Count).End(xlUp).Row V = Range(Range("A2"), Cells(Lmax, NbreCol)).Value ReDim LigneOK(1 To Lmax - 1) S = "*" & LCase(TextBox6) & "*" For i = 1 To Lmax - 1 For m = 1 To NbreCol LigneOK(i) = False If LCase(V(i, m)) Like S Then LigneOK(i) = True Nbr = Nbr + 1 Exit For End If Next m Next i If Nbr = 0 Then Exit Sub ReDim L(0 To Nbr - 1, 0 To NbreCol - 1) Nbr = -1 For i = 1 To Lmax - 1 If LigneOK(i) Then Nbr = Nbr + 1 For k = 0 To NbreCol - 1 L(Nbr, k) = V(i, k + 1) Next k End If Next i ListBox2.List = L End If End Sub
J'espère ne pas me tromper d'erreur.
MERCI
JEAN PAUL c'est très juste