Lire nom des onglets sans ouvrir classeur

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 !

jhofman

XLDnaute Occasionnel
bonjour,


j'ai consulté les nombreux post afind epouvoir lire les données d'un classeur sans avoir besoin des les ouvrir.
Je n'ai pas trouvé de méthode pour lire les données d'un classeur autrement qu'en fixant le nom de l'onglet : exemple feuill1.

Est-il possible de lire les cellules de tous les onglets ?
Merci
 
Re : Lire nom des onglets sans ouvrir classeur

@Jhofmann,

Ayyééé a compris, Enfin🙄,

Voici une nouvelle boucle:

Code:
    For i = 1 To iTablesCount
        sTableNom = 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 Right(sTableNom, 1) = "$" Then
            ReDim Preserve tblTables(0 To iTable)
            tblTables(iTable) = Left(sTableNom, Len(sTableNom) - 1)
            iTable = iTable + 1
        [COLOR=red]ElseIf Right(sTableNom, 2) = "$'" Then[/COLOR]
            ReDim Preserve tblTables(0 To iTable)
            tblTables(iTable) = Left(sTableNom, Len(sTableNom) - 2)
            tblTables(iTable) = Right(tblTables(iTable), Len(tblTables(iTable)) - 1)
            iTable = iTable + 1
        End If
 
        rsT.MoveNext
    Next

C'est vrai que je n'utilise jamais d'espace dans les noms de feuille mais '_'
A++++
 
Re : Lire nom des onglets sans ouvrir classeur

voici les pgm

'*****************************************************************************
' AVERTISSEMENT
' Référencer 'Microsoft ActiveX Data Object 2.x Library
'*****************************************************************************
Function ListerTables(sFichier 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)

If InStr(1, sFichier, "\") = 0 Then
sFichier = ThisWorkbook.Path & "\" & sFichier
End If

If Dir(sFichier) = "" Then
MsgBox sFichier & vbCrLf & "Fichier introuvable", vbExclamation, "ListerTables"
Exit Function
End If

Set cnx = New ADODB.Connection
With cnx
.Provider = "Microsoft.Jet.OLEDB.4.0"
.ConnectionString = "Data Source=" & sFichier & ";Extended Properties=Excel 8.0;"
.CursorLocation = adUseClient
.Open
End With

Set rsT = cnx.OpenSchema(adSchemaTables)

iTablesCount = rsT.RecordCount

rsT.MoveFirst
For i = 1 To iTablesCount
sTableNom = rsT.Fields("TABLE_NAME").Value
' Si le nom se termine par $ il s'agit d'une feuille,
' sinon c'est une plage nommée
MsgBox Right(sTableNom, 2) & ">" & sTableNom
If Right(sTableNom, 2) = "$'" Then
ReDim Preserve tblTables(0 To iTable)
tblTables(iTable) = Left(sTableNom, Len(sTableNom) - 1)
iTable = iTable + 1
End If
rsT.MoveNext
Next

'Destruction des objets Recordset et connexion
rsT.Close: Set rsT = Nothing
cnx.Close: Set cnx = Nothing

'Retourner le tableau ou -1 si aucune table n'a été trouvée
If iTablesCount > 0 Then ListerTables = tblTables Else ListerTables = -1

End Function
Sub Test()
Dim Resultat As Variant
Dim i As Integer
Dim txt As String
Resultat = ListerTables("C:\public\test.xls")
If IsArray(Resultat) Then
txt = "Liste des feuilles du fichier" & vbNewLine
For i = 0 To UBound(Resultat) - 1
txt = txt & vbNewLine & Resultat(i)
Next i
MsgBox txt
End If
End Sub

et
 

Pièces jointes

- 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

Réponses
5
Affichages
272
D
  • Question Question
Réponses
5
Affichages
250
Didierpasdoué
D
Retour