Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

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
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…