Création auto du sommaire d’un classeur dans un onglet dédié

Bonjour le Forum !

Je souhaite créer un sommaire dans le 1er onglet d’un classeur (disons que l’onglet s’appelle « SOMMAIRE »), qui liste tous les onglets du classeur sous forme de liens hypertextes, rangés en colonne (1 lien par ligne).

J’ai cherché dans l’index du Forum sans trouver mon bonheur (il y a toujours une caractéristique différente : liens dynamiques, sommaire sous forme de boutons,…).

Quelqu’un pourrait-il m’aider ?

Merci !!!

Hello,

Essaye avec ça:

Sub sommaire()
Dim feuille(200)
a = 0
For Each sh In Sheets
feuille(a) = sh.Name
a = a + 1
Next
Sheets("sommaire").Cells(1, 1).Value = "SOMMAIRE DU CLASSEUR"
For i = 1 To a - 1
Sheets("sommaire").Hyperlinks.Add Anchor:=Sheets("sommaire").Cells(i + 2, 1), Address:="", SubAddress:= _
    feuille(i) & "!A1", TextToDisplay:=feuille(i)
Next i

Sheets("sommaire").Activate

End Sub

Il faut que tu nomme une feuille "sommaire" vierge et que tu mettes toutes tes autres feuilles nommées comme tu veux à la suite.

Si tu as plus de 200 feuilles il faut augmenter le chiffre maximal de feuille(200) en ce que tu veux

Bonjour,

Je te joins un ancien code de mes archives ... avec les hyperlinks ...

Sub Sommaire()
    Dim Sh As Worksheet
    Dim Newsh As Worksheet
    Dim myCell As Range
    Dim ColNum As Integer
    Dim RwNum As Long
    Dim Basebook As Workbook

    With Application
        .Calculation = xlCalculationManual
        .ScreenUpdating = False
    End With
    Application.DisplayAlerts = False
    On Error Resume Next
    ThisWorkbook.Worksheets("Sommaire").Delete
    On Error GoTo 0
    Application.DisplayAlerts = True
    Set Basebook = ThisWorkbook
    Set Newsh = Basebook.Worksheets.Add
    Newsh.Name = "Sommaire"
    RwNum = 1
    For Each Sh In Basebook.Worksheets
        If Sh.Name <> Newsh.Name And Sh.Visible Then
            ColNum = 1
            RwNum = RwNum + 1
            Newsh.Hyperlinks.Add Anchor:=Newsh.Cells(RwNum, 1), Address:="", _
            SubAddress:="'" & Sh.Name & "'!A1", TextToDisplay:=Sh.Name
        End If
    Next Sh
    Newsh.Range("A1").Value = "Sommaire"
    Newsh.UsedRange.Columns.AutoFit
    With Application
        .Calculation = xlCalculationAutomatic
        .ScreenUpdating = True
    End With
End Sub

Merci à tous les 2 !!

@James007 :

J'ai copié ton code dans un module.

Je lance la macro depuis la fenêtre appelée par Alt+F8, et............rien ne se passe ?!

Je ne sais pas où je me trompe.

@funkyfoenky : ça marche...presque !

J'ai compris que ta macro ne marche pas sur les classeurs partagés. Une fois supprimé le partage, ça fonctionne...

...mais les liens hypertexte pour les onglets dont le nom comprend un espace ne fonctionnent pas (message : "référence non valide").

Est-ce que tu saurais supprimer ces 2 bugs ?

(à l'usage, je me rends compte également que c'est fastidieux de créer un onglet "sommaire" dans chaque classeur, donc ce serait cool si la macro commençait par vérifier si le 1er onglet s'appelle "sommaire". Si oui, elle efface les données déjà présentes, si non, elle le crée – si c'est pas trop demander.......)

Merci en tous cas à tous les 2 !

Re,

Ce que tu décris ...est, à tout le moins, ... étonnant ...

Nous parlons bien d'un module standard ... pas d'un module de feuille ... n'est-il pas ...???

Rebonjour,

Après test et retest :

– dans une feuille vide, ta macro (collée dans un module standard) marche

– dans des classeurs avec des tas d'onglets, de données, de macros : ça ne marche pas... (testé sur 4 gros fichiers, non publiables sur le forum)

Je ne sais pas quoi faire...

Re,

Dans le classeur dont tu parles ... les feuilles sont-elles visibles ou cachées ... ?

Visibles (je ne savais pas qu'on pouvait cacher des feuilles !).

Re,

A distance ... sans voir ton fichier ... pas vraiment évident de déceler ce qui se passe ...

As-tu bien ajouté le module standard et donc la macro ... dans le fichier dont tu veux faire le sommaire ...?

Bravo James007 (or may I call you Sherlock ?) !

J'avais bien collé ton code dans un module standard, mais dans le classeur de macros personnelles.

Une fois le code intégré au fichier, il marche comme sur des roulettes (*)

Bravo et merci !!!

(*) cela dit, je suis preneur d'un code modifié pour

1/ fonctionner depuis le classeur de macros personnelles

2/ détecter l'existence d'un 1er onglet nommé sommaire, et le créer au besoin ----- EDIT : ça le fait déjà !!!

...mais tout ça serait du luxe, pas indispensable du tout (mais j'ai des goûts de luxe ;o)

Re,

You can call me Sherlock ... no problem ...

Content que le code fonctionne pour toi ...

Par rapport à tes goûts de luxe ... la deuxième partie est déjà intégrée ... pour preuve ... tu peux ajouter une feuille test ....et relancer la macro ... elle va supprimer ton ancien sommaire ... pour t'en créér un tout beau tout neuf ... !!!

Dès que j'ai un petit moment, je regarde le côté générique depuis les macros personnelles ...

Tu peux peut être ajouter ta macro dans un complément pour y avoir accès sur tous tes classeurs

@James007 : merci

@funkyfoenky : "ajouter ta macro dans un complément" → je ne sais pas faire...

Bonjour gloub,

Chose promise ... chose due ...

Sub Sommaire()

' Version dédiée à gloub
' Macro testée et  *Archi* testée ...

    Dim Sh As Worksheet
    Dim Newsh As Worksheet
    Dim myCell As Range
    Dim ColNum As Integer
    Dim RwNum As Long
    Dim Basebook As Workbook

    With Application
        .Calculation = xlCalculationManual
        .ScreenUpdating = False
    End With
    Application.DisplayAlerts = False
    On Error Resume Next
    ActiveWorkbook.Worksheets("Sommaire").Delete
    On Error GoTo 0
    Application.DisplayAlerts = True
    Set Basebook = ActiveWorkbook
    Set Newsh = Basebook.Worksheets.Add
    Newsh.Name = "Sommaire"
    RwNum = 1
    For Each Sh In Basebook.Worksheets
        If Sh.Name <> Newsh.Name And Sh.Visible Then
            ColNum = 1
            RwNum = RwNum + 1
            Newsh.Hyperlinks.Add Anchor:=Newsh.Cells(RwNum, 1), Address:="", _
            SubAddress:="'" & Sh.Name & "'!A1", TextToDisplay:=Sh.Name
        End If
    Next Sh
    Newsh.Range("A1").Value = "Sommaire"
    Newsh.UsedRange.Columns.AutoFit
    With Application
        .Calculation = xlCalculationAutomatic
        .ScreenUpdating = True
    End With
End Sub

Merci pour le code et pour la dédicace : c'est marche parfaitement, merci !!!

gloub a écrit :

Merci pour le code et pour la dédicace : c'est marche parfaitement, merci !!!

Trop tentant la dédicace ...

Merci pour tes remerciements ...!!!

Rechercher des sujets similaires à "creation auto sommaire classeur onglet dedie"