cerhu > microsoft.* > microsoft.excel

stefdestroy (31/03/2015, 09h09)
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
DanielCo (31/03/2015, 12h54)
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
[..]
MichD (31/03/2015, 13h08)
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 :
[..]
tu obtiendras les diverses chaînes de connexion possible pour te connecter à une base de données.
stefdestroy (31/03/2015, 17h17)
Bonjour et merci à tous les 2, j'ai pu faire quelques tests supplémentaires :-)

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 fichierd'informations du groupe de traail est absent ou ouvert en mode exclusif par un autre utilisateur"). Je passe juste le chemin de ma base et un scripten select.

Dans mon Excel 2013 64 bits, j'ai une erreur pour les trois méthodes, surle "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écifié"
méthode 2 : "Impossible d'ouvrir une base de données créée avec uneversion antérieure de votre application".

Je vais faire quand même les mêmes tests sur un Excel 32 bits pour voirce que cela me donne. Depuis le temps que je râle en interne quand je vois 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(intColIndex).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)};Dbq=" & 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(intColIndex).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 & """;Password=""" & Pwd & """"
sConnString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & MonCHEMINBase & ";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(intColIndex).Name
Next
.[A2].CopyFromRecordset oRec
Application.GoTo .[A1]
End With
oRec.Close
stefdestroy (01/04/2015, 14h35)
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(intColIndex).Name
Next
.[A2].CopyFromRecordset oRec
Application.GoTo .[A1]
End With
oRec.Close
Discussions similaires
Requête doublon Access 2013

Excel 2013 - Souci avec les barres de menus persos

[VBA] Blocage à la copie d'une feuille avec Excel 2013

Affichage du zéro avec Excel 2013


Fuseau horaire GMT +2. Il est actuellement 09h31. | Privacy Policy