hibatallahmessadine
Messages postés13Date d'inscriptionvendredi 18 mars 2011StatutMembreDernière intervention20 mai 2011
-
23 avril 2011 à 11:19
hibatallahmessadine
Messages postés13Date d'inscriptionvendredi 18 mars 2011StatutMembreDernière intervention20 mai 2011
-
20 mai 2011 à 08:43
Salut,
j'ai tapé ce code pour faire l'importation du fichier excel je suis besoin de ton aide il ne s’exécute pas (erreur: type mismache)
form1
Public ClasseurXLS As Object
Dim File As String
Private Sub importer_Click()
Call ConnectBD
Set ClasseurXLS = CreateObject("Excel.application")
'Ouverture du classeur d'importation
ClasseurXLS.Workbooks.Open File
'Fermeture du classeur d'importation
ClasseurXLS.Workbooks.Close
MsgBox ("Importation des données effectuée")
End Sub
Private Sub parcourir_Click()
'Chargement du ficher Excel
CommonDialog1.DialogTitle = "Ouvrir"
CommonDialog1.Filter = "Classeur (*.xls)|*.XLS"
CommonDialog1.InitDir = "c:"
CommonDialog1.ShowOpen
File = CommonDialog1.FileName
nom_excel.Text = File
End Sub
Module:
Option Explicit
Public bd As Database
Public util As Recordset
Function ConnectBD()
'Connexion à la base
Set bd = OpenDatabase(App.Path & "\Basedonnée.pfe.mdb")
Set util = bd.OpenRecordset("impor_excel", dbOpenDynaset) (ici l'erreur)
End Function
nb:ma base contient plusieurs table parmis ses table le table "impor_excel"
Merci de m'aider.
cordialement
A voir également:
[Catégorie modifiée .Net -> VBA] urgent je voulais l'aide le plus vite possible
4u4me4us
Messages postés780Date d'inscriptionlundi 22 janvier 2007StatutMembreDernière intervention30 octobre 20133 26 avril 2011 à 11:20
Si j'ai bien compris tu veux importer t donné xls dans une base de donnée existante.?
Si j'ai bien compris le problème te tout bête. Toute les cellule xls sont des string et il doit y avoir un champs dans ta table qui n'est pas un string. Donc il est logique que tu aie le message "erreur: type mismache". Plusieurs solution possibles.
1) tu change tout t champs des tables en string.
2) tu repère la/les cellules qui non sont pas string et tu converti la valeur de la cellule xls en en bon type
exemple util!Dichtung_1_Bez cint(ClasseurXLS.cells(i, 8)) si Dichtung_1_Bez et un int ou util!Dichtung_1_Bez clng(ClasseurXLS.cells(i, 8)) si Dichtung_1_Bez et un long etc.
4u4me4us
Messages postés780Date d'inscriptionlundi 22 janvier 2007StatutMembreDernière intervention30 octobre 20133 27 avril 2011 à 10:25
Je me mêle peut être de ce qui ne me regarde pas mais appeler sa DB ".pfe.mdb" c un péché.
Bref remplace
Set bd = OpenDatabase(App.Path & "\Basedonnée.pfe.mdb")
Set util = bd.OpenRecordset("impor_excel", dbOpenDynaset
par
Set bd = OpenDatabase(App.Path & "\Basedonnée.pfe.mdb",dbOpenDynaset)
Set util = bd.OpenRecordset("SELECT * FROM impor_excel")
ou
Set bd = OpenDatabase(App.Path & "\Basedonnée.pfe.mdb",false,dbOpenDynaset)
Set util = bd.OpenRecordset("SELECT * FROM impor_excel")
Ok ou
Set bd = OpenDatabase(App.Path & "\Basedonnée.pfe.mdb",false,false)
Set util = bd.OpenRecordset("SELECT * FROM impor_excel")
Remarque dbOpenDynaset, n'est pas l'idéale si tu veux avoir plusieurs utilisateurs. tourne toi plus tot sur dbopenstatic bref resienge toir sur les mode d'ouvertures
hibatallahmessadine
Messages postés13Date d'inscriptionvendredi 18 mars 2011StatutMembreDernière intervention20 mai 2011 27 avril 2011 à 04:08
Merci pour votre attention.
l'erreur est type mismatch dans cette balise
Set util = bd.OpenRecordset("impor_excel", dbOpenDynaset)
Les champs dans Access sont tout des string.
cordialement
Vous n’avez pas trouvé la réponse que vous recherchez ?
hibatallahmessadine
Messages postés13Date d'inscriptionvendredi 18 mars 2011StatutMembreDernière intervention20 mai 2011 27 avril 2011 à 17:18
Merci pour votre attention .
Il devient l'erreur dans la ligne qui suit dans la form non dans le Module
form1
Public ClasseurXLS As Object
Dim File As String
Private Sub importer_Click()
Call ConnectBD
Set ClasseurXLS = CreateObject("Excel.application")
'Ouverture du classeur d'importation
ClasseurXLS.Workbooks.Open File
i = 2
Do While ClasseurXLS.cells(i, 1) <> ""
'Insertion des données dans la table
util.AddNew
util!Einzelressource = ClasseurXLS.cells(i, 1)
util!Resgrp = ClasseurXLS.cells(i, 2)
util!Resgrp_Bez = ClasseurXLS.cells(i, 3)
4u4me4us
Messages postés780Date d'inscriptionlundi 22 janvier 2007StatutMembreDernière intervention30 octobre 20133 27 avril 2011 à 22:05
Je pense que tu mis dans une fonction
Set bd = OpenDatabase(App.Path & "\Basedonnée.pfe.mdb",false,false)
Set util = bd.OpenRecordset("SELECT * FROM impor_excel")
et dans une autre fonction
util.AddNew
Si j'ai raison tu as plein de possibilité pour débugger.
Moi je v jute te donner la plus simple après je te laisse chercher (ou un autre t'aidera). Le plus simple et que tu mets dans la même fonction
Set bd = OpenDatabase(App.Path & "\Basedonnée.pfe.mdb",false,false)
Set util = bd.OpenRecordset("SELECT * FROM impor_excel")
util.AddNew
4u4me4us
Messages postés780Date d'inscriptionlundi 22 janvier 2007StatutMembreDernière intervention30 octobre 20133 28 avril 2011 à 10:08
Non! Non! Je ne voulais pas dire cela comme ça Juste te dire que si tu as mis les lignes sur deux fonctions diff (chose que je ne sais tjs) il y a x façon de corriger le tir. Mais il ne faut pas le prendre mâle Tu n'est pas (et de loin) la personne la plus désagréable du forum.
Allez on ce pardonne
Cherche un peut et donne nous de tes nouvelles plus tard si besoin
While Not Rs.EOF
Set ItemX = listoutil.ListItems.Add(, , Rs.Fields("ref_dish_leoni"))
ItemX.SubItems(1) = Rs.Fields("ref_dish_four")
ItemX.SubItems(2) = Rs.Fields("menge")
Rs.MoveNext
Wend
Call Deconnect
End Sub
4u4me4us
Messages postés780Date d'inscriptionlundi 22 janvier 2007StatutMembreDernière intervention30 octobre 20133 9 mai 2011 à 10:10
Teste cela :
Private Sub Refreche()
Set Db = Nothing
Set V_Rs= Nothing
Set Db = OpenDatabase(CHEMIN CLOMPLET DE LA DB, adOpenKeyset, adLockOptimistic )
Set Rs= Db.OpenRecordset("SELECT * FROM " & v_nomtab$)
While Not Rs.EOF
Set ItemX = listoutil.ListItems.Add(, , Rs.Fields("ref_dish_leoni"))
ItemX.SubItems(1) = Rs.Fields("ref_dish_four")
ItemX.SubItems(2) = Rs.Fields("menge")
Rs.MoveNext
Wend
Call Deconnect
End Sub
4u4me4us
Messages postés780Date d'inscriptionlundi 22 janvier 2007StatutMembreDernière intervention30 octobre 20133 11 mai 2011 à 15:29
Tant mieux si ça marche. J'ai remarque que tu pouvais avoir mieux. SELECT * sélectionne tout les champs alors que tu en utilise que deux. Donc le mieux c Set Rs= Db.OpenRecordset("SELECT ref_dish_four, menge FROM NOM_DE_LA_TABLE").
hibatallahmessadine
Messages postés13Date d'inscriptionvendredi 18 mars 2011StatutMembreDernière intervention20 mai 2011 18 mai 2011 à 18:35
slt, stp ce code faddadniii listo,listc,lists tout sont des listbox w c famil combobox ytala3li msg mise à jour effectuer sans une réel mise à jour
remarque les champs famil et ref_leonic sont des clé etrangére dans la table outil merciiiii.
Private Sub cmdvalidermodif_Click()
On Error Resume Next
'Verification du remplissage du raison sociel ou le nom du Fournisseur
Set cn = New ADODB.Connection
cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & App.Path & "\basedonnée.pfe.mdb;Jet OLEDB:Database"
Set rs1 = New ADODB.Recordset
rs1.Open "select num_outil,ref_leonic,segment from outil where famil like '" & Trim(cfamil) & "'", cn, 1, 2
'vérification de l'existance du Fournisseur
If rs1.EOF Then
MsgBox "cette famille n'existe pas", vbInformation
Exit Sub
End If
rs1!num_outil = Trim(Listo)
rs1!ref_leonic = Trim(Listc)
rs1!segment = Trim(Lists)
rs1.Update
MsgBox "Mise à jour Effectuée avec succèe.", vbInformation
rs1.close
Form_Load
cmdvalidermodif.Visible = False
End Sub