Filtrer une listbox depuis une textbox
Bonjour à toutes et tous!
Je dispose d'une Base de données Accès contenant des informations de format varié : (reférence unique/ texte / dates / nombres) afin d'effectuer un suivi de dossier.
j'ai développé une feuille de création de nouveau dossier dans Excel me permettant d'ajouter/Mettre à jour la base de donnée Accès.
J'utilise une connexion ADODB pour ajouter de nouvelles entrée et tout fonctionne parfaitement bien.
Mon Objectif:
#1 Alimenter une listbox dans Excel contenant la base de donnée Accès afin de filter sur le dossier par mot clef
#2 Effectuer une recherche intuitive dans une textbox afin de retrouver le dossier désiré
#3 Refléter le contenu de la ligne selectionnée de la listbox dans la feuille du classeur contenant la macro.
Etat d'avancement:
La Listbox est alimentée par les bonnes infos.
Mais lors d'une recherche dans la textbox, une erreur apparait lorsque la recherche rencontre une cellule vide (NULL).
Run-Time error '-2147352571 (80020005)':
Could not set the list property. Type mismatch
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45
|
Dim Liste()
Private Sub UserForm_Initialize()
Set cnn = New ADODB.Connection
cnn.Open "Driver={Microsoft Access Driver (*.mdb, *.accdb)};DBQ=G:\BaseAccess.accdb"
Set rs = cnn.Execute("SELECT count(*) as nb FROM [TABLE4]' where ID<>0")
ReDim Liste(0 To rs("nb"), 1 To 10)
Set rs = cnn.Execute("SELECT * FROM [TABLE4]' where ID<> 0")
Me.ListBox1.Clear
i = 0
Do While Not rs.EOF
On Error Resume Next
ListBox1.AddItem
Liste(i, 1) = rs("ID")
Liste(i, 2) = rs("1")
Liste(i, 3) = rs("2")
Liste(i, 4) = rs("3")
Liste(i, 5) = rs("4")
Liste(i, 6) = rs("5")
Liste(i, 7) = rs("6")
Liste(i, 8) = rs("7")
Liste(i, 9) = rs("8")
Liste(i, 10) = rs("9")
On Error GoTo 0
i = i + 1
rs.MoveNext
Loop
With Me.ListBox1
.ColumnWidths = "50;90;90;50;60;60;60;60;60;60"
.List = Liste
End With
rs.Close
cnn.Close
Set rs = Nothing
Set cnn = Nothing
Liste = Me.ListBox1.List
End Sub |
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
|
Private Sub TextBox1_Change()
Me.ListBox1.Clear
j = 0
For i = LBound(Liste) To UBound(Liste)
If UCase(Liste(i, 0)) Like "*" & UCase(Me.TextBox1) & "*" _
Or "*" & UCase(Liste(i, 1)) Like "*" & UCase(Me.TextBox1) & "*" Then
On Error GoTo 0
Me.ListBox1.AddItem Liste(i, 0)
Me.ListBox1.List(j, 1) = Liste(i, 1) 'l erreur apparait dans l'une de ces lignes lorsque la valeur recherchée rencontre une cellule vide de la base de donnée Access
Me.ListBox1.List(j, 2) = Liste(i, 2) 'l erreur apparait dans l'une de ces lignes lorsque la valeur recherchée rencontre une cellule vide de la base de donnée Access
Me.ListBox1.List(j, 3) = Liste(i, 3) 'l erreur apparait dans l'une de ces lignes lorsque la valeur recherchée rencontre une cellule vide de la base de donnée Access
Me.ListBox1.List(j, 4) = Liste(i, 4) 'l erreur apparait dans l'une de ces lignes lorsque la valeur recherchée rencontre une cellule vide de la base de donnée Access
Me.ListBox1.List(j, 5) = Liste(i, 5) 'l erreur apparait dans l'une de ces lignes lorsque la valeur recherchée rencontre une cellule vide de la base de donnée Access
Me.ListBox1.List(j, 6) = Liste(i, 6) 'l erreur apparait dans l'une de ces lignes lorsque la valeur recherchée rencontre une cellule vide de la base de donnée Access
Me.ListBox1.List(j, 7) = Liste(i, 7) 'l erreur apparait dans l'une de ces lignes lorsque la valeur recherchée rencontre une cellule vide de la base de donnée Access
Me.ListBox1.List(j, 8) = Liste(i, 8) 'l erreur apparait dans l'une de ces lignes lorsque la valeur recherchée rencontre une cellule vide de la base de donnée Access
Me.ListBox1.List(j, 9) = Liste(i, 9) 'l erreur apparait dans l'une de ces lignes lorsque la valeur recherchée rencontre une cellule vide de la base de donnée Access
On Error GoTo 0
j = j + 1
End If
Next i
End Sub |
J'ai essayé par traitement d'erreur (On error resume next ) (on error goto 0) mais cela ne fonctionne pas.
La solution consistant à remplir chacun des champs vide de la Base Access n'est pas viable bien entendu :)
Auriez vous la compétence et l'amabilité de m'indiquer comment modifier le code?
Merci d'avance!
Mandra