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
Cette macro lit les onglets de fichiers Excel femés de différentes version... SAUF les fichiers binaires xlsb que je dois ouvrir.
Voici le code ci dessous:
Merci d'avance pour votre aide si possible...
cdt
smotty
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
Cette macro lit les onglets de fichiers Excel femés de différentes version... SAUF les fichiers binaires xlsb 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