Erreur d'Exécution 9' : L'indice n'appartient pas à la selection

Résolu
Kayna.86 Messages postés 42 Date d'inscription   Statut Membre Dernière intervention   -  
Kayna.86 Messages postés 42 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,
Bonjour à tous,

Je me permets de solliciter votre aide une fois de plus. J'ai migré sur Office 2010 au bureau et depuis j'ai un code vba sur une base de donnée access qui ne fonctionne plus alors que le code fonctionnait/fonctionne très bien sur la version 2007 d'Access (j'ai refais le test avec une collègue qui est toujours sur la version 2007).
Le code en question me permet de transférer le résultat d'une requête sur excel.

Le message d'erreur qui s'affiche est le suivant: "Erreur d'Exécution 9' : L'indice n'appartient pas à la selection "
Je précise que j'ai bien coché les références nécessaires, soit : Microsoft Excel (Office et Access) 14.0 Object Library & Microsoft DAO 3.6 Object. Et je répète, le code fonctionne très bien sur Access 2007. Il y a vraiment quelque chose qui m'échappe.

J'ai tenté plein de solutuions en vain. Voici mon code d'origine et c'est la ligne:

"Set XLWSht = XLCreateWkb.Worksheets("Sheets1")" qui génère l'erreur.

Public Function SendTQ2Excel(strQName As String, Optional strSheetName As String)

Dim qdf As DAO.QueryDef
Dim dbs As DAO.Database
Dim rst As DAO.Recordset
Dim fld As DAO.Field
Dim XLWSht As Object
Dim XlApp As Object
Dim XLCreateWkb As Object
Dim XLActiveWkb As Object

Set dbs = CurrentDb()
Set rst = dbs.OpenRecordset(strQName)
Set XlApp = CreateObject("Excel.Application")
Set XLCreateWkb = XlApp.Workbooks.Add

Set XLWSht = XLCreateWkb.Worksheets("Sheet1")

XLWSht.Activate
XlApp.Visible = True


Quelqu'un a une idée?
Merci d'avance.

3 réponses

tessel75
 
Bonjour,
En recherchant dans le didacticiel de Access (F1) j'ai trouvé l'aide qui suit, si cela peut t'apporter quelque lumière?

"Si vous déclarez une variable d'objet avec la locution As Object, une variable contenant une référence à tout type objet est créée. Toutefois, l'accès à l'objet par l'intermédiaire de cette variable est effectué par une liaison tardive, c'est-à-dire que la liaison est créée lors de l'exécution de votre programme. Pour créer une variable objet qui entraîne une liaison précoce, c'est-à-dire une liaison au moment de la compilation du programme, déclarez la variable objet avec un identificateur de classe spécifique. Par exemple, vous pouvez déclarer et créer les références Microsoft Excel suivantes :

Dim xlApp As Excel.Application
Dim xlBook As Excel.Workbook
Dim xlSheet As Excel.WorkSheet
Set xlApp = CreateObject("Excel.Application")
Set xlBook = xlApp.Workbooks.Add
Set xlSheet = xlBook.Worksheets(1)
"

(Les guillemets sont de moi pour la citation)
2
Kayna.86 Messages postés 42 Date d'inscription   Statut Membre Dernière intervention   5
 
Bonjour Tessel,

Merci beaucoup pour la réponse ! Ca marche nickel! :)

Bonne journée
0
blux Messages postés 27121 Date d'inscription   Statut Modérateur Dernière intervention   3 359
 
Salut,

as-tu essayé 'sheet1.xls' ?

Sinon, tu peux peut-être essayer un docmd.transferspreadsheet...
0
Kayna.86 Messages postés 42 Date d'inscription   Statut Membre Dernière intervention   5
 
Salut Blux,

Merci de ta réponse. Malheureusement le "sheet1.xls' ne fonctionne pas non plus.

J'avais pensé au "docmd.transferspreadsheet...", mais l'inconvénient c'est qu'il faut définir le dossier qui contiendra le fichier, ainsi que le nom du fichier à l'avance.

Or je veux laisser aux différents utilisateurs de la base de données la liberté de choisir l'emplacement du fichier et le nom du fichier.
0
blux Messages postés 27121 Date d'inscription   Statut Modérateur Dernière intervention   3 359
 
Dans ce cas, tu utilises l'objet 'filedialog' qui va permettre de sélectionner un emplacement/fichier que tu mets en variable dans le transferspreadsheet...
0
Kayna.86 Messages postés 42 Date d'inscription   Statut Membre Dernière intervention   5
 
Bonjour Blux,
Merci de ta réponse.
J'ai plutôt opté pour la solution de tessel qui est plus simple à appliquer pour moi. Je vais quand même essayer ta solution par curiosité car je ne connaissais pas l'objet "filedialog".

Bonne journée!
0