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

Bonjur jhofman et le Forum
il te suffit de boucler sur les feuilles puis de lire tes cellules

for i = 1 to Workbooks("LeClasseur").Sheets.count
ton code pour Workbooks("LeClasseur").sheets(i).range("A1")
next

Bon courage et à +
 
Re : Lire nom des onglets sans ouvrir classeur

pourquoi certain utilisent la fonction + complexe : ExecuteExcel4Macro

Code:
Private Function ExtraireValeur(ByVal Dossier As String, ByVal Fichier As String, _
                                ByVal Feuille As String, ByVal Cellule As String)
Dim Argument As String
    Dossier = Replace(Dossier, "'", "''")
    Fichier = Replace(Fichier, "'", "''")
    Feuille = Replace(Feuille, "'", "''")
    Argument = "'" & Dossier & "[" & Fichier & "]" & Feuille & "'!" & Range(Cellule).Address(, , xlR1C1)
    ExtraireValeur = ExecuteExcel4Macro(Argument)
End Function
 
Re : Lire nom des onglets sans ouvrir classeur

Bonjour Catrice, Denis, Jhofman,

Voici une solution avec ADO à coller dans un module


Code:
Option Explicit
 
'*****************************************************************************
'                           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
        If Right(sTableNom, 1) = "$" 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("D:\VB_VBA\Excel\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

A bientôt
 
Re : Lire nom des onglets sans ouvrir classeur

bonjour

ce type de code que j'utilise souvent liste les noms des feuilles d'un classeur fermé (renvoi en colonne A) :

Code:
Sub nomdesfeuilles()
    'code adapté d'une merveille de MICHELXLD
    
    '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
    
    Dim Cn As ADODB.Connection
    Dim oCat As ADOX.Catalog
    Dim Fichier As String
    Dim Feuille As ADOX.Table
    Dim t As String
    Dim tablo
    
    Fichier = "C:\TEST\classeur2.xls"
    
    Set Cn = New ADODB.Connection
    Set oCat = New ADOX.Catalog
    
    Cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Fichier & _
            ";Extended Properties=Excel 8.0;"
    
    Set oCat.ActiveConnection = Cn
    
    For i = 0 To oCat.Tables.Count - 1
        t = t & "/" & oCat.Tables(i).Name
    Next i

    tablo = Split(t, "/")
    
    Range("a1:a" & UBound(tablo) + 1) = Application.Transpose(tablo)
    
    Set Feuille = Nothing
    Set oCat = Nothing
    Cn.Close
    Set Cn = Nothing
End Sub
les noms sont renvoyés sous la forme Feuil1$ pour les avoir sans $ :

remplacer la ligne : t = t & "/" & oCat.Tables(i).Name

par : t = t & "/" & Left(oCat.Tables(i).Name, Len(oCat.Tables(i).Name) - 1)

on peut aussi se passer d'une tableau variable (c'est ma mauvaise manie) :

'
Code:
......
    For i = 0 To oCat.Tables.Count - 1
        Cells(i + 1, 1) = Left(oCat.Tables(i).Name, Len(oCat.Tables(i).Name) - 1)
    Next i
    
    Set Feuille = Nothing
    Set oCat = Nothing
    Cn.Close
    Set Cn = Nothing
End Sub
salut 🙂

ps : salut hasco ^^
 
Re : Lire nom des onglets sans ouvrir classeur

Re bonjour à tous,

Dans la méthode que je t'ai donnée normalement il ne retourne que les nom qui finissent par le signe $, qui sont les noms des feuilles. (le nom est retourné sans le $)

A bientôt
 
Re : Lire nom des onglets sans ouvrir classeur

merci hasco.

Nota . les fichiers sont restitués sur mon poste avec des ''
exemple 'feuile1$'
dans ton test Hasco, je dois donc tester les deux dernies caractéres : si = "$'" alors feuille exel.
Merci à tous
 
Re : Lire nom des onglets sans ouvrir classeur

Re,

Dans le code que je t'ai donné il y a les lignes:

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

Où le test est déjà fait et normalement le nom de table (feuille) est retourné sans le $.

Le tableau retourné par la fonction contient ces noms de feuilles sans leur $ final.

A+
 
Re : Lire nom des onglets sans ouvrir classeur

Bonjour tout le monde,

Moi j'avais une idée bien plus simple, ca vous tente ?

Acheter une boule et se transformer en Madame IRMA... C'était juste pour le clin d'oeil "sourire" de la journée sous la grisaille nantaise et pour un coucou à tous et particulier aux deux "H" achement forts du forum.
 
Re : Lire nom des onglets sans ouvrir classeur

cher Hasco,


j'ai bien vu ton code mais comme mes onglets ont des espaces dans le nom, ils sont restitué non pas sous la forme ongle1$ mais sous la forme 'Nom onglet1$'.

le plus complet est donc de tester
- le $ à droite sur une position comme tu le proposes
- le $' à droite sur deux positions pour être complet.

Merci
 
- 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