liste des feuilles (onglets) excel

corsu

XLDnaute Nouveau
Bonsoir à tous,

voila, je vous explique mon souci. Je suis en train de créer un tableau de suivi budgétaire avec des bilans et différents marchés. Je souhaite que l'utilisateur puisse choisir la feuille dans laquelle il souhaite insérer son marché. J'ai donc utilisé la fonction INDIRECT, mais pour qu'elle fonctionne correctement, je souhaite mettre en bout de ligne un liste déroulante qui liste le nom des feuilles (onglets) existants. Comme cela, l'utilisateur choisit son onglets qui est répercuté dans la fonction INDIRECT et excel va chercher les données dans la bonne feuille.

Cependant, je ne sais pas comment créer automatiquement cette fameuse liste. J'ai vu sur beaucoup de forum des formules VBA mais je ne sais pas comment les utiliser.

Par exemple, j'ai trouvé ce qui suit :

Attribute VB_Name = "TypeFeuillesClasseur"

'liste toutes les feuilles d'un classeur et leur type
'(y compris les feuilles cachées)
'les différents types de feuille peuvent être :
' - Worksheet (feuille de calcul)
' - Chart (feuille de graphique)
' - DialogSheet (boite de dialogue Excel 5)
' - Excel4MacroSheet (feuille macro Excel 4)
' - Excel4IntlMacroSheet (feuille macro internationale Excel 4)

Sub ListSheetTypes()
'd'après Rob Bovey, mpep
Dim objSheet As Object
Dim szType As String, sousType As String

Sheets.Add
For Each objSheet In ActiveWorkbook.Sheets
i = i + 1
Cells(i, 1) = objSheet.Name
szType = TypeName(objSheet)
If szType = "Worksheet" Then
Select Case objSheet.Type
Case xlWorksheet
sousType = szType
Case xlExcel4MacroSheet
sousType = "Excel4MacroSheet"
Case xlExcel4IntlMacroSheet
sousType = "Excel4IntlMacroSheet"
End Select
Cells(i, 2).Value = sousType
Else
Cells(i, 2).Value = szType
End If
Next objSheet

End Sub

mais je ne sais pas faire appel à cette fonction.

Quelqu'un pourrait il m'aider et m'expliquer la démarche à suivre.

Merci par avance.
 

Pierrot93

XLDnaute Barbatruc
Re : liste des feuilles (onglets) excel

Bonjour,

pas sûr d'avoir tout compris de ton besoin, le code ci-dessous te listera sur la feuille active tous les noms des feuilles de calcul, et seulement celles-ci, du classeur actif...
Code:
Option Explicit
Sub test()
Dim ws As Worksheet, i As Byte
For Each ws In Worksheets
    i = i + 1
    Cells(i, 1).Value = ws.Name
Next ws
End Sub
bonne fin d'après midi
@+
 

Hervé

XLDnaute Barbatruc
Re : liste des feuilles (onglets) excel

salut

on doit pouvoir se passer de la variable i

Code:
Dim ws As Worksheet
For Each ws In Worksheets
    Cells(ws.Index, 1).Value = ws.Name
Next ws


Hervé ou l'art de poster pour ne rien dire.

a plus
 

corsu

XLDnaute Nouveau
Re : liste des feuilles (onglets) excel

Je vous remercie pour votre réponse. J'ai mis votre fonction dans un module (macro) mais comment l'utiliser dans une feuille excel, c'est à dire comment créer une liste déroulante dans une feuille excel qui reprend les données obtenues, c'est à dire créer une liste déroulante qui contient le nom des onglets?
 

Pierrot93

XLDnaute Barbatruc
Re : liste des feuilles (onglets) excel

Bonjour Corsu, Hervé:)

sans plus de détail sur le type de liste déroulante utilisée, le code ci-dessous adapter pour alimenter une combobox, contrôle de la boîte à outils contrôles (barre d'outils du même nom) :

Code:
Option Explicit
Sub test()
Dim ws As Worksheet
For Each ws In Worksheets
    Feuil1.ComboBox1.AddItem ws.Name
Next ws
End Sub

bonne journée
@+
 

corsu

XLDnaute Nouveau
Re : liste des feuilles (onglets) excel

Bonjour à tous,

ce n'est exactement ce que je désire car je souhaite utiliser les noms des onglets dans des cellules de la feuille et une combo box ne me permet pas de le faire, à ma connaissance. Pour résoudre le problème, je vais passer par une feuille tampon qui me servira de base de données. Je vais nommer cette liste et l'utiliser dans un volet déroulant (données/validation). Je vais donc demander aux utilisateurs de mettre à jour régulièrement cette liste en utilisant la formule que vous m'avez donné.

Merci tout de même pour votre aide.

Cordialement.
 

JNP

XLDnaute Barbatruc
Re : liste des feuilles (onglets) excel

Bonjour le fil :),
Pourquoi pas une petite fonction personnalisée ?
Voir exemple joint ;).
Bonne journée :cool:
 

Pièces jointes

  • Liste onglets.xls
    39 KB · Affichages: 142
  • Liste onglets.xls
    39 KB · Affichages: 134
  • Liste onglets.xls
    39 KB · Affichages: 146

Pierrot93

XLDnaute Barbatruc
Re : liste des feuilles (onglets) excel

Re, bonjour JNP

une autre solution vba avec une procédure événementielle, créée une liste de validation en A1, code à placer dans le module "thisworkbook" :
Code:
Option Explicit
Private Sub Workbook_Open()
Dim ws As Worksheet, MaListe As String
For Each ws In Worksheets
    MaListe = MaListe & ws.Name & ","
Next ws
With Sheets("Feuil1").Range("A1").Validation
    .Delete
    .Add xlValidateList, Formula1:=Mid(MaListe, 1, Len(MaListe) - 1)
End With
End Sub

bonne journée
@+
 

Si...

XLDnaute Barbatruc
Re : liste des feuilles (onglets) excel

Bonsoir

... je souhaite utiliser les noms des onglets dans des cellules de la feuille et une combobox ne me permet pas de le faire, à ma connaissance.
...

Je comprends mal. Voici une exemple qui permet d'utiliser le nom.
La liste est initialisée à l'ouverture du classeur.
Le nom choisi (par clic) est utilisé dans une formule qui traite la cellule active par une macro associée à la liste.
 

Pièces jointes

  • ListeDesNomsDesOnglets.xls
    20 KB · Affichages: 114

corsu

XLDnaute Nouveau
Re : liste des feuilles (onglets) excel

Bonjour,

c'est exactement ce que je voulais :), une liste qui se met à jour automatiquement. Ce qui est dommage est qu'elle ne se mette pas à jour en temps réel, mais uniquement à l'ouverture du classeur, mais ce n'est pas grave. Une fois le nom des onglets définis, il vont très peu changer.

Merci à tous pour votre aide.

A bientôt sur excel download.

Bonne journée.
 

JNP

XLDnaute Barbatruc
Re : liste des feuilles (onglets) excel

Re :),
En modifiant le code de Pierrot comme suit
Code:
Option Explicit
Private Sub Workbook_Open()
Dim ws As Worksheet, MaListe As String
For Each ws In Worksheets
    MaListe = MaListe & ws.Name & ","
Next ws
With Sheets("Feuil1").Range("A1").Validation
    .Delete
    .Add xlValidateList, Formula1:=Mid(MaListe, 1, Len(MaListe) - 1)
End With
End Sub
toute nouvelle feuille sera ajoutée aussi. On pourrait aussi le mettre dans le code de la Feuille 1 en Activate afin quelle soit mise à jour à chaque activation.
Sinon, mon fichier en PJ qui actualise aussi avec une nouvelle feuille.
Bonne journée :cool:
 

Pièces jointes

  • Liste onglets.xls
    51 KB · Affichages: 131
  • Liste onglets.xls
    51 KB · Affichages: 119
  • Liste onglets.xls
    51 KB · Affichages: 129

GuillaumA

XLDnaute Occasionnel
Re : liste des feuilles (onglets) excel

Bonjour le forum, le fil =)

Je me permet de revenir sur ce sujet ma foi très intéressant!

Voila, utilisant le code de JNP basé sur un fonction personalisée:

Code:
Function NomsOnglets(i As Integer) As String  
Application.Volatile
On Error Resume Next
NomsOnglets = Sheets(i).Name
On Error GoTo 0
End Function

J'aurai aimé savoir s'il était possible d'exclure certaines feuilles pour qu'elles n'apparaissent pas dans la liste déroulante (nommée Onglets).
Par exemple - Feuil2 .

Ainsi que les cellules vides de la liste de validation attaché ayant toutes pour code cellule
Code:
=NomsOnglets(LIGNE())

Cordialement,
Guillaume A.
 

JNP

XLDnaute Barbatruc
Re : liste des feuilles (onglets) excel

Re :),
pour la fonction personnalisée, voici une version permettant de mettre en optionel une feuille à ne pas tenir compte
Code:
Function NomsOnglets(I As Integer, Optional AOublier As String) As String
Application.Volatile
On Error Resume Next
If AOublier = "" Then
NomsOnglets = Sheets(I).Name
Else
Select Case Sheets(AOublier).Index
Case I
NomsOnglets = Sheets(I + 1).Name
Case Is > I
NomsOnglets = Sheets(I).Name
Case Else
NomsOnglets = Sheets(I + 1).Name
End Select
End If
On Error GoTo 0
End Function
Pour en ôter plus, le code sera encore plus complexe :p...
Pour la liste de validation, il faudrait s'inspirer du code de Pierrot qui est très efficace ;).
Bon courage :cool:
 

Discussions similaires

Réponses
7
Affichages
485
Réponses
1
Affichages
868

Statistiques des forums

Discussions
311 725
Messages
2 081 941
Membres
101 847
dernier inscrit
Djigbenou