IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Comment revenir à la feuille juste avant


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 47
    Points : 20
    Points
    20
    Par défaut Comment revenir à la feuille juste avant
    Bonjour,

    J'ai eu du mal à expliquer mon problème sur le titre. C'est aussi la raison pour laquelle je n'arrive pas à utiliser mon ami google .
    En effet, je veux faire un macro pour déplacer vers la feuille juste avant.
    Par exemple : je suis dans la feuille 5, je clique sur la feuille 9, je exécute le macro et je reviens à feuille 5 .

    Comment le dit sur vba ?

    Merci d'avance

  2. #2
    Membre confirmé Avatar de drakkar_agfa
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    618
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : Canada

    Informations forums :
    Inscription : Septembre 2008
    Messages : 618
    Points : 638
    Points
    638
    Par défaut
    Bonjour,

    Est-ce quelque chose comme ceci?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Worksheets("Feuil5").Activate
    Sinon, tu devras expliquer un peu plus!

  3. #3
    Expert éminent Avatar de casefayere
    Homme Profil pro
    RETRAITE
    Inscrit en
    Décembre 2006
    Messages
    5 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations professionnelles :
    Activité : RETRAITE
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 138
    Points : 9 548
    Points
    9 548
    Par défaut
    Bonjour,

    peut-être en déclarant ta feuille dans une variable "public" avant de changer

    dans un module
    public nomfeuil as string

    dans ta procédure

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    nomfeuil = activesheets.name
    en fin de procédure sur feuille 9

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sheets(nomfeuil).activate 'ou select
    ca devrait marcher
    Cordialement,
    Dom
    _____________________________________________
    Vous êtes nouveau ? pour baliser votre code, cliquer sur cet exemple : Anomaly
    pensez à cliquer sur si votre problème l'est
    Par contre, il est désagréable de voir une discussion résolue sans message final du demandeur (satisfaction, désarroi, remerciement, conclusion...)

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 47
    Points : 20
    Points
    20
    Par défaut
    Merci pour les réponses si rapides

    Mais je veux que ce macro marche pour toutes les feuilles. Ca veut dire, si je suis à feuille 1, je vais à feuille 2, ensuite, je vais à feuille 3, je lance le macro, je reviens à feuille 2, je lance encore macro je reviens à feuille 1.

    C'est pour naviguer entre 2 feuille dans un fichier de 60 feuilles.

    Si un jour excel comprend ce qu'on pense, ça sera

  5. #5
    Membre confirmé Avatar de drakkar_agfa
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    618
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : Canada

    Informations forums :
    Inscription : Septembre 2008
    Messages : 618
    Points : 638
    Points
    638
    Par défaut
    Il est possible d'utiliser cette technique (comme précédent dans exploreur) mais tu devras coder autant de variables (ou un tableau) contenant le nombre de feuilles que tu veux garder.

    Et faire quelque chose du genre
    Ancien 1 = Ancien 2
    Ancien 2 = Ancien 3
    Ancien 3 = Ancien 4
    Ancien 4 = Actuel
    ...

    Je viens de penser à quelque chose...

    En utilisant une feuille vide qu'on pourrait nommer historique...
    En utilisant aucune variable!

    La colonne A de la feuille historique contient une valeur (nuérique) qui indique le nombre de feuilles visitées.
    La colonne B ... Quand l'utilisateur change de feuille on incrément le compteur (A1), le nom de l'ancienne feuille s'inscrit à la suite (donc la ligne inscrit en A1)

    Quand on exécute la macro, on retourne à la dernière feuille inscrite dans la colonne B (en utilisant le numéro du compteur), en effacant la dernière feuille et diminuant le compteur de 1.


  6. #6
    Membre expérimenté Avatar de laetitia
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    1 281
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 1 281
    Points : 1 512
    Points
    1 512
    Par défaut
    bonjour le fil le forum essai un truc comme cela dans ta macro

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Sub Inser()
    On Error Resume Next 'pour la 1feuil
    'ton code
    ActiveSheet.Previous.Select
    End Sub
    SALUTATIONS

  7. #7
    Membre confirmé Avatar de drakkar_agfa
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    618
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : Canada

    Informations forums :
    Inscription : Septembre 2008
    Messages : 618
    Points : 638
    Points
    638
    Par défaut
    Ce code sélectionne la feuille précédente (en position) et non la feuille sélectionnée précédemment...

  8. #8
    Membre expérimenté Avatar de laetitia
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    1 281
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 1 281
    Points : 1 512
    Points
    1 512
    Par défaut
    re le fil le forum oui tu as raison drakkar_agfa ou une bidouille la dedans peut etre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
     
    End Sub
    SALUTATIONS

  9. #9
    Membre chevronné Avatar de aalex_38
    Inscrit en
    Septembre 2007
    Messages
    1 631
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 631
    Points : 1 999
    Points
    1 999
    Par défaut
    Oui en reprenant l'idée de l'historique et des évenements,

    La derniere feuille utilisée dans une feuille masquée avec dans Thisworkbook :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Private Sub Workbook_SheetActivate(ByVal Sh As Object)
    If Sh.Name <> "DerniereFeuille" Then
        Worksheets("DerniereFeuille").Range("A1") = ActiveSheet.Name
    End If
    End Sub
    Ensuite dans la macro, il suffit de reprendre la valeur dans la cellule A1.

  10. #10
    Membre confirmé Avatar de drakkar_agfa
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    618
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : Canada

    Informations forums :
    Inscription : Septembre 2008
    Messages : 618
    Points : 638
    Points
    638
    Par défaut
    En gros, cette technique nous permet de revenir à la dernière...

    Mais l'avant dernière n'est pas gérée avec cette méthode. En utilisant ma méthode proposée plus haut, il est possible de revenir sur plusieurs feuilles.

  11. #11
    Membre chevronné Avatar de aalex_38
    Inscrit en
    Septembre 2007
    Messages
    1 631
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 631
    Points : 1 999
    Points
    1 999
    Par défaut
    Oui la technique de l'historique est la plus complète.

    Bon week end à tous.

    Alex

  12. #12
    Membre éclairé
    Homme Profil pro
    retraité
    Inscrit en
    Mai 2006
    Messages
    542
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Mai 2006
    Messages : 542
    Points : 712
    Points
    712
    Par défaut
    Bonsoir le forum
    Bonsoir à vous tous

    Une autre idée :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Private Sub Workbook_SheetActivate(ByVal Sh As Object)
    nomfeuil = ActiveSheet.Name
    End Sub
     
    Private Sub Workbook_SheetDeactivate(ByVal Sh As Object)
    feuille_ancienne = nomfeuil
    End Sub
    et dans un module
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Option Explicit
     
    Public nomfeuil As String
    Public feuille_ancienne As String
     
    Sub lance() 'ta macro
    ....
    ....
    Worksheets(feuille_ancienne).Activate
    End Sub
    si j'ai bien compris

    Eric

  13. #13
    Expert éminent
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    3 898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 3 898
    Points : 8 529
    Points
    8 529
    Par défaut
    Salut
    Si on garde le principe de l'historique:

    Dans un module on met ca
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Public ByReturn As Boolean
     
    Sub Retour()
    With Sheets("Histo")
        If .Range("A1") <> "" Then
            ByReturn = True
            Sheets(.Cells(Rows.Count, "A").End(xlUp).Value).Activate
            .Cells(Rows.Count, "A").End(xlUp).ClearContents
            ByReturn = False
        End If
    End With
    End Sub
    Dans le ThisWorkBook du classeur on met ça (celui ci contient donc un onglet "Histo" qui pourra être caché)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Private Sub Workbook_Open()
    Sheets("Histo").Cells.ClearContents
     
    End Sub
     
    Private Sub Workbook_SheetActivate(ByVal Sh As Object)
     
    If Sh.Name <> "Histo" And Sh.Name <> Sheets("Histo").Cells(Rows.Count, "A").End(xlUp).Value And Not (ByReturn) Then
        Sheets("Histo").Cells(Rows.Count, "A").End(xlUp).Offset(1, 0).Value = Sh.Name
    End If
     
    End Sub
    Voila, je pense n'avoir rien oublié, a toi d'adapter a ton besoin, pour ne pas faire d'imper surtout au niveau de la macro du module, qui pourrait être appelé depuis un bouton placé dans les menu par exemple (macro placer dans un xla au demarage de l'appli excel), dans ce cas il faudra verifier que notre fichier est compatible avec les retour en arriere, en controlant l'existance de l'onglet Histo par exemple.

    A++
    Qwaz

    MagicQwaz := Harry Potter la baguette en moins
    Le monde dans lequel on vit
    Ma page perso DVP
    Dernier et Seul Tutoriel : VBA & Internet Explorer
    Dernière contribution : Lien Tableau Structuré et UserForm
    L'utilisation de l’éditeur de message

  14. #14
    Membre expérimenté Avatar de laetitia
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    1 281
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 1 281
    Points : 1 512
    Points
    1 512
    Par défaut
    bonjour le fil le forum autrement faire ultra simple dans l ex: je prends la cellule a1
    Option Explicit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub Workbook_SheetDeactivate(ByVal Sh As Object)
    [A1] = Sh.Name
    End Sub
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Sub macro1()
    'ton code
    Worksheets([A1].Text).Activate
    End Sub
    SALUTATIONS

  15. #15
    Expert éminent
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    3 898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 3 898
    Points : 8 529
    Points
    8 529
    Par défaut
    Salut l'ami Leti
    Ta solution est pas mal, mais je ne sais pas les besoins exacts a l'origine de la demande, car ta solution se limite a 1 retour en arrière possible.

    Imaginons un passe feuil1, feuil3, feuil4, feuil3, feuil6

    Ici quand on fera retour en arrière plusieurs fois on obtiendra

    feuil6 -> feuil3 -> feuil6 -> feuil3 ->... ceci est dut au fait que lors du retour en arrière via la macro, le sheetdesactivate joue encore son rôle et inscrit dans feuil3[A1] "feuil6"

    Mais bon tous dépend du besoin exact, mais visiblement il souhaite pouvoir revenir en arrière sur plusieurs feuilles

    A++
    Qwaz

    MagicQwaz := Harry Potter la baguette en moins
    Le monde dans lequel on vit
    Ma page perso DVP
    Dernier et Seul Tutoriel : VBA & Internet Explorer
    Dernière contribution : Lien Tableau Structuré et UserForm
    L'utilisation de l’éditeur de message

  16. #16
    Membre expérimenté Avatar de laetitia
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    1 281
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 1 281
    Points : 1 512
    Points
    1 512
    Par défaut
    salut l ami Qwazerty le forum as tu une idee pour ne pas l ecrire sur la feuille l envoyer dans dans variable public en partant de thisworkbook la je bloque pas assez forte dans ces variables publiques. j ai regardais avec l instruction set je mangeais tous mes ongles affreux!!!!!!!!!
    a+ leti
    SALUTATIONS

  17. #17
    Expert éminent
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    3 898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 3 898
    Points : 8 529
    Points
    8 529
    Par défaut
    Re demoiselle
    Voila une solution avec une variable, mais attention avec les variable public, il m'est deja arriver de perdre le contenue d'une variable lors d'un bug sur une partie tout autre du fichier, les variable ont été "purgées" par excel, donc prudence.
    Ton utilisation de Desactivesheet plutôt que Activesheet est plus logique.

    Dans ThisWorkBook

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    Private Sub Workbook_SheetDeactivate(ByVal Sh As Object)
    Dim Test
     
    On Error Resume Next
    Test = UBound(Tableau)
    On Error GoTo 0
     
    If Not IsEmpty(Test) Then
        If (Sh.Name <> Tableau(UBound(Tableau))) And Not (ByReturn) Then
            ReDim Preserve Tableau(UBound(Tableau) + 1)
            Tableau(UBound(Tableau)) = Sh.Name
        End If
    Else
        ReDim Tableau(0)
        Tableau(0) = Sh.Name
    End If
    Dans le module

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    Public ByReturn As Boolean
    Public Tableau
     
    Sub RetourTab()
    Dim Test
     
    On Error Resume Next
    Test = UBound(Tableau)
    On Error GoTo 0
     
    If Not IsEmpty(Test) Then
        ByReturn = True
        Sheets(Tableau(UBound(Tableau))).Activate
        If UBound(Tableau) = 0 Then
            Erase Tableau
        Else
            ReDim Preserve Tableau(UBound(Tableau) - 1)
        End If
        ByReturn = False
    End If
     
    End Sub
    A++
    Qwaz

    MagicQwaz := Harry Potter la baguette en moins
    Le monde dans lequel on vit
    Ma page perso DVP
    Dernier et Seul Tutoriel : VBA & Internet Explorer
    Dernière contribution : Lien Tableau Structuré et UserForm
    L'utilisation de l’éditeur de message

  18. #18
    Membre expérimenté Avatar de laetitia
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    1 281
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 1 281
    Points : 1 512
    Points
    1 512
    Par défaut
    re monsieur Qwazerty le forum que dire c est vraiment du grand art je suis impressionnee j ai encore beaucoup a apprendre si avec ce code P96O1004 n est satisfait alors la je fais un scandale!!! super
    passe un bonne soiree Qwazerty
    leti a+
    SALUTATIONS

  19. #19
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 47
    Points : 20
    Points
    20
    Par défaut
    Merci "LES PROS"

    testing ...

    Bonne semaine à vous tous

  20. #20
    Membre émérite Avatar de Godzestla
    Homme Profil pro
    Chercheur de bonheur
    Inscrit en
    Août 2007
    Messages
    2 392
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de bonheur
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2007
    Messages : 2 392
    Points : 2 985
    Points
    2 985
    Par défaut
    Joli code Qwaz....
    (\ _ /) Cordialement G@dz
    (='.'=)

    (")-(") Vous avez des neurones. Sollicitez-les. . Si vous êtes aidé, pensez à Voter.

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. [XL-2010] Comment Empêcher l'affichage des feuilles masquées avant l'activation des macros ?
    Par yao.chris dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 23/02/2014, 15h23
  2. [Just Basic] Comment revenir de .TKN en .BAS ?
    Par FANFAN LA TULIPE dans le forum Basic
    Réponses: 3
    Dernier message: 28/04/2008, 07h16
  3. [VB.NET] Comment revenir à la page précédente?
    Par le lynx dans le forum ASP.NET
    Réponses: 7
    Dernier message: 12/04/2005, 09h42
  4. Réponses: 2
    Dernier message: 03/03/2004, 10h44
  5. automation excel : comment indiquer la feuille de travail ?
    Par mat_lefebvre dans le forum Access
    Réponses: 2
    Dernier message: 04/12/2003, 15h14

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo