Erreur 'Type mismatch' + Copie range vers listbox
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:
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:
OutputSource = OFFSET(EMPLOYES!$A$1;0;0;COUNTA(EMPLOYES!$A:$A);19)
Le code que j'utilise est:
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
Slt Jonathan,
sans fichiers exemples c‘est dur dur pour t‘aider
Salut m3ellem1,
Malheureusement je n'ai pas le droit de publier le fichier en ligne mais je me suis arrangé pour mettre l'entièreté du code dans la question
N'est-il possible de déceler le problème en analysant simplement les codes ci-haut?
Merci d'avance