Un + des liens vers des onglets

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

WDAndCo

XLDnaute Impliqué
Bonjour le Forum

J'ai cette Macro réalisé avec l'aide de ce forum, qui me mets dans la colonne G des noms d'onglets qui remplissent certaines conditions.
Ma question : est il possible que ces par Exemple C1 ou C45 soit des liens qui pointent vers l'onglet C1 ou C45. J'ai mis dessous une autre Macro trouvé ici aussi mais que je n'arrive pas a adapté.

Sub Recape()
Dim Wb As Worksheet
Dim L As Byte
With Sheets("Récap")
.Range("E7:E76").ClearContents ' Efface les colonne et ligne qui vont etre utilisé
.Range("G7:G76").ClearContents ' Efface les colonne et ligne qui vont etre utilisé
End With
Application.ScreenUpdating = False
For Each Wb In Worksheets
If Not Wb.Name = "Récap" And Not Wb.Name = "Copie" Then
Wb.Activate
If Sheets(Wb.Name).Range("I4") = "Ok" Then 'Ne dois prendre en compte que les "Ok"
For L = 7 To 76
If Sheets(Wb.Name).Range("E" & L) = "NC" Then Sheets("Récap").Range("E" & L).Value = Sheets("Récap").Range("E" & L).Value + 1: Sheets("Récap").Range("G" & L).Value = Sheets("Récap").Range("G" & L).Value + Wb.Name + " - "
Next L
End If
End If
Next Wb
Application.ScreenUpdating = True
Sheets("Récap").Select
Range("G4").Select
End Sub

Sub creer_lien()
Dim lien As String
For i = 2 To Worksheets.Count
Range("A" & i) = Sheets(i).Name
lien = "'" & Sheets(i).Name & "'!A1"
With Sheets("Feuil1")
.Hyperlinks.Add .Range("b" & i), Address:="", SubAddress:=lien
End With
Next i
End Sub

Si un de vous peut me donner un coup de main ? D'avance merci


Dominique 🙂
 
Re : Un + des liens vers des onglets

Salut WDAndCo et le Forum
Pour t'aider, il faudrait que je comprennes ton code, et ce n'est pas le cas :
Sub Recape()
Dim Wb As Worksheet
Dim L As Byte
Pour les lignes, je déclare toujours les variables en Long : ça évite les surprises de dépassement de capacité
With Sheets("Récap")
.Range("E7:E76").ClearContents
.Range("G7:G76").ClearContents
.range("E7:E76,G7:G76").clearcontents
ça te plais pas ?
End With
Pourquoi tu n'utilises pas la mise en préfixe de la feuille sur toute ta macro ? Si tu mets le End With juste avant de finir la macro, à chaque fois qu'une instruction commence par [Sheets"Récap").], tu peux utiliser [.] : plus facile et moins de risque d'erreur
Application.ScreenUpdating = False
Moi, je gère systèmatiquement les erreurs d'Excel quand j'utilise une instruction dans le champ d'action est Excel
For Each Wb In Worksheets
If Not Wb.Name = "Récap" And Not Wb.Name = "Copie" Then
Wb.Activate
sert à rien de l'activer
If Sheets(Wb.Name).Range("I4") = "Ok" Then
??? If Wb.Range("I4") = "Ok" Then : tu as défini la feuille que tu traites comme étant une variable objet "Wb". Utilises-la !
For L = 7 To 76
If Sheets(Wb.Name).Range("E" & L) = "NC" Then Sheets ("Récap").Range("E" & L).Value = Sheets("Récap").Range("E" & L).Value + 1: Sheets("Récap").Range("G" & L).Value = Sheets("Récap").Range("G" & L).Value + Wb.Name + " - "
si tu utilises [:] pour mettre 2 instructions sur la même ligne.À part rendre le code moins lisible, je ne vois pas le nut ?
Si tu utilises la mise ne préfixe du début, tes instructions deviennent :
If Wb.Range("E" & L) = "NC" Then
.Range("E" & L) = .Range("E" & L) + 1
.Range("G" & L) = .Range("G" & L) & Wb.Name & " - "
Bien que le [+] fonctionne aussi pour le texte, utilises plutot [&] dans ce cas : toujours un problème de lisibilité
Next L
End If
End If
Next Wb
Application.ScreenUpdating = True
'comme tu ne gères pas les erreurs, si Excel détecte une erreur entre la mise à False et la mise à True, il avertit et arrête la macro à l'endroit où il est. Donc, sans remettre en route le rafraîchissement écran, et tu ne le sais pas. Peut avoir ces conséquences amusantes, surtout si tu ouvres un autre fichier et que tu travailles dessus.
Sheets("Récap").Select
Si le end With n'a pas été mis : .select
Moi, je préfére .activate , mais chacun son code
Range("G4").Select
End Sub
---------------------------------------------------
Sub creer_lien()
Dim lien As String
Dim i as long
Pourquoi ne déclarer qu'une partie des variables ?
With Sheets("Feuil1")
'mise en préfixe
For i = 2 To Worksheets.Count
Je suppose que la Feuil1 est la première du classeur
.Range("A" & i) = Sheets(i).Name
J'ai rajouter un point devant range, qui lui dit (avec le préfixe), qu'on ne parle pas de n'importe quelle feuille (la dernière activée)
lien = "'" & Sheets(i).Name & "'!A1"
Variable qui n'est pas obligatoire, mais qui peut rendre plus lisible
.Hyperlinks.Add .Range("b" & i), Address:="", SubAddress:=lien, TextToDisplay:=sheets(i).name
Next i
End With
End Sub
Tout ça fonctionne, et je ne comprend pas ta question : le texte du lien est, par défaut, celui de l'adresse, sinon, il faut lui préciser.

Précise ton problème

A+
NB : pour tes exemples, évite les noms ambigus : C1, C45, peuvent être des noms d'onglets, mais comme c'est aussi des adresses de cellules, il est possible que mon incompréhension vienne de là.
 
Re : Un + des liens vers des onglets

Bonjour Gorfael et le Forum

En faite cela est une suite a ce fil (Mais n'ayant plus le même sujet)
https://www.excel-downloads.com/threads/macro-qui-coince-et-case.81967/

Donc j'ai joint un fichier ou tout est expliqué sur la page Recap, cette page ce remplis automatiquement avec une Macro selon certaines conditions. Est il possible que ces résultats soit des liens vers certaines feuilles de ce dossier ?

Avec le fichier c'est plus clair.

Dominique 🙂
 

Pièces jointes

Re : Un + des liens vers des onglets

Bonjour Gorfael et le Forum

En faite cela est une suite a ce fil (Mais n'ayant plus le même sujet)
https://www.excel-downloads.com/threads/macro-qui-coince-et-case.81967/

Donc j'ai joint un fichier ou tout est expliqué sur la page Recap, cette page ce remplis automatiquement avec une Macro selon certaines conditions. Est il possible que ces résultats soit des liens vers certaines feuilles de ce dossier ?

Avec le fichier c'est plus clair.

Dominique 🙂
Salut
Sans être sûr à 100% (avec les fous qui traînent sur ce forum, impossible est à proscrire), je ne pense pas que ce soit possible : Le lien Hypertexte n'est pas lié au contenu, mais à la cellule => 1 seul lien possible par cellule
Je me suis amusé avec tes macros :
Code:
Sub nouvellefeuille()
Application.ScreenUpdating = False
Sheets("Copie").Visible = True
Sheets("Récap").Range("F86").Copy
Sheets("Copie").Activate
Range("F86").PasteSpecial Paste:=xlPasteValues
Range("A1") = Range("A1") + 1
Application.CutCopyMode = False
Sheets("Copie").Copy After:=Sheets(2)
Sheets("Copie (2)").Name = "C" & Range("A1")
Sheets("Copie").Visible = False
Sheets("C" & Range("A1")).Activate
Range("E1").Select
Application.ScreenUpdating = True
End Sub
Sub Recape()
Dim Wb As Worksheet
Dim L As Byte
With Sheets("Récap")
    .Range("E7:E76,G7:G76").ClearContents  ' Efface les colonne et ligne qui vont etre utilisé
    Application.ScreenUpdating = False
    For Each Wb In Worksheets
        If Not Wb.Name = "Récap" And Not Wb.Name = "Copie" Then
            If Wb.Range("I4") = "Ok" Then 'Ne dois prendre en compte que les "Ok"
                For L = 7 To 76
                    If Wb.Range("E" & L) = "NC" Then
                        .Range("E" & L) = .Range("E" & L) + 1
                        .Range("G" & L) = .Range("G" & L) & Wb.Name & " - "
                    End If
                Next L
            End If
        End If
    Next Wb
    Application.ScreenUpdating = True
    .Activate
    Range("G4").Select
End With
End Sub
A+
 
Re : Un + des liens vers des onglets

Salut
Sans être sûr à 100% (avec les fous qui traînent sur ce forum, impossible est à proscrire), je ne pense pas que ce soit possible : Le lien Hypertexte n'est pas lié au contenu, mais à la cellule => 1 seul lien possible par cellule
A+
Re, donc
For L = 7 To 76
If Wb.Range("E" & L) = "NC" Then
.Range("E" & L) = .Range("E" & L) + 1
.Range("G" & L) = .Range("G" & L) & Wb.Name & " - "
End If
Next L

sur cette ligne .Range("G" & L) = .Range("G" & L) & Wb.Name & " - "
je la remplace par .Cells(L,7+T) = .Cells(L,7+T) & Wb.Name & " - ":T=T+1

et que T=0 avant le For L = 7 To 76, cela devient possible a ton avis ?

Amicalement
Dominique
 
Re : Un + des liens vers des onglets

Bonsoir



J'ai bien une idée
(que je ne suis pas sur de savoir mettre en oeuvre)

En créant par VBA des formes automatiques (rectangles)
à la taille des cellules (en identifiant le texte à afficher dans ces formes en trouvant le - ) et en créant des liens hypertextes sur ces formes, cela pourrait fonctionner non?

Pensez-vous que ce soit une voie à explorer?

Peut-etre que s'il y a trop de formes créés , le classeur s'en trouvera trop alourdi.



voir exemple manuel dans le fichier joint (C3-C2)
 
Re : Un + des liens vers des onglets

Bonsoir Staple1600

Il est que cela marche, voir mon dernier une réponse par colonne en partant de la G cela doit etre possible.
En partant du faite que si il y a 10 contrôles au maximun T = 10, cela devras être pris en compte a l'exécution de la Macro NouvelleFeuille (pour la presentation et attention aussi a partie Nommées.

Je pense que cette voie et plus simple a réalisée !

A votre avis ?

Dominique
 
Re : Un + des liens vers des onglets

Bonsoir Staple1600

Il est que cela marche, voir mon dernier une réponse par colonne en partant de la G cela doit etre possible.
En partant du faite que si il y a 10 contrôles au maximun T = 10, cela devras être pris en compte a l'exécution de la Macro NouvelleFeuille (pour la presentation et attention aussi a partie Nommées.

Je pense que cette voie et plus simple a réalisée !

A votre avis ?

Dominique
Salut
Code:
Sub Recape()
Dim Wb As Worksheet
Dim L As Byte
Dim X As Integer
With Sheets("Récap")
    .Range("E7:E76,G7:Z76").ClearContents
    '+++++++++++++++++++++++++++++++++++++
    Application.ScreenUpdating = False
    For Each Wb In Worksheets
        If Not Wb.Name = "Récap" And Not Wb.Name = "Copie" Then
            If Wb.Range("I4") = "Ok" Then 'Ne dois prendre en compte que les "Ok"
                For L = 7 To 76
                    If Wb.Range("E" & L) = "NC" Then
                        .Range("E" & L) = .Range("E" & L) + 1
                        .Range("G" & L) = .Range("G" & L) & Wb.Name & " - "
                        '+++++++++++++++++++++++++++++++++++++++++++++++++++++++
                        For X = 0 To 20
                            If IsEmpty(.Range("H" & L).Offset(0, X)) Then Exit For
                        Next X
                        .Hyperlinks.Add Anchor:=.Range("H" & L).Offset(0, X), _
                             Address:="", SubAddress:="'" & Wb.Name & "'!A1", _
                             TextToDisplay:=Wb.Name
                         '++++++++++++++++++++++++++++++++++++++++++++++++++++++
                    End If
                Next L
            End If
        End If
    Next Wb
    Application.ScreenUpdating = True
    .Activate
    Range("G4").Select
End With
End Sub
J'ai juste rajouter du code (+++++), en mettant les lien hypertexte à la suite. À adapter suivant ce que tu veux exactement
A+
 
Re : Un + des liens vers des onglets

Merci pour ta réponse.

J'ai collé le code dans la Marco sa a l'air de fonctionner si j'annule toute la fin de la Macro.

Est il possible de faire des Boutons automatiquement qui pointerait vers les pages en lieu et place des liens ?

Amicalement
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
15
Affichages
786
Réponses
4
Affichages
754
Réponses
5
Affichages
911
Retour