Code VBA pour retour à la dernière feuille active

de Rauglaudre

XLDnaute Nouveau
Bonjour,

Je suis face à un problème que je ne peux résoudre. J'ai regrdé ça et là mais les solutions ne correspondent pas à mon cas spécifique.

Je ne peux malheureusement pour l'instant pas envoyer de fichier test mais si besoin, je trouverais un moyen.

Voici la trame de mon fichier :

- Feuille 1 : 2 boutons. Le premier envoi feuille 2, le 2nd envoi feuille 3
- Feuille 2 : 1 bouton. Il envoi Feuille 4
- Feuille 3 : 1 bouton. Il envoi également feuille 4

Sur ma feuille 4, je souhaite pouvoir utiliser un bouton "précédent" qui enverrait vers la page précédente. Vu que mes boutons feuille 2 et 3 renvoient tous les 2 vers la feuille 4, je souhaite que mon bouton précédent sache s'il faut me renvoyer sur la feuille E ou la feuille 3.

Avez vous une solution?

D'avance merci pour votre aide.

PS : j'ai testé des trucs type
bouton()
Last ActiveSheet.Select ou encore previous sheet.select...

mais ça ne fonctionne pas (je suis nul et certainement trop simpliste)
 

de Rauglaudre

XLDnaute Nouveau
Mince, j'avoue que j'ai moins bien compris la philosophie du code. Notamment les couleurs.

Cette partie là ne fait pas partie du code si ?

Public LastActiveSheet As String, CurrentSheet As String

Si oui, tu peux m'expliquer un peu le principe ? Que j'arrive à l'intégrer à mon outil.
 

job75

XLDnaute Barbatruc
Bonjour de Rauglaudre, Claudy, vgendron, Modeste geedee,

Je prends le train en marche, voyez ce code dans ThisWorkbook :
Code:
Dim LastSheet As String 'mémorise la variable

Private Sub Workbook_SheetDeactivate(ByVal Sh As Object)
LastSheet = Sh.Name
If Sh.Name <> "P1" Then Sh.Visible = xlSheetHidden
End Sub

Sub VersP()
If IsError(Application.Caller) Then Exit Sub 'sécurité
Dim o As Object
Set o = ActiveSheet.DrawingObjects(Application.Caller)
If TypeName(o) = "CheckBox" Then o.Value = False
With Sheets(Trim(Replace(o.Text, "Goto", "")))
    .Visible = xlSheetVisible
    .Activate
End With
End Sub

Sub Prec()
If LastSheet = "" Then Exit Sub
With Sheets(LastSheet)
    .Visible = xlSheetVisible
    .Activate
End With
End Sub
Les macros VersP ou Prec sont affectées aux boutons ou aux cases à cocher.

Fichier joint.

A+
 

Pièces jointes

  • Test Prev et Coche(1).xlsm
    43.8 KB · Affichages: 19

de Rauglaudre

XLDnaute Nouveau
Salut,

Merci pour ton retour. Je suis en train d'essayer de comprendre l'idée.

En revanche, quand je test, seule la case cochée ayant mené à la page de retour est effacée. Moi je souhaite tout effacer pour permettre à l'user de repatrir de 0 sur cette page (vu qu'il n'a qu'un choix vu que dès qu'il clic il passe à la page suivante).

Mon blocage était de ne pas pouvoir nommer les coches vu que dépendant de la coche précédente.
 

de Rauglaudre

XLDnaute Nouveau
Et point subsidiaire : quand je rend visible P2, la case est d'office décochée.

En fait, mon souhait est un questionnaire de satisfaction avec des questions dépendantes des réponses précédentes. Selon les choix de l'utilisateur, certaines pages s'activent (et désactivent les précédentes). En revanche, si l'user souhaite revenir en arrière, j'ai envie qu'il puisse suivre le chemin exactement inverse (à lui de voir jusqu'où il veut revenir) et repartir sur des pages de choix vierges. En revanche, s'il ne revient pas, la coche doit rester comme ça, une fois arrivé chez moi, je visualise toute les pages et vois les choix effectués.

Garder les coches est important car dans certain cas, 2 chemins différents peuvent se retrouver sur une même question à mi-chemin.

Avec ma dernière trame, je ne suis pas loin mais pas tout à fait.

Question complémentaire (s'il fallait démontrer mon niveau) : quelle est la différence entre un modul et thisWorkbook?
 

job75

XLDnaute Barbatruc
Bonjour de Rauglaudre,
En revanche, quand je test, seule la case cochée ayant mené à la page de retour est effacée. Moi je souhaite tout effacer pour permettre à l'user de repatrir de 0 sur cette page (vu qu'il n'a qu'un choix vu que dès qu'il clic il passe à la page suivante).
Voyez ce fichier (2), il suffit de faire une boucle :
Code:
Sub VersP()
If IsError(Application.Caller) Then Exit Sub 'sécurité
Dim o As Object
For Each o In ActiveSheet.DrawingObjects
    If TypeName(o) = "CheckBox" Then o.Value = False
Next
With Sheets(Trim(Replace(ActiveSheet.DrawingObjects(Application.Caller).Text, "Goto", "")))
    .Visible = xlSheetVisible
    .Activate
End With
End Sub
Si l'utilisateur ne peut faire qu'un choix pourquoi ne pas utiliser des Cases d'option ?

A+
 

Pièces jointes

  • Test Prev et Coche(2).xlsm
    44 KB · Affichages: 7

de Rauglaudre

XLDnaute Nouveau
La première réponse qui me vienne, c'est que je connaissais pas ;) Sinon, j'ai pas bien perçu la différence entre coche et puce. La coche était suffisante car après coche BIM! pas le choix, il passe à la age suivante. Le problème étant de revenir à la page précédente car décocher donne exactement le même BIM! passage à lae suivante...
 

de Rauglaudre

XLDnaute Nouveau
Je comprends pas du tout le pricipe de ce code. Comment ça défini la page vu qu'aucune n'est cité? En fait, le nom de la page cible doit avoir le nom du choix proposé à l'utilisateur? (ex : si à la question "comment va?" il a le choix entre "plutôt bien" et "plutôt mal", les 3 pages cible possibles doivent s'appeler "plutôt bien" et "plutôt mal" ?
 

de Rauglaudre

XLDnaute Nouveau
En fait, vu que j'ai avancé dans cette direction, l'idéal serait de rester sur le concepte de la page qui précédente qui laisse son nom en "A1" et qu'en cas de précédent, on va pointer sur la page par conséquent renseignée en "A1". et une fois sur cette page, décocher avec du format value = false mais sans nommer les checkbox spécifiquement ?
 

de Rauglaudre

XLDnaute Nouveau
Vous voyez, ici, j'arrive à revenir sur la page précédente quelle qu'elle soit, j'arrive a effacer la coche mais je souhaite toute les effacer. J'y suis presque!
 

Pièces jointes

  • Copie de Test Prev et Coche.xlsm
    39.8 KB · Affichages: 10
  • Copie de Test Prev et Coche.xlsm
    39.8 KB · Affichages: 8

Modeste geedee

XLDnaute Barbatruc
En fait, vu que j'ai avancé dans cette direction, l'idéal serait de rester sur le concepte de la page qui précédente qui laisse son nom en "A1" et qu'en cas de précédent, on va pointer sur la page par conséquent renseignée en "A1". et une fois sur cette page, décocher avec du format value = false mais sans nommer les checkbox spécifiquement ?
Sub P4_Bouton1_Cliquer()
NomToHide = ActiveSheet.Name
Previous = ActiveSheet.Range("A1")
Sheets(Previous).Visible = True
Sheets(Previous).Select
'une fois ici, à la place d'identifier "case à Cocher 1" j'aimerais pouvoir avoir
' "case à cocher toutes" ou un truc dans ce gout là
ActiveSheet.CheckBoxes.Value = False
End Sub


voir #15
 

Discussions similaires

Réponses
22
Affichages
784
Réponses
7
Affichages
352

Statistiques des forums

Discussions
312 239
Messages
2 086 511
Membres
103 239
dernier inscrit
wari