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à.