Table des matières

Bonjour à tous,

Je souhaiterais créer une table des matières sous excel via une macro et je n'ai trouvé d'exemple nulle part.

Petite explication: j'ai un fichier dans lequel j'ai une série d'onglets: lot 1, lot 2, lot 3 etc...

Sur chaque onglet, j'ai une série de données telles que: date, lieu, valeur etc.

Sur le premier onglet de mon fichier (nommé MENU dans la macro + bas), je souhaiterais créer une table des matières reprenant la liste des onglets et une série de données.

Ex:

Lot 1: 01/01/01 - bruxelles - 1000 $

Lot 2: 01/05/14 - paris - 500 $

Lot 3: 05/14/89 - londres - 1.500 $

etc.

Pour générer la liste des onglets, j'ai utilisé cette macro:

Sub Onglets()

End Sub

Je n'arrive pas à la modifier pour générer la liste des éléments se trouvant sur les onglets.

Pourriez-vous m'aider ?

Merci d'avance pour vos idées.

103exemple.xlsm (17.53 Ko)

Bonsoir,

une proposition.

Sub Onglets()
    Worksheets("menu").Activate
    ActiveSheet.Hyperlinks.Delete
    For i = 1 To ThisWorkbook.Sheets.Count
        If UCase(Sheets(i).Name) <> "MENU" Then
            Cells(i + 4, 1).Select
            ActiveSheet.Hyperlinks.Add Anchor:=Selection, Address:="", SubAddress:="'" & Sheets(i).Name & "'!A1", TextToDisplay:=Sheets(i).Name
            ActiveSheet.Cells(i + 4, 2) = Sheets(i).Range("B1") & " - " & Sheets(i).Range("B2") & " - " & Sheets(i).Range("B3")
        End If
    Next
End Sub

Merci beaucoup ! C'est tout à fait ce que je cherchais ! Et si je veux que chaque élément (date, lieu, valeur) s'affiche dans une colonne séparée, comment dois-je modifier la macro ?

Bonne journée.

h2so4 a écrit :

Bonsoir,

une proposition.

Sub Onglets()
    Worksheets("menu").Activate
    ActiveSheet.Hyperlinks.Delete
    For i = 1 To ThisWorkbook.Sheets.Count
        If UCase(Sheets(i).Name) <> "MENU" Then
            Cells(i + 4, 1).Select
            ActiveSheet.Hyperlinks.Add Anchor:=Selection, Address:="", SubAddress:="'" & Sheets(i).Name & "'!A1", TextToDisplay:=Sheets(i).Name
            ActiveSheet.Cells(i + 4, 2) = Sheets(i).Range("B1") & " - " & Sheets(i).Range("B2") & " - " & Sheets(i).Range("B3")
        End If
    Next
End Sub

Bonsoir,

Et si je veux que chaque élément (date, lieu, valeur) s'affiche dans une colonne séparée, comment dois-je modifier la macro ?

une possibilité

Sub Onglets()
    Worksheets("menu").Activate
    ActiveSheet.Hyperlinks.Delete
    For i = 1 To ThisWorkbook.Sheets.Count
        If UCase(Sheets(i).Name) <> "MENU" Then
            Cells(i + 4, 1).Select
            ActiveSheet.Hyperlinks.Add Anchor:=Selection, Address:="", SubAddress:="'" & Sheets(i).Name & "'!A1", TextToDisplay:=Sheets(i).Name
            for j=1 to 3
            ActiveSheet.Cells(i + 4, j+1) = Sheets(i).Range("B" & j)
           next j
        End If
    Next
End Sub

Ouï ouï ouï... J'avais modifié le code proposé ce matin pour l'adapter à mon fichier "réel" dans lequel les données à insérer dans la table des matières ne se trouvaient pas sur chaque onglet dans la plage indiqué (B1:B3) et je n'arrive plus à le faire avec cette nouvelle macro. Voici ce que j'avais:

Sub Table_mat_1()

Worksheets("menu").Activate

ActiveSheet.Hyperlinks.Delete

For i = 1 To ThisWorkbook.Sheets.Count

If UCase(Sheets(i).Name) <> "MENU" Then

Cells(i + 4, 1).Select

ActiveSheet.Hyperlinks.Add Anchor:=Selection, Address:="", SubAddress:="'" & Sheets(i).Name & "'!A1", TextToDisplay:=Sheets(i).Name

ActiveSheet.Cells(i + 4, 2) = Sheets(i).Range("N16") & " - " & Sheets(i).Range("N17") & " - " & Sheets(i).Range("N18") & " - " & Sheets(i).Range("N19") & " - " & Sheets(i).Range("N20") & " - " & Sheets(i).Range("N21")

End If

Next

End Sub

Pourriez-vous l'adapter de cette manière ou préférez-vous avoir le fichier excel original ? (qui contient des infos + ou - confidentielles et que je n'ai donc pas forcément envie de publier ici, d'où le fichier exemple simplifié).

Bien à vous,

Re-bonsoir,

Voici le code adapté

Sub Onglets()
    Worksheets("menu").Activate
    ActiveSheet.Hyperlinks.Delete
    For i = 1 To ThisWorkbook.Sheets.Count
        If UCase(Sheets(i).Name) <> "MENU" Then
            Cells(i + 4, 1).Select
            ActiveSheet.Hyperlinks.Add Anchor:=Selection, Address:="", SubAddress:="'" & Sheets(i).Name & "'!A1", TextToDisplay:=Sheets(i).Name
            for j=1 to 6
            ActiveSheet.Cells(i + 4, j+1) = Sheets(i).Range("N" & j+15)
           next j
        End If
    Next
End Sub

C'est tout à fait ça ! merci beaucoup et bonne soirée !

Rechercher des sujets similaires à "table matieres"