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

Résolu/Fermé
Kayna.86 Messages postés 42 Date d'inscription mercredi 31 octobre 2012 Statut Membre Dernière intervention 17 avril 2013 - 15 avril 2013 à 15:46
Kayna.86 Messages postés 42 Date d'inscription mercredi 31 octobre 2012 Statut Membre Dernière intervention 17 avril 2013 - 17 avril 2013 à 12:41
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.
A voir également:

3 réponses

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 mercredi 31 octobre 2012 Statut Membre Dernière intervention 17 avril 2013 5
17 avril 2013 à 12:41
Bonjour Tessel,

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

Bonne journée
0
blux Messages postés 26531 Date d'inscription dimanche 26 août 2001 Statut Modérateur Dernière intervention 16 décembre 2024 3 317
15 avril 2013 à 16:58
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 mercredi 31 octobre 2012 Statut Membre Dernière intervention 17 avril 2013 5
15 avril 2013 à 18:04
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 26531 Date d'inscription dimanche 26 août 2001 Statut Modérateur Dernière intervention 16 décembre 2024 3 317
15 avril 2013 à 20:14
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 mercredi 31 octobre 2012 Statut Membre Dernière intervention 17 avril 2013 5
17 avril 2013 à 12:41
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