liste des onglets d'un fichier .xlsb fermé

smotty

XLDnaute Occasionnel
Bonjour le forum,

J'aimerai savoir s'il est possible de lire la liste des onglets d'un classeur xlsb fermé?

J'ai créé (piqué) une macro sur le forum de HASCO et Hervé sur un fil qui date de 2008. Grand merci au passage pour vos codes:D
Cette macro lit les onglets de fichiers Excel femés de différentes version... SAUF les fichiers binaires xlsb:mad: que je dois ouvrir.

Voici le code ci dessous:

Code:
Function ListerTables(ByVal F As String) As Variant
    Dim cnx As ADODB.Connection         'Objet Connexion ADO
    Dim rsT As ADODB.Recordset          'Objet Jeu d'enregistrements ADO
    Dim iTablesCount As Integer         'Nombre de tables
    Dim i As Integer                    'Incrémentation boucle for
    Dim iTable As Integer               'Compteur table
    Dim sTableNom As String             'Nom d'une table
    Dim tblTables() As String           'Tableau des nom de tables (Feuilles)
    Dim sh As Worksheet
    Dim wk As Workbook

    'Nécéssite d'activer la référence Microsoft ADO ext x.x for DLL and Security
    'Nécéssite d'activer la référence Microsoft ActiveX Data Objects x.x Library
        
    On Error Resume Next

    Set cnx = New ADODB.Connection

    If F Like "*.xls" Then
        With cnx
            .Provider = "Microsoft.Jet.OLEDB.4.0"
            .ConnectionString = "Data Source=" & sFichier & ";Extended Properties=Excel 8.0;"
            .CursorLocation = adUseClient
            .Open
        End With

    ElseIf F Like "*.xlsx" Or F Like "*.xlsm" Then
    
        With cnx
            .Provider = "Microsoft.Jet.OLEDB.4.0"
            .ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" _
                & F & ";Extended Properties=""Excel 12.0;HDR=YES;"""
            .CursorLocation = adUseClient
            .Open
        End With
    End If
    
    Set rsT = cnx.OpenSchema(adSchemaTables)
 
    iTablesCount = rsT.RecordCount
 
    rsT.MoveFirst
    For i = 1 To iTablesCount
        sTableNom = NettoyerNom(rsT.Fields("TABLE_NAME").Value)
        ' Si le nom se termine par $ il s'agit d'une feuille,
        ' sinon c'est une plage nommée
        If sTableNom <> "" Then
            ReDim Preserve tblTables(0 To iTable)
            tblTables(iTable) = sTableNom
            iTable = iTable + 1
        End If
        rsT.MoveNext
    Next
    
 
    'Destruction des objets Recordset et connexion
    rsT.Close: Set rsT = Nothing
    cnx.Close: Set cnx = Nothing
    
    If Err.Number > 0 Then
        'n'a pas pu lire le fichier donc le fait en l'ouvrant
        Set wk = CreateObject(F)
        For Each sh In wk.Worksheets
            ReDim Preserve tblTables(iTable)
            tblTables(iTable) = sh.Name
            iTable = iTable + 1
        Next sh
        wk.Close False
    End If
    
    'Retourner le tableau ou -1 si aucune table n'a été trouvée
    If iTable > 0 Then ListerTables = tblTables Else ListerTables = -1

End Function

Merci d'avance pour votre aide si possible...

cdt

smotty
 

smotty

XLDnaute Occasionnel
Re : liste des onglets d'un fichier .xlsb fermé

Bon, désolé, mais en fait j'aurais dû mieux tester mon programme.

En fait il suffit de remplacer

Code:
ElseIf F Like "*.xlsx" Or F Like "*.xlsm" Then

par

Code:
ElseIf F Like "*.xls?" Then

Je ne pensais pas que cette portion de programme fonctionnerait avec xlsb.

Désolé

smotty
 

Discussions similaires

Statistiques des forums

Discussions
312 083
Messages
2 085 189
Membres
102 809
dernier inscrit
Sandrine83