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








Répondre avec citation
Partager