Lister les onglets d'un document Excel depuis Access VBA

Le
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
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
michel
Le #19991181
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" 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





Laurent
Le #20001181
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" 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" 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








Michel__D
Le #20001591
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" 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" 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











Laurent
Le #20044591
Excellent, merci beaucoup

:)

Cordialement,
Laurent
"Michel__D" 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" 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" 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












Publicité
Poster une réponse
Anonyme