Obtenir les noms de feuilles d’un classeur Excel en VBA

L’article Importer plusieurs feuilles Excel dans une table Access en VBA montrait comment importer automatiquement le contenu de feuilles Excel (feuilles de même structure, obligatoirement) dans une table Access.

Dans cet article, on supposait que les feuilles étaient connues au préalable, et listées dans Access. Mais comment faire si le nombre de feuilles Excel est inconnu et variable ?

Liste d'acteurs dans Excel

La solution

L’idée est d’obtenir en VBA la liste des feuilles du classeur Excel concerné. Une petite fonction fera l’affaire :

  1. Comme on va piloter Excel à distance (par Automation), votre base Access doit comporter une référence à la bibliothèque Microsoft Excel x.y Object Library (x.y variant selon votre pack Office. Office 2013 équivaut à 15.0, par exemple). Dans VBE, faites Outils / Références et cochez la bibliothèque susnommée (tiens, voilà que j’écris comme une circulaire de police ! 🙂 ).
  2. Recopiez la fonction suivante dans un module standard de votre base de données :

La fonction démarre une instance d’Excel, ouvre le classeur, et en extrait les noms de feuilles. Ceux-ci sont renvoyés dans un tableau, et pourront être exploités dans Access.

Exemple

Si vous vous reportez à l’article de départ, vous trouvez un bout de code qui importe des feuilles Excel dont on connaît le nom :

Maintenant, si les noms de feuilles sont inconnus, vous pouvez adapter ce code de cette manière :

Hop là !

Attention

Chaque appel de la fonction démarre « un nouvel Excel ». Si vous deviez l’utiliser dans une boucle, aménagez un peu pour éviter la séquence Démarrer Excel / Arrêter Excel qui ne sera pas performante.

Vous aimerez aussi...

2 réponses

  1. Hervé Inisan dit :

    Julie > Content que marche !

  2. Julie dit :

    Je vous remercie pour votre rapidité à répondre aux questions! Et pour ce code présenté encore une fois de manière très claire. C’est parfait ca marche nikel! 😉
    Julie

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *