[Excel 2007] ADODB et objet devenu "invisible"
Salut,
Premier message ici mais je me suis pas mal aidé de vos posts précédemment sur d'autres choses en VBA
Voici le topo : je vais chercher des valeurs dans un classeur via ADODB, mais Excel ne semble pas voir un objet créé précédemment.
Le code marche sur quinze autres classeurs identiques, j'ai même recopié la structure d'un des Sub "sain", j'ai viré tout chiffre/caractère accentué des noms de fichiers sans plus de succès. Tous les classeurs sont dans le même dossier, excluant ainsi un souci d'adresse.
Les adresses des classeurs sont regroupées au sein d'un fichier .ini
Ci-joint le code et le screenshot du message d'erreur qui a lieu sur la ligne Set oRst = oCnct.Execute(texte_SQL)
Sub Requete_TRIDIMDIMPREMIERES()
Dim oCnct As ADODB.Connection
Dim oRst As ADODB.Recordset
Dim strWorkbookFilename As String
Dim strSheetName As String, SQLStatement As String
Dim premieresdim As String
premieresdim = LireIni("suivi_charge", "tridimdimpremiere_name")
' Connexion au fichier où aller chercher les données
strWorkbookFilename = premieresdim
strSheetName = "CQ-TRIDIM_DIMPREMIERES"
Set oCnct = New ADODB.Connection
With oCnct
.Provider = "Microsoft.ACE.OLEDB.12.0"
.ConnectionString = "Data Source=" & strWorkbookFilename & ";" & "Extended Properties=""Excel 12.0;HDR=NO"";"
.Open
End With
' On prend les données de la page voulue
texte_SQL = "SELECT * FROM [CQ-TRIDIM_DIMPREMIERES$]"
Set oRst = New ADODB.Recordset
Set oRst = oCnct.Execute(texte_SQL)
Sheets("CQ-TRIDIM_DIMPREMIERES").Select
'on colle les données dans ce fichier
ActiveSheet.Range("A1").CopyFromRecordset oRst
ActiveSheet.Range("B1:B2").Value = ActiveSheet.Range("AF15:AF16").Value 'recopie des nom de service et chef de service dans le tableau
ActiveSheet.Range("AF15:AF16").Clear 'nettoyage
'on ferme
oRst.Close
oCnct.Close
Set oRst = Nothing
Set oCnct = Nothing
Set strtSheetName = Nothing
Set WorkbookFilename = Nothing
End Sub
Merci d'avance pour l'aide que vous pourrez m'apporter !
Petit up, j'espère que ça attirera plus l'attention
Bonjour Kit,
La méthode .execute est à réserver pour les INSERT, UPDATE ou DELETE.
Pour un SELECT, j'écrirai plutôt :
'...
Set oRst = New ADODB.Recordset
oRst.open texte_SQL, oCnct, adOpenStatic
Sheets("CQ-TRIDIM_DIMPREMIERES").Range("A1").CopyFromRecordset oRst
'...
Pierre
Bonjour Pierre et merci pour ta réponse.
Je viens de tester ton code mais j'échoue de la même manière (même code erreur) sur la ligne
oRst.Open texte_SQL, oCnct, adOpenStatic
J'ai bien revérifié mes noms de feuilles, fichiers et adresses au sein du fichier ini, j'ai même tout recopié/collé par sécurité mais sans succès.
Je prend néanmoins ta remarque en compte pour mes autres feuilles, ça fera autant de Select d'économisés.
Edith : Après avoir tout repris par le début... l'erreur venait de moi !
Merci beaucoup pour l'astuce en tout cas.