Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Lister les onglets d'un document Excel depuis Access VBA

4 réponses
Avatar
Laurent
Bonjour,

Je cherche à lire la liste des des onglets composant un document Excel. J'ai
bien compris que Excel ramène un $ à la fin de chaque nom de feuille.

Maintenant, quelque chose m'échappe, car si je lance ma fonction, Access VBA
me retourne des noms de feuille qui n'existe absolument pas dans le
document.

Pour résumer : dans Excel, j'ai une seule et unique feuille nommée "test".
Ma fonction Access me retourne "tbTmpBatchConversion" et "test".

Si vous avez déjà été confronté à ce problème, comment l'avez-vous résolu ?

Merci pour votre aide et bel après-midi

Cordialement,
Laurent

PS : A toute fin utile, une copie de mon code, si vous voyez ce qui 'pêche'
:)

---------------------------------------------

Public function fcnGetExcelTabList (ByVal strPath As String) As String

' ---------------------------------------'
' ¦ This function lists all the ¦
' ¦ worksheets of a given Excel file ¦
' ¦ and returns a string ¦
' ---------------------------------------'



'Declarations
Dim DB As DAO.Database
Dim td As DAO.TableDef
Dim strSpreadSheetList As String
Dim strSpecCharacter1 As String
Dim strSpecCharacter2 As String
strSpecCharacter1 = cInvertedComma & "'"
strSpecCharacter2 = "'" & cInvertedComma


Set DB = DAO.OpenDatabase(strPath, True, False, "Excel 8.0;")


DoEvents

For Each td In DB.TableDefs

Select Case Right(td.Name, 2)

Case "$_":

Case Else:

strSpreadSheetList = strSpreadSheetList & ";" & cInvertedComma &
td.Name & cInvertedComma

End Select
Next td

DB.Close

Set td = Nothing
Set DB = Nothing

strSpreadSheetList = Mid(strSpreadSheetList, 2, (Len(strSpreadSheetList) -
1))

' Replaces the following strings as follows ->
' -> '$' in a spreadsheet (double $$) is replaced by '#'
' -> ' ' in a spreadsheet ($) is replaced by ""
' -> '#' is replaced by '$'

strSpreadSheetList = Replace(strSpreadSheetList, "$$", "#", 1, -1)
strSpreadSheetList = Replace(strSpreadSheetList, "$", "", 1, -1)
strSpreadSheetList = Replace(strSpreadSheetList, "#", "$", 1, -1)
strSpreadSheetList = Replace(strSpreadSheetList, strSpecCharacter1,
cInvertedComma, 1, -1)
strSpreadSheetList = Replace(strSpreadSheetList, strSpecCharacter2,
cInvertedComma, 1, -1)

' --- Function output ---
fcnGetExcelTabList = strSpreadSheetList

4 réponses

Avatar
michel
bonjour
Ta methode me semble compliquee
essaie ce code
Sub xl()
Dim xlapp As New Excel.Application
xlapp.workbooks.Open "test2.xls"
For Each feuille In xlapp.ActiveWorkbook.Sheets
Debug.Print feuille.Name
Next
Set xlapp = Nothing
End Sub
ATTENTION ajoute la reference a excel dans ton module
@Plus
Michel
"Laurent" a écrit dans le message de
news:
Bonjour,

Je cherche à lire la liste des des onglets composant un document Excel.
J'ai bien compris que Excel ramène un $ à la fin de chaque nom de feuille.

Maintenant, quelque chose m'échappe, car si je lance ma fonction, Access
VBA me retourne des noms de feuille qui n'existe absolument pas dans le
document.

Pour résumer : dans Excel, j'ai une seule et unique feuille nommée "test".
Ma fonction Access me retourne "tbTmpBatchConversion" et "test".

Si vous avez déjà été confronté à ce problème, comment l'avez-vous résolu
?

Merci pour votre aide et bel après-midi

Cordialement,
Laurent

PS : A toute fin utile, une copie de mon code, si vous voyez ce qui
'pêche' :)

---------------------------------------------

Public function fcnGetExcelTabList (ByVal strPath As String) As String

' ---------------------------------------'
' ¦ This function lists all the ¦
' ¦ worksheets of a given Excel file ¦
' ¦ and returns a string ¦
' ---------------------------------------'



'Declarations
Dim DB As DAO.Database
Dim td As DAO.TableDef
Dim strSpreadSheetList As String
Dim strSpecCharacter1 As String
Dim strSpecCharacter2 As String
strSpecCharacter1 = cInvertedComma & "'"
strSpecCharacter2 = "'" & cInvertedComma


Set DB = DAO.OpenDatabase(strPath, True, False, "Excel 8.0;")


DoEvents

For Each td In DB.TableDefs

Select Case Right(td.Name, 2)

Case "$_":

Case Else:

strSpreadSheetList = strSpreadSheetList & ";" & cInvertedComma
& td.Name & cInvertedComma

End Select
Next td

DB.Close

Set td = Nothing
Set DB = Nothing

strSpreadSheetList = Mid(strSpreadSheetList, 2, (Len(strSpreadSheetList) -
1))

' Replaces the following strings as follows ->
' -> '$' in a spreadsheet (double $$) is replaced by '#'
' -> ' ' in a spreadsheet ($) is replaced by ""
' -> '#' is replaced by '$'

strSpreadSheetList = Replace(strSpreadSheetList, "$$", "#", 1, -1)
strSpreadSheetList = Replace(strSpreadSheetList, "$", "", 1, -1)
strSpreadSheetList = Replace(strSpreadSheetList, "#", "$", 1, -1)
strSpreadSheetList = Replace(strSpreadSheetList, strSpecCharacter1,
cInvertedComma, 1, -1)
strSpreadSheetList = Replace(strSpreadSheetList, strSpecCharacter2,
cInvertedComma, 1, -1)

' --- Function output ---
fcnGetExcelTabList = strSpreadSheetList





Avatar
Laurent
Bonjour Michel,

Merci pour ta réponse. En fait, j'avais trouvé cette méthode pour éviter
d'ajouter une référence supplémentaire .

Bonne soirée

Cordialement,
Laurent

"michel" wrote in message
news:ehW$
bonjour
Ta methode me semble compliquee
essaie ce code
Sub xl()
Dim xlapp As New Excel.Application
xlapp.workbooks.Open "test2.xls"
For Each feuille In xlapp.ActiveWorkbook.Sheets
Debug.Print feuille.Name
Next
Set xlapp = Nothing
End Sub
ATTENTION ajoute la reference a excel dans ton module
@Plus
Michel
"Laurent" a écrit dans le message de
news:
Bonjour,

Je cherche à lire la liste des des onglets composant un document Excel.
J'ai bien compris que Excel ramène un $ à la fin de chaque nom de
feuille.

Maintenant, quelque chose m'échappe, car si je lance ma fonction, Access
VBA me retourne des noms de feuille qui n'existe absolument pas dans le
document.

Pour résumer : dans Excel, j'ai une seule et unique feuille nommée
"test". Ma fonction Access me retourne "tbTmpBatchConversion" et "test".

Si vous avez déjà été confronté à ce problème, comment l'avez-vous résolu
?

Merci pour votre aide et bel après-midi

Cordialement,
Laurent

PS : A toute fin utile, une copie de mon code, si vous voyez ce qui
'pêche' :)

---------------------------------------------

Public function fcnGetExcelTabList (ByVal strPath As String) As String

' ---------------------------------------'
' ¦ This function lists all the ¦
' ¦ worksheets of a given Excel file ¦
' ¦ and returns a string ¦
' ---------------------------------------'



'Declarations
Dim DB As DAO.Database
Dim td As DAO.TableDef
Dim strSpreadSheetList As String
Dim strSpecCharacter1 As String
Dim strSpecCharacter2 As String
strSpecCharacter1 = cInvertedComma & "'"
strSpecCharacter2 = "'" & cInvertedComma


Set DB = DAO.OpenDatabase(strPath, True, False, "Excel 8.0;")


DoEvents

For Each td In DB.TableDefs

Select Case Right(td.Name, 2)

Case "$_":

Case Else:

strSpreadSheetList = strSpreadSheetList & ";" & cInvertedComma
& td.Name & cInvertedComma

End Select
Next td

DB.Close

Set td = Nothing
Set DB = Nothing

strSpreadSheetList = Mid(strSpreadSheetList, 2,
(Len(strSpreadSheetList) - 1))

' Replaces the following strings as follows ->
' -> '$' in a spreadsheet (double $$) is replaced by '#'
' -> ' ' in a spreadsheet ($) is replaced by ""
' -> '#' is replaced by '$'

strSpreadSheetList = Replace(strSpreadSheetList, "$$", "#", 1, -1)
strSpreadSheetList = Replace(strSpreadSheetList, "$", "", 1, -1)
strSpreadSheetList = Replace(strSpreadSheetList, "#", "$", 1, -1)
strSpreadSheetList = Replace(strSpreadSheetList, strSpecCharacter1,
cInvertedComma, 1, -1)
strSpreadSheetList = Replace(strSpreadSheetList, strSpecCharacter2,
cInvertedComma, 1, -1)

' --- Function output ---
fcnGetExcelTabList = strSpreadSheetList








Avatar
Michel__D
Bonjour,

Dans ce cas essaye comme ceci :

Sub xl()
Dim xlapp As Object

Set xlapp = CreateObject("Excel.Application")
xlapp.workbooks.Open "test2.xls"
For Each feuille In xlapp.ActiveWorkbook.Sheets
Debug.Print feuille.Name
Next
Set xlapp = Nothing
End Sub

PS:Bien entendu, il faut que Excel soit installé.

Laurent a écrit :
Bonjour Michel,

Merci pour ta réponse. En fait, j'avais trouvé cette méthode pour éviter
d'ajouter une référence supplémentaire .

Bonne soirée

Cordialement,
Laurent

"michel" wrote in message
news:ehW$
bonjour
Ta methode me semble compliquee
essaie ce code
Sub xl()
Dim xlapp As New Excel.Application
xlapp.workbooks.Open "test2.xls"
For Each feuille In xlapp.ActiveWorkbook.Sheets
Debug.Print feuille.Name
Next
Set xlapp = Nothing
End Sub
ATTENTION ajoute la reference a excel dans ton module
@Plus
Michel
"Laurent" a écrit dans le message de
news:
Bonjour,

Je cherche à lire la liste des des onglets composant un document Excel.
J'ai bien compris que Excel ramène un $ à la fin de chaque nom de
feuille.

Maintenant, quelque chose m'échappe, car si je lance ma fonction, Access
VBA me retourne des noms de feuille qui n'existe absolument pas dans le
document.

Pour résumer : dans Excel, j'ai une seule et unique feuille nommée
"test". Ma fonction Access me retourne "tbTmpBatchConversion" et "test".

Si vous avez déjà été confronté à ce problème, comment l'avez-vous résolu
?

Merci pour votre aide et bel après-midi

Cordialement,
Laurent

PS : A toute fin utile, une copie de mon code, si vous voyez ce qui
'pêche' :)

---------------------------------------------

Public function fcnGetExcelTabList (ByVal strPath As String) As String

' ---------------------------------------'
' ¦ This function lists all the ¦
' ¦ worksheets of a given Excel file ¦
' ¦ and returns a string ¦
' ---------------------------------------'



'Declarations
Dim DB As DAO.Database
Dim td As DAO.TableDef
Dim strSpreadSheetList As String
Dim strSpecCharacter1 As String
Dim strSpecCharacter2 As String
strSpecCharacter1 = cInvertedComma & "'"
strSpecCharacter2 = "'" & cInvertedComma


Set DB = DAO.OpenDatabase(strPath, True, False, "Excel 8.0;")


DoEvents

For Each td In DB.TableDefs

Select Case Right(td.Name, 2)

Case "$_":

Case Else:

strSpreadSheetList = strSpreadSheetList & ";" & cInvertedComma
& td.Name & cInvertedComma

End Select
Next td

DB.Close

Set td = Nothing
Set DB = Nothing

strSpreadSheetList = Mid(strSpreadSheetList, 2,
(Len(strSpreadSheetList) - 1))

' Replaces the following strings as follows ->
' -> '$' in a spreadsheet (double $$) is replaced by '#'
' -> ' ' in a spreadsheet ($) is replaced by ""
' -> '#' is replaced by '$'

strSpreadSheetList = Replace(strSpreadSheetList, "$$", "#", 1, -1)
strSpreadSheetList = Replace(strSpreadSheetList, "$", "", 1, -1)
strSpreadSheetList = Replace(strSpreadSheetList, "#", "$", 1, -1)
strSpreadSheetList = Replace(strSpreadSheetList, strSpecCharacter1,
cInvertedComma, 1, -1)
strSpreadSheetList = Replace(strSpreadSheetList, strSpecCharacter2,
cInvertedComma, 1, -1)

' --- Function output ---
fcnGetExcelTabList = strSpreadSheetList











Avatar
Laurent
Excellent, merci beaucoup

:)

Cordialement,
Laurent
"Michel__D" wrote in message
news:%23jk%
Bonjour,

Dans ce cas essaye comme ceci :

Sub xl()
Dim xlapp As Object

Set xlapp = CreateObject("Excel.Application")
xlapp.workbooks.Open "test2.xls"
For Each feuille In xlapp.ActiveWorkbook.Sheets
Debug.Print feuille.Name
Next
Set xlapp = Nothing
End Sub

PS:Bien entendu, il faut que Excel soit installé.

Laurent a écrit :
Bonjour Michel,

Merci pour ta réponse. En fait, j'avais trouvé cette méthode pour éviter
d'ajouter une référence supplémentaire .

Bonne soirée

Cordialement,
Laurent

"michel" wrote in message
news:ehW$
bonjour
Ta methode me semble compliquee
essaie ce code
Sub xl()
Dim xlapp As New Excel.Application
xlapp.workbooks.Open "test2.xls"
For Each feuille In xlapp.ActiveWorkbook.Sheets
Debug.Print feuille.Name
Next
Set xlapp = Nothing
End Sub
ATTENTION ajoute la reference a excel dans ton module
@Plus
Michel
"Laurent" a écrit dans le message de
news:
Bonjour,

Je cherche à lire la liste des des onglets composant un document Excel.
J'ai bien compris que Excel ramène un $ à la fin de chaque nom de
feuille.

Maintenant, quelque chose m'échappe, car si je lance ma fonction,
Access VBA me retourne des noms de feuille qui n'existe absolument pas
dans le document.

Pour résumer : dans Excel, j'ai une seule et unique feuille nommée
"test". Ma fonction Access me retourne "tbTmpBatchConversion" et
"test".

Si vous avez déjà été confronté à ce problème, comment l'avez-vous
résolu ?

Merci pour votre aide et bel après-midi

Cordialement,
Laurent

PS : A toute fin utile, une copie de mon code, si vous voyez ce qui
'pêche' :)

---------------------------------------------

Public function fcnGetExcelTabList (ByVal strPath As String) As String

' ---------------------------------------'
' ¦ This function lists all the ¦
' ¦ worksheets of a given Excel file ¦
' ¦ and returns a string ¦
' ---------------------------------------'



'Declarations
Dim DB As DAO.Database
Dim td As DAO.TableDef
Dim strSpreadSheetList As String
Dim strSpecCharacter1 As String
Dim strSpecCharacter2 As String
strSpecCharacter1 = cInvertedComma & "'"
strSpecCharacter2 = "'" & cInvertedComma


Set DB = DAO.OpenDatabase(strPath, True, False, "Excel 8.0;")


DoEvents

For Each td In DB.TableDefs

Select Case Right(td.Name, 2)

Case "$_":

Case Else:

strSpreadSheetList = strSpreadSheetList & ";" &
cInvertedComma & td.Name & cInvertedComma

End Select
Next td

DB.Close

Set td = Nothing
Set DB = Nothing

strSpreadSheetList = Mid(strSpreadSheetList, 2,
(Len(strSpreadSheetList) - 1))

' Replaces the following strings as follows ->
' -> '$' in a spreadsheet (double $$) is replaced by '#'
' -> ' ' in a spreadsheet ($) is replaced by ""
' -> '#' is replaced by '$'

strSpreadSheetList = Replace(strSpreadSheetList, "$$", "#", 1, -1)
strSpreadSheetList = Replace(strSpreadSheetList, "$", "", 1, -1)
strSpreadSheetList = Replace(strSpreadSheetList, "#", "$", 1, -1)
strSpreadSheetList = Replace(strSpreadSheetList, strSpecCharacter1,
cInvertedComma, 1, -1)
strSpreadSheetList = Replace(strSpreadSheetList, strSpecCharacter2,
cInvertedComma, 1, -1)

' --- Function output ---
fcnGetExcelTabList = strSpreadSheetList