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

10 réponses

1 2
Avatar
MichDenis
Bonjour HD,

As-tu essayé de remplacer la propriété .sql par .CommandText

.Sql = "SELECT lignes.*;"

Par
Tu déclares Requete comme variable
Dim Requete as String

Tu définis la chaîne SQL de ta requete
Requete = "Select * From NomDeLaTable"

Et tu remplaces la propriété .Sql par ceci. (sauf si tu as excel 97... conserve .SQL mais redéfinis ta requête.
.CommandText = Requete

P.S. il est aussi curieux que la propriété ".name" soit absente de la liste des propriétés définis par ta procédure si
tu as utilisé l'enregistreur de macro. !!!


Salutations!




"HD" a écrit dans le message de news: %23xd9L$
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%;FIL=MS
Access;MaxBufferSize92;PageTimeoutP00;PWD=tes" _
), Array("t99;UID­min;")), Destination:=Range("A1"))
.Sql = "SELECT lignes.*;"
.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

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:úlse " qui se met en erreur...

Avez vous une idée du problème ?

Merci d'avance pour votre aide.
--
@+
HD
Avatar
HD
Bonjour HD,
Bonjour MichDenis,


Et tu remplaces la propriété .Sql par ceci.
(sauf si tu as excel 97... conserve .SQL mais
redéfinis ta requête. .CommandText = Requete
... Je travaille justement encore sur un bon vieux Excel 97 avec un bon

vieux Windows 98...

--
@+
HD

Avatar
MichDenis
Bonjour HD,

As-tu simplement essayé de remplacé le texte de la requete .SQL

.SQL = requete

comme dans l'exemple mentionné.


Salutations!


"HD" a écrit dans le message de news: u5zg5c%
Bonjour HD,
Bonjour MichDenis,


Et tu remplaces la propriété .Sql par ceci.
(sauf si tu as excel 97... conserve .SQL mais
redéfinis ta requête. .CommandText = Requete
... Je travaille justement encore sur un bon vieux Excel 97 avec un bon

vieux Windows 98...

--
@+
HD

Avatar
MichDenis
Bonjour HD,

Si tu utilises un bouton de commande, met cette propriété : TakeFocusOn à False


Salutations!



"HD" a écrit dans le message de news: d0kd24$156v$
As-tu simplement essayé de remplacé le texte de la requete .SQL
.SQL = requete
comme dans l'exemple mentionné.


Oui mais rien n'y fait... : ((

En manuel tout fonctionne... Mais dès que je lance la macro enregistrée là
ça plante.

Par contre ce qui est bizarre c'est que j'ai 2 fois la sélection d'une base
de donnée.... La 1ere fois je la sélectionne et il me demande le mot de
passe, puis il me redemande aussitôt la sélection d'une base de donnée et il
me faut resélectionner la même...

--
@+
HD

Avatar
Thierry Euzenot
"HD" a écrit dans le message de
news:u5zg5c%
Bonjour HD,
Bonjour MichDenis,


Et tu remplaces la propriété .Sql par ceci.
(sauf si tu as excel 97... conserve .SQL mais
redéfinis ta requête. .CommandText = Requete
... Je travaille justement encore sur un bon vieux Excel 97 avec un bon

vieux Windows 98...

--
@+
HD


Bonjour,

J'utilise très fréquemment des bases Acces via Excel VBA et voilà comment je
me connecte :

'Définit le nom de la connexion
Public Conn As ADODB.Connection

Sub OuvrirConnexionVersBaseDeDonnées()
'Procédure de connexion à la BDD

Chemin = Feuil1.Range("B3") & Feuil1.Range("B4")

On Error Resume Next
Set Conn = New ADODB.Connection
With Conn
' Définition du fournisseur OleDB pour la connexion
.Provider = "Microsoft.JET.OLEDB.4.0"
' Ouverture d'une connexion vers art_st2e.mdb
.Open Chemin
End With
If Err <> 0 Then
Message = MsgBox("Erreur N°" & Err.Number & " : " & Err.Description)
Exit Sub
End If

End Sub

Si tu es intéressé j'ai un classeur "exemple" incluant un code pour lire
dans la base, un autre pour écrire dans la base, un autre pour lister les
champs d'une table et un dernier pour effacer les données de la base.
Maile moi si tu veux que je te l'envois :o)
(Remplacer _arobase_ par @ pour l'adresse mail)


Avatar
HD
As-tu simplement essayé de remplacé le texte de la requete .SQL
.SQL = requete
comme dans l'exemple mentionné.


Oui mais rien n'y fait... : ((

En manuel tout fonctionne... Mais dès que je lance la macro enregistrée là
ça plante.

Par contre ce qui est bizarre c'est que j'ai 2 fois la sélection d'une base
de donnée.... La 1ere fois je la sélectionne et il me demande le mot de
passe, puis il me redemande aussitôt la sélection d'une base de donnée et il
me faut resélectionner la même...

--
@+
HD

Avatar
HD
Je lance simplement la macro en passant par 'Outils / Macro / Macros'.

Je viens de faire un test sur un poste Windows XP Pro avec Excel 2003 et
j'ai le même problème. L'import des données fonctionne en manuel mais dès
que je lance la macro enregistrée lors de cet import manuel j'ai le message
d'erreur...
--
@+
HD
Avatar
HD
'Définit le nom de la connexion
Public Conn As ADODB.Connection


J'ai un message "Type défini par l'utilisateur non défini" sur cette
ligne... Il doit me manquer une référence à intégrere dans Excel...
--
@+
HD

Avatar
Thierry Euzenot
Hum, je travaille sur Excel 2003... il se peut effectivement que les
commandes soient différentes :o/

Notamment au niveau du Provider qui doit être le Microsoft.JET.OLEDB.3.51
(de mémoire)... sous réserve que Excel 97 gère l'ADO, sinon il faudra faire
la manip en DAO... ou autre ^_^

J'ai un lien qui devrait faire ton bonheur :
http://drq.developpez.com/vb/tutoriels/ADO/Chapitre2/

Bon courage !!!!


"HD" a écrit dans le message de
news:eji8a6%
'Définit le nom de la connexion
Public Conn As ADODB.Connection


J'ai un message "Type défini par l'utilisateur non défini" sur cette
ligne... Il doit me manquer une référence à intégrere dans Excel...
--
@+
HD





Avatar
HD
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
1 2