XL 2019 VBA : revenir à la feuille précédente ActiveSheet.Previous.Select

Fabien.Romo

XLDnaute Nouveau
Bonjour à tous,

je cherche depuis un moment comment me promener d'une feuille à l'autre dans mon tableur.
  1. Les feuilles sont nombreuses ( environ 50 ).
  2. j'ai créé des boutons qui permettent d'aller vers une feuille précise, via une macro créée depuis l'enregistreur. ( débutant je fais au mieux 😏 )
mon objectif :
avoir un bouton cliquable qui me permette de revenir à la dernière feuille sélectionnée, sachant que cette dernière n'est pas numérotée Sheet-1 : on peut venir d'une feuille quelconque

J'ai cherché via :
Code:
Sub afficher_fprecedente()
ActiveSheet.Visible = False
ActiveSheet.Previous.Select
    
End Sub

mais : ça plante et la ligne ActiveSheet.Previous.Select s'allume en jaune.....🥴

Merci d'avance à ceux qui sauront m'aider !

Fabien
 
Solution
Bonjour Fabien.Romo, Phil69970, le forum

@Fabien.Romo , j'ai modifié votre code de Thisworkbook et cela devrait correspondre à ce que vous recherchez.
j'ai ajouté un raccourci clavier Ctrl Shift N
si la feuille active n'est pas le sommaire, on la masque par un raccourci clavier Ctrl Shift N ce qui revient à la feuille précédemment sélectionnée du classeur (fonctionnement par défaut d'Excel), cela fonctionne en chaine jusqu'au retour au sommaire.

Bonne année,
Cordialement,
Bernard_XLD

VB:
Private Sub Workbook_SheetDeactivate(ByVal Ws As Object)
Application.OnKey "+^{N}", "'" & ThisWorkbook.Name & "'!ThisWorkbook.Return_Precedente"
End Sub
Private Sub Return_Precedente()
With ActiveSheet
    If Not .Name = "sommaire général" Then...

Fabien.Romo

XLDnaute Nouveau
Bonjour @Phil69970,

je te remercie d'avoir pris du temps pour rédiger ce code.
si j'essaie de décrypter ce que tu as fait :
  • dans le code de ThisWorkbook, tu crées une petite macro qui, lorsque dans le classeur une feuille est fermée, affecte le nom "Mem" ( pour Mémoire je suppose ) à cette feuille fermée.
  • Tu définis préalablement à Ws ( Worksheet je suppose ? ) une valeur d'objet. je suppose que tu utilise Ws car VB ne reconnaitrait pas directement Mem. Mais pourquoi ne pas utiliser Ws directement ensuite ? Question de néophyte sans doute ;)

  • Dans le code du module 1, tu commence par écrire : Public Mem As Worksheet. Je vois bien que ça doit être indispensable mais cela m'échappe. je veux bien tes lumières
  • la suite du code Fprec je comprends bien je crois.
j'ai testé dans mon fichier, en copiant ton code et ça fonctionne. En revanche, je souhaite que l'onglet que l'on quitte se ferme lorsqu'on exécute la macro : jamais qu'un seul onglet ouvert ( ce classeur est partagé avec des gens qui se perdent dans tous les onglets et il me faut réaliser quelque chose qui les guide, sans qu'ils puissent se perdre )
je rajouterais bien une ligne du type : ActiveSheet.Visible = False avant l'ordre Mem.select, mais dans ce cas je crains qu'on ne tourne en boucle car alors c'est cette feuille qui prendra la valeur Mem ! on resterai sur la même feuille je pense ?
j'ai essayé de bricoler à ma façon, tu va vite voir ce que j'ai tenté, mais cela ne fonctionne pas !

dans tous les cas je te remercie pour ton aide !

Fabien
 

Pièces jointes

  • Ou je viens V-fabien.xlsm
    20.7 KB · Affichages: 1

Phil69970

XLDnaute Barbatruc
@Fabien.Romo

Quelques remarques :

Ce que tu veux faire et comme tu veux le faire ne peux pas fonctionner
Exemple si tu as 3 feuilles

Si j'ai compris tu as toujours qu'une seule feuille visible donc quand tu ouvres le classeur tu ne vois que la feuille F1 donc F2 et F3 sont masquées par exemple
qu'un seul onglet ouvert ( ce classeur est partagé avec des gens qui se perdent dans tous les onglets et il me faut réaliser quelque chose qui les guide, sans qu'ils puissent se perdre )

A)
F1 ==> Visible
F2 ==> Masquée mais c'est la feuille précédente
F3 ==> Masquée

Imaginons tu es sur F1 que tu veux aller dans la feuille précédente F2
La macro va dans la feuille F2 la rendre visible et masquée la feuille F1 ==> ok

B)
Tu es sur F2 que tu veux aller dans la feuille précédente F1
La macro va dans la feuille F1 la rendre visible et masquée la feuille F2 ==> ok

Tu seras alors dans cette configuration :
F1 ==> Masquée mais c'est la feuille précédente
F2 ==> Visible
F3 ==> Masquée

C)
Si tu veux revenir sur F1 tu reviens en position A)

D)

Mais comment tu fais pour aller dans la feuille F3 qui est je te le rappelle est masquée ????????
C'est impossible car elle est "précédente" d'aucune feuille !!!
Et idem si tu as 50 feuilles tu ne pourras aller que vers la feuille F1 et F2 et jamais dans les 48 autres feuilles ==> Voir exemple du fichier avec impossibilité d'aller sur la 3 eme feuille !!!!

E)

ce classeur est partagé avec des gens qui se perdent dans tous les onglets et il me faut réaliser quelque chose qui les guide, sans qu'ils puissent se perdre
Comment le fichier est partagé !!!
Pas certain que les macros fonctionnent correctement avec le fichier partagé.

De plus quand je vois un fichier de 50 feuilles je me dis que l'optimisation n'est probablement pas au rendez vous.

En conclusion

Toute ta logique est à revoir avec par exemple une page d'accueil avec la liste des feuilles et l'utilisateur clique sur la feuille "XX"
==> La feuille accueil ET la feuille "XX" sont UNIQUEMENT visible et les autres feuilles sont masquées. Tu devrais trouvé des exemples sur ce principe sur le site car c'est un classique pour ce genre de cas. ==> ou fournir un vrai fichier représentatif de ton fichier .....

Bonne lecture
 

Pièces jointes

  • Ou je viens V2.xlsm
    20.6 KB · Affichages: 1
Dernière édition:

Phil69970

XLDnaute Barbatruc
Perso je suis aussi autodidacte et on a tous commencé un jour;)

Et j'ai galéré souvent et il m'arrive encore de galérer 🤔

J'attends ton fichier et je regarderais si je peux rationaliser tout ça !!!!

Tu peux zipper le fichier et en dernier recours tu mets le fichier sur Cjoint et tu mets le lien pour le récupérer .....
 

Fabien.Romo

XLDnaute Nouveau
Bonjour @Phil69970,

J'ai fini par comprendre ce qui pesait si lourd dans ce fichier : des images animées que j'avais disséminées dans quelques onglets histoire de faire sourire. Une fois supprimé cela va beaucoup mieux.
du coup voilà mon fichier, purgé de toutes les données sensibles.

concernant ton essai v3, c'est exactement ce que j'ai fait je crois. mais je ne suis pas allé voir les macro ( pas encore )

Bon du coup, tu verras, dans mes macros, c'est le bazar : elles sont disséminées un peu partout dans des modules qui se créent au fil de l'eau, car je ne manipule vraiment pas bien VB.

les maisons sont les liens entre les différents onglets, et les couleurs de ces dernières sont associées à celle de l'onglet.
les flèches vertes sont des retours vers la feuille précédente d'après la macro que tu as conçue dans ton premier fichier.

NB : effectivement, l'onglet accueil reste toujours visible. donc il peut y avoir jusqu'à deux onglets ouverts ( pour répondre à ton message plus haut.

Je te souhaite une bonne journée ainsi qu'un joyeux réveillon.

Fabien
 

Pièces jointes

  • gestionnaire AAG 2024 - Copie.xlsm
    950.8 KB · Affichages: 3
Bonjour Fabien.Romo, Phil69970, le forum

@Fabien.Romo , j'ai modifié votre code de Thisworkbook et cela devrait correspondre à ce que vous recherchez.
j'ai ajouté un raccourci clavier Ctrl Shift N
si la feuille active n'est pas le sommaire, on la masque par un raccourci clavier Ctrl Shift N ce qui revient à la feuille précédemment sélectionnée du classeur (fonctionnement par défaut d'Excel), cela fonctionne en chaine jusqu'au retour au sommaire.

Bonne année,
Cordialement,
Bernard_XLD

VB:
Private Sub Workbook_SheetDeactivate(ByVal Ws As Object)
Application.OnKey "+^{N}", "'" & ThisWorkbook.Name & "'!ThisWorkbook.Return_Precedente"
End Sub
Private Sub Return_Precedente()
With ActiveSheet
    If Not .Name = "sommaire général" Then .Visible = xlSheetHidden
End With
End Sub

exemple.gif
 

Pièces jointes

  • gestionnaire AAG 2024 - Copie.xlsm
    958.3 KB · Affichages: 3
Dernière édition:
Bonjour

@Fabien.Romo ,en relisant tous les énoncés et le fichier, j'ai pensé que j'étais peut être hors sujet avec un raccourci alors j'ai supprimé ma réponse.
je la rétablis si un raccourci peut vous convenir.
Après si vous voulez plutôt utiliser vos boutons pour fermer les feuilles, un simple
ActiveSheet.Visible = xlSheetHidden
dans le code du bouton suffira, la feuille précédemment sélectionnée s'affichera directement si elle n'a pas été cachée entretemps, et cela jusqu'au retour au sommaire.

Cordialement
 

Statistiques des forums

Discussions
315 235
Messages
2 117 631
Membres
113 215
dernier inscrit
guillet