Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

VBA. Pb accès à une base Access

15 réponses
Avatar
HD
Bonjour,

J'ai fait cette macro en enregistrant l'accès aux données manuel :

With ActiveSheet.QueryTables.Add(Connection:=Array(Array( _
"ODBC;DSN=MS Access
Database;DBQ=c:\perso.mdb;DefaultDir=c:;DriverId=25;FIL=MS
Access;MaxBufferSize=8192;PageTimeout=5000;PWD=tes" _
), Array("t99;UID=admin;")), Destination:=Range("A1"))
.Sql = "SELECT lignes.*;"
.FieldNames = True
.RefreshStyle = xlInsertDeleteCells
.RowNumbers = False
.FillAdjacentFormulas = False
.RefreshOnFileOpen = False
.HasAutoFormat = True
.BackgroundQuery = True
.TablesOnlyFromHTML = True
.Refresh BackgroundQuery:=False
.SavePassword = True
.SaveData = True
End With

Mais j'ai constamment un message d'erreur au déclenchement... J'ai le
message "Erreur d'exécution '1004': Erreur générale ODBC" et j'ai la ligne
" .Refresh BackgroundQuery:=False " qui se met en erreur...

Avez vous une idée du problème ?

Merci d'avance pour votre aide.
--
@+
HD

5 réponses

1 2
Avatar
HD
En fait à la création de la macro voila ce que j'obtiens (voir ci-dessous).
A priori Excel ne peut pas reprendre toutes les infos d'un seul bloc (ce qui
explique les Array) et il me faut travailler la ligne .SQL car elle apparait
en rouge.... Excel ne peut pas prendre en compte toutes les données... Je
change alors la ligne .SQL en .sql = "SELECT tabl1.* ;"

With ActiveSheet.QueryTables.Add(Connection:=Array(Array( _
"ODBC;DSN=MS Access
Database;DBQ=c:perso.mdb;DefaultDir=c:;DriverId%;FIL=MS
Access;MaxBufferSize92;PageTimeoutP00;PWD=mon" _
), Array("motdepasse;UID­min;")), Destination:=Range("A1"))
.Sql = Array( _
"SELECT tabl1.s_numLigBul, tabl1.s_idEtb, tabl1.s_idSrv, tabl1.s_section,
tabl1.s_idSal, tabl1.s_nomSalarie, tabl1.s_num, tabl1.s_dteDebut,
tabl1.s_dteFin, tabl1.s_dtePaiement, tabl1.s_class" _
, _
"eRef, tabl1.s_codeRub, tabl1.s_iterationRub, tabl1.s_numOrdre,
tabl1.s_nomRub, tabl1.s_libelle, tabl1.s_libelle_C, tabl1.s_libelle_F,
tabl1.s_libelle2, tabl1.s_baseRub, tabl1.s_baseRub_C, li" _
, _
"gnes.s_baseRub_F, tabl1.s_txS, tabl1.s_txS_C, tabl1.s_txS_F,
tabl1.s_oui_imp_txS, tabl1.s_mtS, tabl1.s_mtS_C, tabl1.s_mtS_F, tabl1.s_txP,
tabl1.s_txP_C, tabl1.s_txP_F, tabl1.s_mtP, tabl1.s" _
, _
"_mtP_C, tabl1.s_mtP_F, tabl1.s_brutSoumisRub, tabl1.s_plafondAppliqueRub,
tabl1.s_nbrH, tabl1.s_typeRub, tabl1.s_codeGroupe, tabl1.s_codeLigne,
tabl1.s_typeCaisse, tabl1.s_GICaisse, tabl1.s_" _
, _
"NICaisse, tabl1.s_codeCaisse, tabl1.s_codeDucs, tabl1.s_codeCategorie,
tabl1.s_tauxAT, tabl1.s_cpt1, tabl1.s_cpt2, tabl1.s_oui_pourBulletin,
tabl1.s_oui_pourEtat, tabl1.s_nonImpression, ligne" _
,)
.FieldNames = True
.RefreshStyle = xlInsertDeleteCells
.RowNumbers = False
.FillAdjacentFormulas = False
.RefreshOnFileOpen = False
.HasAutoFormat = True
.BackgroundQuery = True
.TablesOnlyFromHTML = True
.Refresh BackgroundQuery:úlse
.SavePassword = True
.SaveData = True
End With




--
@+
HD
Avatar
HD
en .sql = "SELECT tabl1.* ;"


Je viens de me rendre compte de mon erreur... La ligne .sql doit être :

.Sql = "SELECT tabl1.* FROM `c:perso`.tabl1;"

Ce qui fonctionne effectivement mieux... Excel m'a " bouffé " la moitié de
la ligne dû au fait qu'il est limité dans les Array...

--
@+
HD

Avatar
Thierry Euzenot
Hum, es-tu certain d'avoir besoin d'un mot de passe pour entrer dans la base
??? Moi je n'ai jamais eu à en utiliser un, mais bon, faut dire que mon
application n'a qu'un usage local...

Sinon, côté code, pourquoi pas faire comme indiqué dans l'exemple fourni :
----------------------------------------------------
'Déclaration de la variable de connexion
Dim cnx As ADODB.Connection
Set cnx = New ADODB.Connection

'Définition du pilote de connexion
cnx.Provider = "Microsoft.Jet.Oledb.3.51"
'Définition de la chaîne de connexion
cnx.ConnectionString = "C:maBase.mdb"
'Ouverture de la base de données
cnx.Open
----------------------------------------------------
Ca me paraît le plus simple, non ?

Sinon, dans la fonction que tu mets, j'ai un doute sur l'intitulé du driver
Microsoft Access Driver (*.mdb)
J'aurais tendance à mettre
Microsoft Access Driver
Sans les trucs entre parenthèse, mais je peux me tromper...

"HD" a écrit dans le message de
news:eV8wpG$

J'ai encore un message comme quoi le mot de passe ne serait pas valide...
alors que c'est bien avec celui ci que j'accède manuellement à la bdd...
Voici le bout de mon code qui devrait permettre la connection :

With Conn
.Provider = "Microsoft.JET.OLEDB.4.0"
.ConnectionString = "Driver={Microsoft Access Driver
(*.mdb)};UID­min;PWD=monmotdepasse;"
.Open chemin
End With

--
@+
HD




Avatar
HD
Sinon, côté code, pourquoi pas faire comme indiqué dans l'exemple
fourni : ----------------------------------------------------
'Déclaration de la variable de connexion
Dim cnx As ADODB.Connection
Set cnx = New ADODB.Connection

'Définition du pilote de connexion
cnx.Provider = "Microsoft.Jet.Oledb.3.51"
'Définition de la chaîne de connexion
cnx.ConnectionString = "C:maBase.mdb"
'Ouverture de la base de données
cnx.Open
----------------------------------------------------
Ca me paraît le plus simple, non ?


J'ai systèmatiquement un message d'erreur...
" Erreur N°-2147217843 : Mot de passe non valide "
--
@+
HD

Avatar
Clément Marcotte
Bonjour,

sous réserve que Excel 97 gère l'ADO


Oui, mais d'une façon différente des versions plus récentes.

UN exemple "comparé" là:

http://support.microsoft.com/default.aspx?scid=kb;fr;246335

1 2