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.
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 SubMerci 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 SubOuï 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 SubC'est tout à fait ça ! merci beaucoup et bonne soirée !