Bonjour,

Je crée un formulaire avec VBA que je connecte avec une DB access, en permettant d'insérer les données d'employés du formulaire directement sur la DB access. Je recontre cependant deux problèmes:

Lookup Matricule existant

Lorsque j'insère les données employés vers la table Employé dans access, je donne la possibilité de spécifier le matricule du manager de la personne mais ce matricule doit déjà exister dans la table access EMPLOYE. Voici le code que j'utilise:

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
Private sub creer_click ()
Dim conn as object
Dim rs as Object
Dim strconn as String
Dim qry as String
Dim msg
 
Set conn = createobject("ADODB.connection")
set rs = createobject("ADODB.recordset")
 
strconn = "Provider=Microsoft.ACE.OLEDB.12.0;" & "Data source = C:\MyPath\MyDB.accdb"
qry = "select * from employesTB"
 
with rs
.adnew
if isnumeric(superviseurID) = false then
msgbox "Superviseur ID invalide"
exit sub
elseif application.worksheetfunction.dcount("matricule","employesTB","actif='Yes' and matricule='"  & [EmployesForm.superviseurID] & "'") = 0 then
msgbox "Superviseur n'existe pas"
exit sub
else 
. fields("superviseur_id").value = superviseurID
end if
end with
 
rs.update
with employes
.superviseurID.value = ""
rs.close
set rs = nothing
conn.close
set conn = nothing
 
msgbox "Collaborateur rajouté"
end sub ()
l'éxécution de ce code me ramène une erreur 'Type mismatch'. J'ai fait le tour du web et je comprends que cela pourrait venir du fait que le champ superviseurID du formulaire est un textbox (donc de type string je suppose) tandis que le champ Superviseur_ID de la table Access est un nombre. J'ai tenté toutes les modifications trouvées sur le net mais cela ne marche pas, d'où mon désarroi :'(. Aide svp...

Copie des donées d'une range vers une liste box

Sur le même formulaire, j'ai crée une listbox sur lequel je veux copié le résultat d'une recherche. Le processus que j'ai établi est que je copie les données présentes dans la table Access vers une feuille excel dans la dynamique range 'OutputSource' dont la formule est:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
 OutputSource = OFFSET(EMPLOYES!$A$1;0;0;COUNTA(EMPLOYES!$A:$A);19)
Le code que j'utilise est:

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
46
47
Private sub recherche_click ()
Dim conn as object
Dim rs as Object
Dim strconn as String
Dim qry as String
Dim var1
 
Set conn = createobject("ADODB.connection")
set rs = createobject("ADODB.recordset")
 
strconn = "Provider=Microsoft.ACE.OLEDB.12.0;" & "Data source = C:\MyPath\MyDB.accdb"
 
var1 = me.matricule
 
if actif = true then
qry = "select * from employesTB where actif = 'Yes' and matricule =" & var1
else 
qry = "select * from employesTB where  matricule =" & var1
end if
 
application.Screenupdating = false
thisworkbook.worksheets("employes").range("a2:s10000").clearcontents
 
conn.open(strconn)
rs.open qry, conn
 
if rs.eof and rs.bof then
rs.close
conn.close
set rs = nothing
set conn= nothing
application.Screenupdating = true
msgbox "aucun résultat"
exit sub
end if
thisworkbook.worksheets("employes").range("a2").copyfromrecordset rs
 
rs.close
conn.close
set rs = nothing
set conn = nothing
 
application.screenupdating = true
 
me.listbox1.rowsources = "OutputSource"
 
end sub
Le code ne ramène aucune erreur mais le problème est que le résultat de la recherche dans la listbox ne fait appraître que la première colonne et pourtant j'ai bien vérifié que le range "OutputSource" était bien établi.

Petite aide sur ce point-ci également

Merci d'avance