OVH Cloud OVH Cloud

lister onglets visibles seulement

3 réponses
Avatar
gilles
bonjour,
j'ai l'extrait de code suivant qui liste des onglets avec des liens
hypertexte
sur un fichier d' une trentaine d'onglets, et qui numérote les pieds de pages.

'création_liste_des_feuilles_avec_liens_hypertextes
With Application
.ScreenUpdating = False
.DisplayAlerts = False
End With
On Error Resume Next
Sheets("Sommaire").Delete
Sheets.Add(Before:=Sheets(1)).Name = "Sommaire"
[a1] = "Liste des onglets du classeur"

For i = 2 To Sheets.Count
If Sheets(i).Name <> "info affaire" Then
If Val(Application.Version) > 8 Then
ActiveSheet.Hyperlinks.Add Anchor:=[A65536].End(xlUp)(2), _
Address:="", SubAddress:="'" & Sheets(i).Name & "'!A1", _
TextToDisplay:=Sheets(i).Name
Else
Range([A65536].End(xlUp)(2).Address) = Sheets(i).Name
ActiveSheet.Hyperlinks.Add Anchor:=[A65536].End(xlUp)(1), _
Address:="", SubAddress:="'" & Sheets(i).Name & "'!A1"
End If
End If
Next i
' numérote les pieds de pages
For f = 1 To Sheets.Count
If wks.Visible = True Then
If wks.Name <> ("info affaire") And wks.Name <> "Sommaire" Then ' nom de
la feuille à exclure
Sheets(f).PageSetup.RightFooter = "Page " & f - 2 & " de " & Sheets.Count
- 2
Sheets(f).PageSetup.CenterFooter = "N° PC 18-" & Sheets("info
affaire").[S1]
End If
End If

je voudrais que le code ne liste que les onglets visibles qu'à chaque
utilisation , je masque tous ceux inutilisés.

Si un dieu VBA de passage peut m'apporte sa lumière celeste ....
Merci d'avance
--
gilles72

3 réponses

Avatar
poy-poy
Bonjour Gilles,

Tu as mélangé les 2 codes ( celui de Chris et le mien ) pour les feuilles
masquées.
Du coup, la fin de ton code plante forcement. Choisis en un et cela dervrait
mieux marcher :
soit
dim wks as worksheet
...
for each wks in activeworkbook.worksheets
Puis tu travailles sur wks pas sur sheets(f) (soyons un peu égoiste et
mettons son code en premier lol)
...
next

soit
dim f as integer
...
For f = 1 To Sheets.Count
et tu travailles sur sheets(f) et pas sur wks
...
next f

Cordialement
Benjamin


bonjour,
j'ai l'extrait de code suivant qui liste des onglets avec des liens
hypertexte
sur un fichier d' une trentaine d'onglets, et qui numérote les pieds de pages.

'création_liste_des_feuilles_avec_liens_hypertextes
With Application
.ScreenUpdating = False
.DisplayAlerts = False
End With
On Error Resume Next
Sheets("Sommaire").Delete
Sheets.Add(Before:=Sheets(1)).Name = "Sommaire"
[a1] = "Liste des onglets du classeur"

For i = 2 To Sheets.Count
If Sheets(i).Name <> "info affaire" Then
If Val(Application.Version) > 8 Then
ActiveSheet.Hyperlinks.Add Anchor:=[A65536].End(xlUp)(2), _
Address:="", SubAddress:="'" & Sheets(i).Name & "'!A1", _
TextToDisplay:=Sheets(i).Name
Else
Range([A65536].End(xlUp)(2).Address) = Sheets(i).Name
ActiveSheet.Hyperlinks.Add Anchor:=[A65536].End(xlUp)(1), _
Address:="", SubAddress:="'" & Sheets(i).Name & "'!A1"
End If
End If
Next i
' numérote les pieds de pages
For f = 1 To Sheets.Count
If wks.Visible = True Then
If wks.Name <> ("info affaire") And wks.Name <> "Sommaire" Then ' nom de
la feuille à exclure
Sheets(f).PageSetup.RightFooter = "Page " & f - 2 & " de " & Sheets.Count
- 2
Sheets(f).PageSetup.CenterFooter = "N° PC 18-" & Sheets("info
affaire").[S1]
End If
End If

je voudrais que le code ne liste que les onglets visibles qu'à chaque
utilisation , je masque tous ceux inutilisés.

Si un dieu VBA de passage peut m'apporte sa lumière celeste ....
Merci d'avance
--
gilles72


Avatar
gilles
bonjour benjamin
si je comprends bien , c'est toi le dieu de service , ces jours-ci !!!
...et merci pour cette remarque perspicace
Entre temps j'ai effectivement remarqué, magré ma nullité vbatisque, ce que
tu me dis là
J'ai tenté de rectifier le code , mais c'est pas encore ça: il me liste
toujours mes 27 onglets alors que j'en ai retenu 6 ou 7
jE REGARDE ça de plus près
merci encore,et à
gilles +


Bonjour Gilles,

Tu as mélangé les 2 codes ( celui de Chris et le mien ) pour les feuilles
masquées.
Du coup, la fin de ton code plante forcement. Choisis en un et cela dervrait
mieux marcher :
soit
dim wks as worksheet
...
for each wks in activeworkbook.worksheets
Puis tu travailles sur wks pas sur sheets(f) (soyons un peu égoiste et
mettons son code en premier lol)
...
next

soit
dim f as integer
...
For f = 1 To Sheets.Count
et tu travailles sur sheets(f) et pas sur wks
...
next f

Cordialement
Benjamin



Avatar
ChrisV
Bonjour Gilles,

Pas sûr d'avoir bien saisi ton principe de numérotation...
(attention aux éventuels sauts de lignes intempestifs...)

Sub zaza()
Dim i As Integer, j As Integer, k As Integer
Dim n As Integer
With Application
.ScreenUpdating = False
.DisplayAlerts = False
End With
On Error Resume Next
Sheets("Sommaire").Delete
Sheets.Add(Before:=Sheets(1)).Name = "Sommaire"
[a1] = "Liste des onglets du classeur"
k = 0
For j = 1 To Sheets.Count
If Sheets(j).Visible = False Then _
k = 1 + k
Next j
n = 0
For i = 2 To Sheets.Count
If Sheets(i).Name <> "info affaire" _
And Sheets(i).Visible = True Then
n = 1 + n
Sheets(i).PageSetup.CenterFooter = "N° PC 18-" _
& Sheets("info affaire ").[S1]
Sheets(i).PageSetup.RightFooter = "Page " & n _
& " de " & Sheets.Count - 2 - k
If Val(Application.Version) > 8 Then
ActiveSheet.Hyperlinks.Add Anchor:=[A65536].End(xlUp)(2), _
Address:="", SubAddress:="'" & Sheets(i).Name & "'!A1", _
TextToDisplay:=Sheets(i).Name
Else
Range([A65536].End(xlUp)(2).Address) = Sheets(i).Name
ActiveSheet.Hyperlinks.Add Anchor:=[A65536].End(xlUp)(1), _
Address:="", SubAddress:="'" & Sheets(i).Name & "'!A1"
End If
End If
Next i
End Sub


ChrisV


"gilles" a écrit dans le message de news:

bonjour benjamin
si je comprends bien , c'est toi le dieu de service , ces jours-ci !!!
...et merci pour cette remarque perspicace
Entre temps j'ai effectivement remarqué, magré ma nullité vbatisque, ce
que
tu me dis là
J'ai tenté de rectifier le code , mais c'est pas encore ça: il me liste
toujours mes 27 onglets alors que j'en ai retenu 6 ou 7
jE REGARDE ça de plus près
merci encore,et à
gilles +


Bonjour Gilles,

Tu as mélangé les 2 codes ( celui de Chris et le mien ) pour les feuilles
masquées.
Du coup, la fin de ton code plante forcement. Choisis en un et cela
dervrait
mieux marcher :
soit
dim wks as worksheet
...
for each wks in activeworkbook.worksheets
Puis tu travailles sur wks pas sur sheets(f) (soyons un peu égoiste et
mettons son code en premier lol)
...
next

soit
dim f as integer
...
For f = 1 To Sheets.Count
et tu travailles sur sheets(f) et pas sur wks
...
next f

Cordialement
Benjamin