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

Excel 2013 ADO avec access 97

4 réponses
Avatar
stefdestroy
Bonjour =E0 tous,

Pour faciliter les t=E2ches avec nos clients, je fournissais auparavant un =
fichier Excel 2003/2007/2010 qui attaquait directement (sans export pr=E9al=
able de l'appli) via ADO nos progiciels en access, sql etc.
Or, depuis la version d'office 2013, il n'est pas possible ou il ne me semb=
le pas :-), par ado, de consulter des bases d'Access 97 (je sais c'est vieu=
x comme version mais pas le choix pour nos d=E9veloppeurs) : pb de fourniss=
eur.

Si jamais quelqu'un a une astuce de contournement, ou me confirme que je do=
is faire =E0 l'ancienne (export de l'appli source), merci d'avance.
Steph

Le code que j'utilise par d=E9faut :
Dim MaMDB$
Dim oRec As ADODB.Recordset
Dim MaConnexionBase$, MonScript$
Dim MonCHEMINBase$
Dim intColIndex#
Dim DerLig#, derCol#, i#
Dim NomF$
=20
'=3D=3D=3D PARAMETRES
NomF=3D"IMPORT"
MonCHEMINBase =3D [PARAMETRES_REQ!A1]
MaConnexionBase =3D "Driver=3D{Microsoft Access Driver (*.mdb, *.accdb)=
};Dbq=3D" & MonCHEMINBase & ";"
Set oRec =3D New ADODB.Recordset
MonScript =3D [PARAMETRES_REQ!A2]
oRec.Open MonScript, MaConnexionBase
With Sheets(NomF)
Application.GoTo .[A1]
For intColIndex =3D 0 To oRec.Fields.Count - 1
.[A1].Offset(0, intColIndex).Value =3D oRec.Fields(intColInde=
x).Name
Next
.[A2].CopyFromRecordset oRec
Application.GoTo .[A1]
End With

4 réponses

Avatar
DanielCo
Bonjour,
Je ne sais ce qu'il y a dans ton script mais apparemment le driver :
Microsoft.Jet.OLEDB.4.0 fonctionne.
(pas sûr que ma base soit une base Access 97 toutefois)
Cordialement.
Daniel


Bonjour à tous,

Pour faciliter les tâches avec nos clients, je fournissais auparavant un
fichier Excel 2003/2007/2010 qui attaquait directement (sans export préalable
de l'appli) via ADO nos progiciels en access, sql etc. Or, depuis la version
d'office 2013, il n'est pas possible ou il ne me semble pas :-), par ado, de
consulter des bases d'Access 97 (je sais c'est vieux comme version mais pas
le choix pour nos développeurs) : pb de fournisseur.

Si jamais quelqu'un a une astuce de contournement, ou me confirme que je dois
faire à l'ancienne (export de l'appli source), merci d'avance. Steph

Le code que j'utilise par défaut :
Dim MaMDB$
Dim oRec As ADODB.Recordset
Dim MaConnexionBase$, MonScript$
Dim MonCHEMINBase$
Dim intColIndex#
Dim DerLig#, derCol#, i#
Dim NomF$

'=== PARAMETRES
NomF="IMPORT"
MonCHEMINBase = [PARAMETRES_REQ!A1]
MaConnexionBase = "Driver={Microsoft Access Driver (*.mdb,
*.accdb)};Dbq=" & MonCHEMINBase & ";" Set oRec = New ADODB.Recordset
MonScript = [PARAMETRES_REQ!A2]
oRec.Open MonScript, MaConnexionBase
With Sheets(NomF)
Application.GoTo .[A1]
For intColIndex = 0 To oRec.Fields.Count - 1
.[A1].Offset(0, intColIndex).Value =
oRec.Fields(intColIndex).Name Next
.[A2].CopyFromRecordset oRec
Application.GoTo .[A1]
End With
Avatar
MichD
Bonjour,

À quel niveau as-tu un problème avec ta procédure avec Access 1997 ?
Qu'est-ce bloque? Une ligne de code en particulier?

Sur le site suivant :
http://www.carlprothman.net/Default.aspx?tabid
tu obtiendras les diverses chaînes de connexion possible pour te connecter à une base de données.
Avatar
stefdestroy
Bonjour et merci à tous les 2, j'ai pu faire quelques tests supplémenta ires :-)

Le but étant juste de pouvoir exécuter une requête simple par ADO de sélection avec access 97.

Dans mon Excel 2010 32 bits, les méthodes 1 et 2 suivantes fonctionnent, la troisième non ("impossible de démarrer votre application. Le fichier d'informations du groupe de traail est absent ou ouvert en mode exclusif p ar un autre utilisateur"). Je passe juste le chemin de ma base et un script en select.

Dans mon Excel 2013 64 bits, j'ai une erreur pour les trois méthodes, sur le "oRec.Open" (messages en deçà). J'ai fait le test sur plusieurs r éférences ADO sans succès.
méthode 1 : "Source de données introuvable et nom de pilote non spéci fié"
méthode 2 : "Impossible d'ouvrir une base de données créée avec une version antérieure de votre application".

Je vais faire quand même les mêmes tests sur un Excel 32 bits pour voir ce que cela me donne. Depuis le temps que je râle en interne quand je vo is que nous avons encore du Access 97 ...

Merci de m'avoir lu
Steph

'== METHODE 1
Dim oOleDbConnection As OLEDBConnection
Dim oRec As ADODB.Recordset
Dim sConnString As String
'
MonCHEMINBase = [PARAMETRES_REQ!A1]
User = "ADMIN"
Pwd = "TOTO"
NomF = "TEST1"
sConnString = "Provider=MSDASQL;" & _
"Driver={Microsoft Access Driver (*.mdb)};" & _
"Dbq=" & MonCHEMINBase & ";" & _
"Uid=" & User & ";" & _
"Pwd=" & Pwd
MonScript = [PARAMETRES_REQ!A2]
'
Set oRec = New ADODB.Recordset
oRec.Open MonScript, sConnString
'
On Error Resume Next: Sheets(NomF).Delete: On Error GoTo 0
Sheets.Add(after:=Sheets(Sheets.Count)).Name = NomF
With Sheets(NomF)
Application.GoTo .[A1]
For intColIndex = 0 To oRec.Fields.Count - 1
.[A1].Offset(0, intColIndex).Value = oRec.Fields(intColInde x).Name
Next
.[A2].CopyFromRecordset oRec
Application.GoTo .[A1]
End With
oRec.Close

'== METHODE 2
Dim oRec As ADODB.Recordset
Dim sConnString As String
'
MonCHEMINBase = [PARAMETRES_REQ!A1]
NomF = "TEST2"
sConnString = "Driver={Microsoft Access Driver (*.mdb, *.accdb)};Db q=" & MonCHEMINBase & ";"
MonScript = [PARAMETRES_REQ!A2]
'
Set oRec = New ADODB.Recordset
oRec.Open MonScript, sConnString
'
On Error Resume Next: Sheets(NomF).Delete: On Error GoTo 0
Sheets.Add(after:=Sheets(Sheets.Count)).Name = NomF
With Sheets(NomF)
Application.GoTo .[A1]
For intColIndex = 0 To oRec.Fields.Count - 1
.[A1].Offset(0, intColIndex).Value = oRec.Fields(intColInde x).Name
Next
.[A2].CopyFromRecordset oRec
Application.GoTo .[A1]
End With
oRec.Close

'== METHODE 3
Dim oRec As ADODB.Recordset
Dim sConnString As String
'
MonCHEMINBase = [PARAMETRES_REQ!A1]
NomF = "TEST3"
User = "ADMIN"
Pwd = "TOTO"
'sConnString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=""" & MonCHEMINBase & """;Mode=Share Exclusive;User ID=""" & User & """;Pas sword=""" & Pwd & """"
sConnString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & M onCHEMINBase & ";User ID=" & User & ";Password=" & Pwd & ";"
MonScript = [PARAMETRES_REQ!A2]
'
Set oRec = New ADODB.Recordset
oRec.Open MonScript, sConnString
'
On Error Resume Next: Sheets(NomF).Delete: On Error GoTo 0
Sheets.Add(after:=Sheets(Sheets.Count)).Name = NomF
With Sheets(NomF)
Application.GoTo .[A1]
For intColIndex = 0 To oRec.Fields.Count - 1
.[A1].Offset(0, intColIndex).Value = oRec.Fields(intColInde x).Name
Next
.[A2].CopyFromRecordset oRec
Application.GoTo .[A1]
End With
oRec.Close
Avatar
stefdestroy
Bonjour,

Tests effectués ce jour avec Excel 2013 32 bits : méthode 2 OK et la m éthode 4 en deçà OK (itou en 2010). J'ai donc assez de possibilités , pour l'instant, pour assurer la pérennité du truc :-)

Après quelques recherches, j'ai lu qu'il fallait éviter, dans certains cas, les versions 64 bits.

Bonne journée à tous
Steph

'== METHODE 4
Dim oRec As ADODB.Recordset
Dim sConnString As String
'
MonCHEMINBase = [PARAMETRES_REQ!A1]
NomF = "TEST4"
User = "ADMIN"
Pwd = "TOTO"
sConnString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & MonCHEMINBase & ";Jet OLEDB:Database Password=TOTO;"
MonScript = [PARAMETRES_REQ!A2]
'
Set oRec = New ADODB.Recordset
oRec.Open MonScript, sConnString
'
On Error Resume Next: Sheets(NomF).Delete: On Error GoTo 0
Sheets.Add(after:=Sheets(Sheets.Count)).Name = NomF
With Sheets(NomF)
Application.GoTo .[A1]
For intColIndex = 0 To oRec.Fields.Count - 1
.[A1].Offset(0, intColIndex).Value = oRec.Fields(intColInde x).Name
Next
.[A2].CopyFromRecordset oRec
Application.GoTo .[A1]
End With
oRec.Close