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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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
Partager