XL 2016 VBA - Trouver les feuilles d'un classeur fermé

  • Initiateur de la discussion Initiateur de la discussion Dudu2
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

Solution
Bonjour,
Dans le lien que j'ai fourni je donne des exemples de connections. Tu as la fonction GenereCSTRING qui te permet de créer une connexion sans rien y connaître.

ModuleRequeteurUniversel contient tout ce qui est utile pour jouer avec une base de données que ce soit SQL serveur, Oracle, MySQL, Excel, CSV etc.

GenereCSTRING te retourne le conectionString en fonction du type te base de données à traiter, dans notre cas xls. Notes que des paramètres optionnel permettent de choisir les informations en fonction du type de base. Serveur par exemple sera utile pour SQL serveur, Oracle, MySQL.

VB:
Sub test()
Dim CN As Object, Tables() As String
Set CN = CreateObject("Adodb.connection")
CN.Open GenereCSTRING(Xls...
@patricktoulon,

Je vois qu'en cas de pas d'item tu fais:
Code:
Table = Array()
pour avoir un UBound à zéro.

Perso pour tester une table vide je fais ça:
VB:
If Not (Not Table) Then
    'Table pas vide (valorisée)
Else
    'Table vide (non valorisée)
End
et bien si la requête c'est mal passé pour une raison ou une autre moteur ado en rade , permission,etc....
mieux vaut retourner quelque chose que planter une erreur non?
 
moi non plus je n'ai pas vu
corrigé
VB:
Option Explicit
Sub test()
    Dim listsheet, filepath$
    'adapter le chemin ici ou injecter un dialog getopenfilename
    filepath$ = "C:\Users\patricktoulon\Desktop\tototo.xlsx"
    listsheet = ListSheetOnClosedFile(filepath)
    If UBound(listsheet) > 0 Then
        MsgBox Join(listsheet, vbCrLf)
    Else
        MsgBox "La connection au classeur n'a pas pu lister les feuille du classeur"
    End If
End Sub
Function ListSheetOnClosedFile(lPath As String)
    'patricktoulon collection Ado
    Dim Connection As Object, recordST As Object, tbl(), a&
    Set Connection = CreateObject("ADODB.Connection") ' Créer connexion ADO
    ' Ouvrir connexion (type de connection pour les version superieures a 2003/2007 et +)
    Connection.Open "Provider=Microsoft.ACE.OLEDB.12.0;" & "Data Source=" & lPath & ";" & "Extended Properties=""Excel 12.0 Xml;HDR=YES"";"
    Set recordST = Connection.OpenSchema(20) ' Récupérer la liste des feuilles ' 20 = adSchemaTables
    Do Until recordST.EOF
        Debug.Print recordST!TABLE_NAME
        If recordST!TABLE_NAME Like "*$" Or recordST!TABLE_NAME Like "*'" Then
            a = a + 1
            ReDim Preserve tbl(1 To a)
            tbl(a) = Replace(Replace(recordST!TABLE_NAME, "$", ""), "'", "")
        End If
        recordST.MoveNext
    Loop
    recordST.Close: Connection.Close: Set recordST = Nothing: Set Connection = Nothing
    If a = 0 Then
        ListSheetOnClosedFile = Array() ' on met un tableau vide pour eviter l'erreur dans la sub appelante
    Else
        ListSheetOnClosedFile = tbl
    End If
End Function

pour les feuilles on peut simplifier par
If InStr(recordST!TABLE_NAME, "$") > 0 Then
 
Dernière édition:
Petite précision importante : si un classeur est fermé et contient des feuilles protégées, il est impossible d’accéder à leur contenu directement via DAO, ADO ou même en lisant le XML du fichier.
On peut seulement récupérer les noms des feuilles, mais pour lire les cellules, il faut ouvrir le classeur et, si nécessaire, déprotéger les feuilles avec le mot de passe.
Autrement dit, il n’existe pas de méthode “magique” pour contourner la protection depuis un fichier fermé.
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

  • Question Question
Microsoft 365 Excel et Insee
Réponses
6
Affichages
550
Réponses
4
Affichages
186
  • Résolu(e)
Microsoft 365 transposer
Réponses
6
Affichages
141
Réponses
4
Affichages
94
Retour