XL 2016 Passer à l'onglet suivant

dodineau

XLDnaute Occasionnel
Bonjour,
je voudrais faire une macro qui passe de l'onglet actuel à l'onglet suivant et si je suis au dernier onglet ça revient au 1er.
J'ai donc fait ce code qui fonctionne :
VB:
    a = Sheets.Count
    If ActiveSheet.Name = Sheets(a).Name Then Sheets(1).Select Else ActiveSheet.Next.Select
Le seul probème c'est que j'ai plusieurs onglets masqués et ça bloque le passage.
Quelqu'un aurait-il une idée pour sauter les onglets masqués ?
Merci pour votre aide.
A+
 

jmfmarques

XLDnaute Accro
Bonjour
Quelqu'un aurait-il une idée pour sauter les onglets masqués ?
En voilà une. Elle est bêtement logique :
- faire un array des feuilles non masquées (propriété visible = true)
- parcourir ce seul array de 0 à son ubound
- si ubound atteint, recommencer depuis l'index 0 de cet array.
Cela te parle-t-il un peu ? (j'espère que oui).
 

jmfmarques

XLDnaute Accro
mais je ne suis pas assez calé en tableaux.
Je comprends.
Je veux comprendre également que le copier/coller n'est pas de nature à te rendre indépendant.
Et voilà alors comment je préfère t'apprendre à pêcher --->>
1) On parcourt les feuilles d'un classeur ainsi :
VB:
dim sh as worksheet

for each sh in activeworkbook.worksheets
  .....
next
2) la si une feuille sh n'est pas masquée, sa propriété .visible est = True
3) voici un exemple de déclaration et alimentation d'un array. Ici, on crée un array mon_array et on l'abonde des valeurs paires de 0 à 10 :
Code:
ReDim mon_array(0)
For k = 0 To 10
If k Mod 2 = 0 Then ' (si k est pair)
   mon_array(UBound(mon_array)) = k
   ReDim Preserve mon_array(UBound(mon_array) + 1)
  
End If
Next

'preuve ----

For k = 0 To UBound(mon_array) - 1
  MsgBox mon_array(k)
Next

Tu as là de quoi apprendre, analyser, comprendre et utiliser, pour autant que tu en aies envie.

PS : c'est ainsi (et en aucun cas autrement), que je me suis formé, seul.
Et c'est ainsi, que je suis aujourd'hui en mesure d'aider ;)
 

dodineau

XLDnaute Occasionnel
Merci jmfmarques pour cette aide.
voici mon code qui fonctionne
VB:
Dim sh As Worksheet
nb = Sheets.Count
ReDim mon_array(nb)
a = 0
For Each sh In ActiveWorkbook.Worksheets
    If sh.Visible = True Then
        mon_array(a) = sh.Name
        a = a + 1
    End If
Next
a = a - 1
For i = 0 To Sheets.Count - 1
    If mon_array(i) = ActiveSheet.Name Then
        If i = a Then Sheets(1).Activate Else Sheets(mon_array(i + 1)).Activate
        Exit Sub
    End If
Next i

A+
 

jmfmarques

XLDnaute Accro
Re
Cela montre que tu as mal analysé les rails que je t'ai indiqués ou n'as pas compris
Regarde ce que fait ceci (et commence à pêcher toi également ;)
VB:
Dim sh As Worksheet
ReDim mon_array(0)
For Each sh In ActiveWorkbook.Worksheets
    If sh.Visible = True Then
        mon_array(UBound(mon_array)) = sh.Name
        ReDim Preserve mon_array(UBound(mon_array) + 1)
    End If
Next

'juste pour découvrir ce que tu as ainsi mis dans l'array
For k = 0 To UBound(mon_array) - 1
  MsgBox mon_array(k)
Next
 

Discussions similaires

Réponses
16
Affichages
1 K

Membres actuellement en ligne

Statistiques des forums

Discussions
312 177
Messages
2 085 972
Membres
103 073
dernier inscrit
MSCHOE16