Lien hypertexte automatique sommaire

Bonjour,

J'ai un classeur de séance d'entrainement auquel j'aimerais que dans le sommaire apparaisse automatiquement les liens hypertextes des nouvelles séances créés.

Comment dois-je procéder?

Merci d'avance

Mermill

Bonjour Mermill,

Peut-être avec ceci

Sub Creation()
  Dim nLig As Long
  Dim sNom As String
  ' creation d'onglet modèle
  Application.ScreenUpdating = False
  Sheets("Seance").Visible = xlSheetVisible
  Sheets("Seance").Copy After:=Sheets(Sheets.Count)
  sNom = ActiveSheet.Name
  Sheets("Seance").Visible = xlSheetHidden
  Application.ScreenUpdating = True
  ' Ajouter au sommaire
  With Sheets("Liste de séances")
    .Activate
    nLig = .Range("A" & Rows.Count).End(xlUp).Row + 1
    .Hyperlinks.Add Anchor:=.Range("A" & nLig), Address:="", SubAddress:="'" & sNom & "'!A1", TextToDisplay:=sNom
  End With
End Sub

A+

Merci pour le code.

Re,

Sérieux je n'ai fait que modifier le code qui existait déjà dans votre fichier

Non c'est bon j'ai compris comment il fonctionnait.

J'aimerais parcontre pouvoir renommer mes feuils et que cela se mette à jour aussi.

Re,

Nous ne sommes pas magiciens il n'existe pas d'évènement qui permette cela

Il faut donc demander le nom de la feuille par un InputBox par exemple avant de dupliquer le modèle et ainsi pouvoir la renommer

Ah d'accord.

Alors est-ce qu'il est possible de créer un bouton de mis à jour de ma liste?

En fonction des séances que je créerais

Bonjour,

Une macro alternative qui demande le nom de la feuille avant création :

Sub Creation2()
  ' recuperation nom nouvelle feuille
  Dim nomFeuil As String
  nomFeuil = Application.InputBox("Entrez le nom de la nouvelle séance :", "Nom feuille", vbNullString, Type:=2)

  ' verification nom valide
  If VBA.Trim$(nomFeuil) = vbNullString Then
    nomFeuil = "Séance"
  End If

  Dim ws As Worksheet
  For Each ws In ThisWorkbook.Worksheets
    If StrComp(ws.Name, nomFeuil, vbTextCompare) = 0 Then
      nomFeuil = nomFeuil & Format(Now, "yyyymmdd_hhmmss")
    End If
  Next ws

  ' copie de la feuille modele
  Application.ScreenUpdating = False

  With ThisWorkbook.Worksheets
    .Item("Seance").Visible = xlSheetVisible
    .Item("Seance").Copy After:=.Item(.Count)
    With .Item(.Count)
      .Name = nomFeuil
      .Visible = xlSheetVisible
      .Activate
    End With
    .Item("Seance").Visible = xlVeryHidden
  End With

  Application.ScreenUpdating = True
End Sub

Re,

et merci pour votre aide.

Pour faire plus simple, j'aimerais, lorsque j'écris dans la colonne A le nom de ma feuil seance (2,3,4...) que cela devienne un lien vers la séance.

Est-ce possible?

Pas besoin de générer la liste de séance automatiquement.

Bonjour,

Dans ce cas on peut tweaker Creation2 (module Creation_modele) en une fonction qui renvoie la nouvelle feuille, comme ceci :

Public Function Creation2(nomFeuil As String) As Worksheet
  ' verification nom valide
  If VBA.Trim$(nomFeuil) = vbNullString Then
    nomFeuil = "Séance"
  End If

  Dim ws As Worksheet
  For Each ws In ThisWorkbook.Worksheets
    If StrComp(ws.Name, nomFeuil, vbTextCompare) = 0 Then
      nomFeuil = nomFeuil & Format(Now, "yyyymmdd_hhmmss")
    End If
  Next ws

  ' copie de la feuille modele
  Application.ScreenUpdating = False

  With ThisWorkbook.Worksheets
    .Item("Seance").Visible = xlSheetVisible
    .Item("Seance").Copy After:=.Item(.Count)
    With .Item(.Count)
      .Name = nomFeuil
      .Visible = xlSheetVisible
      .Activate
    End With
    .Item("Seance").Visible = xlVeryHidden

    Set Creation2 = .Item(.Count)
  End With

  Application.ScreenUpdating = True
End Function

Et ensuite, dans le code de la feuille "Liste des séances", ajouter l'évènement suivant :

Private Sub Worksheet_Change(ByVal Target As Range)
  If Application.Intersect(Target, Range("A:A")) Is Nothing Then Exit Sub
  If Target.Count > 1 Then Exit Sub
  If Target.Value = vbNullString Then Exit Sub

  ' creation feuille seance
  Dim linkSht As Worksheet
  Set linkSht = Creation2("Séance_" & Target.Value)

  ' ajout hyperlien
  Target.Hyperlinks.Add _
    Anchor:=Target, _
    Address:="", _
    SubAddress:=linkSht.Range("A1").Address(external:=True)
End Sub

Notez bien : j'ai mis le préfixe "Séance_" que vous pouvez voir ci-dessus. Cependant cela casse vos hyperliens manuels. Vous pouvez le retirer (c'est à dire utiliser Set linkSht = Creation2(Target.Value) ) pour que le nom de feuille soit exactement celui entrée en colonne A.

Rechercher des sujets similaires à "lien hypertexte automatique sommaire"