XL 2010 liens hypertexte

submarine22

XLDnaute Junior
Bonjour à tout le forum.
je savoir si il est possible de créer un lien hypertexte d'une façon automatique vers l 'onglet qui est renseigné dans la cellule .
dans le fichier joint, il s'agit des cellule à partir de B8 sur la feuille "calendrier des dates" cette colonnes s' incrémente automatiquement du noms des onglets lorsqu'ils sont crées et je souhaiterais si possible que dans le même temps la cellule crée un lien hypertexte vers cet onglet.
Merci par avance de vos réponses.
 

Pièces jointes

  • OCTOBRE 2019 CLAUDE MONET.xls
    714.5 KB · Affichages: 23

danielco

XLDnaute Accro
Bonjour,

Dans le module de la feuille "calendrier des dates", remplace le code existant par :

VB:
Private Sub Worksheet_Activate()
With ActiveWorkbook
  .Sheets("calendrier des dates").Range("B8:B30").ClearContents
  For n = 3 To .Sheets.Count
    Cells(n, 1).Range("b6") = .Sheets(n).Name
  Next
End With
CreeHyperlien
End Sub
Sub CreeHyperlien()
  Dim C As Range, I As Long
  With Sheets("calendrier des dates")
    On Error Resume Next
    For I = .Hyperlinks.Count To 0 Step -1
      .Hyperlinks(I).Delete
    Next I
    On Error GoTo 0
    For Each C In .[B8:B32]
      If C.Value <> "" Then
        .Hyperlinks.Add C, "", "'" & C.Value & "'!A1", C.Value
      End If
    Next C
  End With
End Sub

Cordialement.

Daniel
 

Staple1600

XLDnaute Barbatruc
Bonjour le fil,

danielco
Normalement, on peut supprimer les liens sans boucler, non?
VB:
Sub test()
ActiveSheet.Hyperlinks.Delete
End Sub
Donc cela devrait fonctionner, non
With Sheets("calendrier des dates")
.hyperlinks.Delete
'reste du code
 

Eric C

XLDnaute Barbatruc
Bonjour le forum
Bonjour submarine22, danielco, Staple1600 & job75

Je tente de comprendre le code de job75 (au demeurant très épuré, bravo). Pourquoi avoir ajouté dans les liens hypertextes des cellules B8 à BB, le # et la référence !A1 ? J'avoue avoir tenté de supprimer ces 2 valeur, en vain. Je me plonge tout doucement dans le code Vba mais à chaque fois, je me noie :cool:.
Bonne journée à vous toutes & tous
 

submarine22

XLDnaute Junior
Bonjour le forum
Bonjour Eric C, danielco, Staple1600 & job75
Merci pour votre temps passé. je viens de tester le code de Danielco et cela fonctionne du tonnerre, comme je suis pas un expert, je ne me suis pas aventuré plus loin: "ca fonctionne touche plus à rien..."
en tout cas encore merci à vous tous. c'est vraiment un site avec des gens au top:D:D:D:D:D:D:D:D
 

Eric C

XLDnaute Barbatruc
Re,
Il est sûr que quand le code fonctionne... on ne touche plus à rien.... Toutefois et pour notre culture personnelle (pour ma part et en qualité de visiteur), il m'est utile de comprendre et de décortiquer le code de nos brillants forumeurs (Je réclame à cor et à cris l'annotation des codes (comme le fait notre ami Robert) cela nous aide à comprendre le cheminement intellectuel adopté)). Bonne soirée à toutes & à tous
 

Eric C

XLDnaute Barbatruc
@daniel -- Eh oui... le monde est ainsi fait. Je pose ma question .... j'obtiens ma réponse et vu que je n'avais qu'une question, unique, eh bien merci les zamis... ouuups... je ne le ai même pas remercié... Bof de toute façon ce n'était qu'une question et je ne reviendrai pas .... Et cela depuis 2002 mais ainsi va la vie et c'est pour cette raison que de nombreux(ses) pointures ont quitté le site. Mais dans le lots, il en reste... et de nouveaux(elles) recrues viennent fortifier les bases du site de notre ami David, que je salue au passage.
@micalement Eric C
 

Eric C

XLDnaute Barbatruc
Bien sûr que je désire que l'on m'explique, que l'on me décortique un code. Pour ma part, il ne me servira plus mais si je peux apporter, plus tard, une réponse avec ce que j'ai lu, appris et décrypté, grâce à vous, alors oui. Par ailleurs, j'ai débuté grâce à ce site, il était l'un des premiers (à ma connaissance ... à cette époque, nous n'avions pas le temps de découvrir si les concurrents existaient... 3H00 de connexion maxi pour la famille...).. Et la programmation n'es pas mon point fort, je bricole beaucoup et là ... pas besoin de code mais de côtes...lol. Bonne soirée à toutes & à tous
 

danielco

XLDnaute Accro
Bonjour,

Voici le code commenté de la macro de Job75, que je remercie au passage :

VB:
'La macro se déclenche lorsque la feuille "calendrier des dates" est activée
Private Sub Worksheet_Activate()
Dim n&
'Effacemment de la cellule B8 à la dernière cellule de la colonne B
'(B8 est la premmière cellule de dates)
Range("B8:B" & Rows.Count) = ""
'Boucle sur les feuilles de l'index 3 au nombre de feuilles (ici 24)
'l'index est le numéro d'ordre des feuilles
For n = 3 To Sheets.Count
    'Le but est de mettre en colonne B (2) une formule du type =LIEN_HYPERTEXTE("#'01 octobre 2019'!A1")
    'pour aller en A1 de la feuille "01 octobre 2019". Le "#" fait partie de la syntaxe Excel de la fonction
    'LIEN_HYPERTEXTE. La ligne met la formule en B8 pour la feuille d'index 3, B9 pour la
    'feuille d'index 4 etc.
    Cells(n + 5, 2) = "=HYPERLINK(""#'" & Sheets(n).Name & "'!A1"")"
  Next
End Sub
 

danielco

XLDnaute Accro
Voici le code commenté de la macro de danielco modifié par Staple1600, que je remercie au passage :

Code:
'La macro se déclenche lorsque la feuille "calendrier des dates" est activée
Private Sub Worksheet_Activate()
'Avec le classeur actif
With ActiveWorkbook
  'Après une instruction "with", tous les mots commençant par un "." se réfèrent au mot suivant "With"
  'Par exemple, ici, ".Sheets" signifie "ActiveWorkbook.Sheets"
  'Effacement de la plage B8:B30
  .Sheets("calendrier des dates").Range("B8:B30").ClearContents
'Boucle sur les feuilles de l'index 3 au nombre de feuilles (ici 24)
'l'index est le numéro d'ordre des feuilles
  For n = 3 To .Sheets.Count
    'On remplit chaque cellule de la plage avec le nom de la feuille correspondante
    Cells(n, 1).Range("b6") = .Sheets(n).Name
  Next
End With
'On exécute la macro "CreeHyperlien"
CreeHyperlien
End Sub
Sub CreeHyperlien()
  Dim C As Range, I As Long
  With Sheets("calendrier des dates")
    'Gestion des erreurs. On saute les lignes en erreur
    On Error Resume Next
'Effacement de tous les liens hypertexte de la feuille (code fourni par Staple1600)
    .Hyperlinks.Delete
    'Fin de la gestion des erreurs
    On Error GoTo 0
    'Boucle sur les cellules de la plage B8:B32
    For Each C In .[B8:B32]
      'si la cellule n'est pas vide
      If C.Value <> "" Then
        'Ajout d'un lien hypertexte. Le premier paramètre est l'adresse qui ne sert pas
        'quand le lien pointe à l'intérieur du classeur, le deuxième, la sous-adresse
        'Indique le nom de la feuille encadré d'apostrophes et la cellule (adresse Excel classique)
        'Le dernier est le texte à afficher, ici le texte préexistant dans la cellule, c'est à dire
        'le mois
        .Hyperlinks.Add C, "", "'" & C.Value & "'!A1", C.Value
      End If
    Next C
  End With
End Sub

Je reste à ta disposition pour toute explication complémentaire.

Daniel
 

Eric C

XLDnaute Barbatruc
Re,
Bonjour & merci Danielco pour cet exercice d'annotation. Bien que la proposition de job75 (à qui je souhaite de bonnes vacances) soit concise je préfère la tienne qui n'encombre pas les cellules "hypertextées" des valeurs "# puis A1!". Je ne suis pas parvenu à retirer ces valeurs "visuellement génantes". Peut être que tu as la solution. Encore grand merci à toi et bonne après-midi.
@+ Eric c
 

Discussions similaires