XL 2013 Page suivante dans projet a plusieurs feuilles masquées

Benes

XLDnaute Nouveau
Bonjour

Je suis face a un mur et mes 2 semaines d’expérience VBA m’empêche de passer de l'autre coté. J'aurai besoin d'un petit coup de main.
Pour plus de clarté, j'ai refait un petit bout de code qui reprend mon soucis.

J'ai une feuille non masqué qui est l’accueil et une série de feuilles masquées (sauf 1 ELeve1) qui sont les élèves

Je cherche a faire 3 boutons sur mes feuilles élèves
1 Précédent
2 Accueil
3 Suivant

Quand j'appuie sur suivant ça doit masqué ma feuille eleve1 pour démasquer la feuille eleve2 et un si de suite.
J'ai réussi a le faire avec une méthode qui ne plaira certainement pas aux pro mais bon (si il y a plus simple je suis preneur).
Mon problème c'est que quand je suis sur la dernière feuille, BUG. Et oui il n'y a plus rien a afficher.

Je n'arrive pas a m'en sortir. Merci pour le bon samaritain qui passerai par là pour le coup de main.
 

Pièces jointes

  • TEST_PAGE_SUIVANTE.xlsm
    73.4 KB · Affichages: 8
Dernière édition:
Solution
Ok si c'est juste pour les feuilles suivantes et précédentes, voilà un peu de code:
VB:
Sub PagePrecedente()
    If ActiveSheet.Index <= ActiveSheet.Parent.Worksheets("Accueil").Index + 1 _
    Or ActiveSheet.Index <= 1 Then
        MsgBox "C'est la permière page Élève"
    Else
        ActiveSheet.Parent.Worksheets(ActiveSheet.Index - 1).Visible = xlSheetVisible
        ActiveSheet.Visible = xlSheetHidden
    End If
End Sub

Sub PageSuivante()
    If ActiveSheet.Index >= ActiveSheet.Parent.Worksheets.Count Then
        MsgBox "C'est la dernière page Élève"
    Else
        ActiveSheet.Parent.Worksheets(ActiveSheet.Index + 1).Visible = xlSheetVisible
        ActiveSheet.Visible = xlSheetHidden
    End If
End Sub

Dudu2

XLDnaute Barbatruc
Bonjour,
Tu as une feuille "Eleve1" puis des feuilles "0", "1", "2", "3".
Donc il n'y a pas de feuille "Eleve2".
Est-ce que le nom de la feuille n'a pas d'importance et c'est juste sur la feuille suivante ou précédente, qu'elle soit "EleveX" ou pas que tu veux aller ?
 

Benes

XLDnaute Nouveau
Bonsoir
Oui tout a fait, il me faut la feuille suivante ou précédente sans savoir son nom. C'est vraie que j'ai refait un exemple a la va vite et effectivement je ne les ai pas renommé eleve1 eleve2 etc. A vraie dire dans la réalité ce sont les vrais noms des élèves.
 

Dudu2

XLDnaute Barbatruc
Ok si c'est juste pour les feuilles suivantes et précédentes, voilà un peu de code:
VB:
Sub PagePrecedente()
    If ActiveSheet.Index <= ActiveSheet.Parent.Worksheets("Accueil").Index + 1 _
    Or ActiveSheet.Index <= 1 Then
        MsgBox "C'est la permière page Élève"
    Else
        ActiveSheet.Parent.Worksheets(ActiveSheet.Index - 1).Visible = xlSheetVisible
        ActiveSheet.Visible = xlSheetHidden
    End If
End Sub

Sub PageSuivante()
    If ActiveSheet.Index >= ActiveSheet.Parent.Worksheets.Count Then
        MsgBox "C'est la dernière page Élève"
    Else
        ActiveSheet.Parent.Worksheets(ActiveSheet.Index + 1).Visible = xlSheetVisible
        ActiveSheet.Visible = xlSheetHidden
    End If
End Sub
 
Dernière édition:

Dudu2

XLDnaute Barbatruc
Pour être très précis, je n'aurais pas dû qualifier les feuilles avec ThisWorkbook mais avec ActiveSheet.Parent. Mais bon en l'occurrence c'est du pinaillage.
.../...
Et voilà, je n'ai pas pu m'empêcher de corriger :)
 
Dernière édition:

Benes

XLDnaute Nouveau
Whaaaa!!!! Merci ça fonctionne!! Jamais j'aurai trouvé ça tout seul avec les .parent et .index...

Ou je peux trouver tout ça? Je veux dire, j'ai fais des recherche avec des ActiveSheet.Quelqueschoses tous ce que je pourrai mettre derrière(apres le point), mais j'ai pas vraiment trouvé une doc qui référence tous comme (.Parent) ou (.Index) ou autre avec les explications qui vont avec. J'ai bien vu les pages Microsoft mais ou je m'y prends mal ou ce n'est pas assez complet...

En tous cas grand merci a toi, j'vais pouvoir avancer.
 

Benes

XLDnaute Nouveau
Pour le pinaillage je ne vois pas dans ton code de (ThisWorkbook ) mais je vois bien du (ActiveSheet.Parent. ) du coup je vois pas trop.
Mais bon mon niveau est extrêmement loin de ce genre de pinaillage.

(Ah, a moins que tu l'ai rectifier avant que je vois ton post original...)
 

Dudu2

XLDnaute Barbatruc
Bonjour,
Les ActiveSheet.Index tu peux les trouver facilement.

Le pinaillage (en effet corrigé par la suite):
Pourquoi utiliser ActiveSheet.Parent plutôt que ThisWorkbook ?

ActiveSheet.Parent c'est le parent de l'objet Activesheet, et donc le Workbook dans lequel elle se trouve.
Les fonctions qui codent page suivante / précédente sont dans un module indépendant, et rien ne dit qu'elles sont appelées par le classeur dans lequel elles se trouvent. Ce ne serait pas le cas si elles se trouvaient directement dans le code d'une feuille ou le code du Workbook.

Or on peut en effet appeler les macros d'un classeur X à partir d'un autre classeur Y (tu peux le vérifier en ouvrant plusieurs classeurs puis l'onglet Développer / Macros, en bas il t'est proposé les macros de tous les classeurs ouverts comme 1ère option).
Et si c'était le cas d'un classeur Y appelant les macros de ce classeur X, c'est bien les pages du classeur Y qu'il faudrait tourner et pas celles du classeur X.
ThisWorkbook fait toujours référence à ce classeur X et ActiveSheet.Parent au classeur Y appelant.

C'est du pinaillage car ces macros sont en fait appelées à partir des boutons dont le code évènement clic est sur une feuille du classeur et tu ne feras jamais un appel à ces fonctions du module indépendant à partir d'un autre classeur.
 

Dudu2

XLDnaute Barbatruc
Il ne faut jamais dire jamais ! :eek:

Car, inspiré par un autre sujet, concernant l'appel des macros page suivante / précédente / accueil, une option intéressante serait qu'elles soient placées effectivement dans un autre classeur dont le rôle serait strictement limité à porter ces macros, de manière à t'éviter d'avoir à placer les 3 boutons sur chacune des pages élève ainsi que leur code dans le VBA du classeur élève.

Pour rendre accessibles les fonctions de page suivante / précédente / accueil, les macros de ce classeur seraient placées en barre d'outil.

Le mode opératoire serait donc d'ouvrir le classeur des élèves ET le classeur en question de manière à rendre les macros disponibles. Puis du classeur élèves, cliquer sur les icônes de la barre d'outil pour passer d'une page à une autre.

Si cette option t'intéresse je peux tenter de le faire.
 

Benes

XLDnaute Nouveau
Bonsoir

Euh je dirai qu'il va déjà me falloir un peu de temps pour digérer tes explications.

Cette option m’intéressera certainement mais sur une autre application mais pas dans ce cas précis que je développe.

Pour l'instant ce que tu m'as donné est parfait pour mes besoins, surtout que je cache tous les bandeau Excel dont aussi la barre outil (en rapport si j'ai tout bien compris).

D’ailleurs ça m’amène un nouveau problème qui quand je cache les bandeaux et que je lance une petite macro je n’arrive plus à cliquer nul part, mais ça, se sera un autre post quand j'aurai bien bataillé et que je ne trouverai pas de solution.

Encore merci pour ton aide, et a bientôt surement.
 

Discussions similaires

Statistiques des forums

Discussions
311 733
Messages
2 082 015
Membres
101 868
dernier inscrit
pierreselo33