Macro VBA

Bonjour,

Jai creé un bouton quitter sur ma feuille excel quelle macro faut il mettre pour revenir sur ma userform

merci d'avance

22 réponses

Résumé de la discussion

Problème courant : revenir d'un bouton quitter sur une feuille Excel vers une UserForm via VBA, afin d'afficher à nouveau la UserForm après sa fermeture et poursuivre la navigation sans quitter le classeur. La solution directe consiste à ajouter dans le bouton quitter le code Private Sub CommandButton1_Click() UserForm1.Show End Sub afin de rouvrir simplement la UserForm lorsque l'utilisateur clique. D'autres propositions explorent des approches comme masquer toutes les feuilles et n'afficher que celle associée au bouton, ou adapter les macros pour basculer entre feuilles puis revenir à la UserForm.

Bobot (l’IA à votre service)
  1. Contributeur
    Bonjour,

    Si l'userform s'appelle "UserForm1"

    Il faut par exemple insérer un bouton dans la feuille dont le code est :

    Private Sub CommandButton1_Click()
        UserForm1.Show
    End Sub


    A+
    1. Bonjour pilas31 j'ai fait les mofif ça mache un grand merci à toi

      une dernière petite chose une fois excel ouvert je ne trouve pas dans le menu "outil "

      et biensure option peut tu m'aider

      Merci d'avance
      1. Bonsoir pilas 31 merci encore pour tout .ça fonctionne c'est le top

        pour la manip menu outil il faut que j'ouvre mon programme si oui outil se trouve ou?

        Merci
        1. Contributeur
          Bonjour,

          oui il faut lancer ton classeur excel et accéder au menu d'excel. "Outils" est un des menus d'Excel et "Partager le classeur" est une option de ce menu.

          A+
      2. Contributeur
        J'ai regardé le code voila l'explication :
        Le code dans ThisWorkbook n'était pas dans le bon ordre il faut le remplacer par le code suivant :

        Private Sub Workbook_Open()
            For i = 2 To Sheets.Count
                Sheets(i).Visible = False
            Next i
            Load UserForm1
            UserForm1.Show
        End Sub


        J'ai vu une autre anomalie : la feuille "Matério neurochir salle 1 2 3 4" associée au bouton 52 de l'Userform qui n'existe pas.

        Pour le partage du fichier, il faut aller dans le menu <Outils> puis option <Partager le classeur> puis dans l'onglet "Modification" de la fenêtre qui s'ouvre il faut cocher la case "Permettre une modification multi-utilisateurs".

        Il enregistre alors une version partagée du classeur : il porte le même nom mais avec [partagé] écrit à la suite du nom.

        Enfin il faut copier le classeur dans un emplacement réseau accessible à tous les utilisateurs. Tous doivent utiliser le même et pas le copier chez eux

        Voilà je pense la procédure.

        A+
        1. désolé je te joins un nouveau lien le premier le projet est verouillé
          ça sera plus facile

          Le dépôt du fichier Travail - Sauvegarde.xls a été réalisé avec succès !

          Veuillez noter le lien ci-dessous qui vous permettra d'accéder à ce fichier.
          C'est ce même lien que vous devrez transmettre à vos correspondants
          http://www.cijoint.fr/cjlink.php?file=cj201110/cijJxDeFMI.xls

          Merci d'avance
          1. Contributeur
            Merci, je regarde dés que possible et je reviens ...

            A+
        2. Pour pilas31 ci-desous le lien
          Merci encore de me consacrer un peu de ton temps

          Veuillez noter le lien ci-dessous qui vous permettra d'accéder à ce fichier.
          C'est ce même lien que vous devrez transmettre à vos correspondants
          http://www.cijoint.fr/cjlink.php?file=cj201110/cijgc3FcGq.xls

          PS tu pourra me renseigner por ma question au sujet de l'ouverture multiples
          de mon programme

          A+
          1. OK c'est sympa je le fait aujourd'hui ou ce soir
            aucune donnée conf

            Merci d'avance

            je vais mettre ce programme en dossier partagé il me semble impossible de l'ouvrir à deux ou trois endrois différents en même temps pour travailler sur des feuilles différentes.
            Peux tu me le comfirmer.
            Et sdi c'est possible m'indiquer comment
            1. Contributeur
              Juste une info. Il est déconseillé de donner des coordonnées personnelles sur le forum. Si tu poste ton fichier, je le regarde sans problème.

              Je te conseille de modifier ton post pour enlever ton n° stp
          2. Contributeur
            Bonjour,

            Désolé je n'étais pas dispo avant.
            Je ne comprends pas pourquoi cela ne marche pas chez toi.
            Il ne doit pas y avoir grand chose pour le faire fonctionner.
            Tu peux peut-être nous communiquer ton fichier en le déposant sur www.cijoint.fr et en collant dans un message le lien qui te sera donné.
            Il faut t'assurer en préallable qu'il n'y a pas de données confidentielles.

            A+

            Cordialement,
            1. bonsoir pilas31 une précision c'est depuis que j'ai inséré ton code qu'elles n'apparaissent plus quand je clique

              Private Sub Workbook_Open()
              UserForm1.Show
              End Sub

              mon code actuel pour l'ouverture est ci-dessous

              Private Sub Workbook_Open()
              UserForm1.Show
              For i = 2 To Sheets.Count
              Sheets(i).Visible = Fasle
              Next i
              End Sub

              merci pour ton aide
              1. Pour pilas31

                J'ai tapé toutes les lignes de codes en testant les macros ça fonctionne.

                par contre quand je lance le programme j'arrive sur userform je clique sur un des boutons et la feuille ne s'ouvre plus, seule la feuille (vide) apparrait à l'écran

                Désolé je suis vraiement un boulet!!!!
                1. Contributeur
                  Re Bonjour,

                  Je te propose alors de relancer l'userform dans la macro QUITTER comme ceci :
                  Private Sub CommandButton1_Click() 
                      If Onglet_courant <> "" Then 
                          Sheets(Onglet_courant).Visible = False 
                      End If 
                      Sheets(1).Select 
                      UserForm1.Show
                  End Sub

                  Pour que qu'il se lance à l'ouverture tu vas dans le dossier "ThisWorkbook" de l'éditeur VBA et tu inséres la macro suivante :

                  Private Sub Workbook_Open() 
                      UserForm1.Show 
                  End Sub


                  A+

                  Cordialement,
                  1. Pour pilas31
                    c'est encore moi tes lignes de codes fonctionnent annule mon dernier message
                    par contre quand je quitte ma feuille je reviens sur ma feuille vide serait il possible de revenir directement sur ma feuille usreform et ne pas passer à chaque fois par le bouton que j'ai mis sur ma feuille (vide).

                    pareil quand j'ouvre mon dossier il faut que j'arrive directement sur ma feuille userform

                    Encore merci pour ton aide car sans toi ça serait vraiement la galère
                    1. bonjour je vais essayer ce que tu me proposes je te confirme que la feuille vide (N°1) colorée en bleu doit rester toujours visible
                      Merci je te recontacte A+

                      Par contre ce code je le met dans un module je fais comment pour qu'il soit visible par toutes les macro et userform

                      Public Onglet_courant As String
                      1. Contributeur
                        Bonjour,

                        Je ne suis pas sur d'avoir compris le fonctionnement mais il me semble qu'il faut mémoriser la feuille que l'on vient de quitter pour pouvoir la masquer.

                        Une proposition :

                        Mettre dans un module une déclaration de variable globale (visible de toutes les macros y compris depuis le code de l'userform) :
                        Public Onglet_courant As String

                        Initialiser cette variable dans chacune des macros comme cela :
                        Private Sub CommandButton1_Click() 
                            Sheets("Pharmacie ORTHO salle 11").Visible = True 
                            Sheets("Pharmacie ORTHO salle 11").Select 
                            Onglet_courant = "Pharmacie ORTHO salle 11" 
                            Me.Hide 
                        End Sub

                        ainsi de suite ....
                        Puis modifier le code du (ou des) bouton(s) QUITTER comme cela :
                        Private Sub CommandButton1_Click() 
                            If Onglet_courant <> "" Then 
                                Sheets(Onglet_courant).Visible = False 
                            End If 
                            Sheets(1).Select 
                        End Sub


                        Je suppose toujours que la feuille n°1 est celle qui est toujours visible.

                        Voila c'est à tester.

                        A+

                        Cordialement,
                        1. c'est encore moi pilas31 j'ai fait ce que tu m'a dit le code ci-joint

                          Private Sub CommandButton1_Click()
                          Me.Hide
                          Sheets("Pharmacie ORTHO salle 11").Visible = True
                          Sheets("Pharmacie ORTHO salle 11").Select
                          End Sub

                          Private Sub CommandButton2_Click()
                          Me.Hide
                          Sheets("Pharmacie ORTHO salle 12").Visible = True
                          Sheets("Pharmacie ORTHO salle 12").Select
                          End Sub

                          ect...;; mais maintenant une fois salle 11 ouverte puis fermée à l'aide d'un bouton

                          Private Sub CommandButton1_Click()
                          UserForm1.Show
                          End Sub

                          quand j'ouvre la salle 12 la 11 est toujours ouverte il faut qu'elle se ferme quand je quitte la feuille à l'aide du bouton QUITTER

                          Merci pour ton aide
                          1. ton code fonctionne mais est il possible que uesr form1 s'affiche en même tant la feuille qui reste visible elle est vide et j'ai mis de la couleur en fond

                            Merci
                            1. ma macro et dèjà écrite que faut il que je rajoute pour que ça fonctionne. je résume,

                              Ma feuille s'affiche les onglets des autres feuilles aussi j'aimerai donc que les autres onglets n'apparaisent pas a part l'onglet feuille vide

                              Merci d'avance
                            2. Contributeur
                              Bonjour lermite222,

                              Oui effectivement, il semble que l'Userform ne serve qu'a selectionner les différentes feuilles. Il y a sans doute des moyens plus élégants de le coder comme tu le suggéres.

                              Pour répondre à anesth31:

                              Si on reste dans la logique de ton code vba la solution la plus simple me parait être la suivante :

                              Fonctionner "à l'envers" c'est à dire cacher toutes les feuilles et ne faire apparaitre que celle qui est associée au bouton.

                              On peut cacher toutes les feuilles au moment de l'activation de l'userform.
                              Dans le code associé à l'userform ajouter cette macro :
                              Private Sub UserForm_Activate()   
                                  For i = 2 To Sheets.Count   
                                      Sheets(i).Visible = False   
                                  Next i   
                              End Sub   
                              

                              Cela cache toutes les feuilles sauf la 1° qui doit contenir l'image sur laquelle on double clique pour lancer l'userform.
                              Vérifier que c'est bien la première dans l'ordre
                              puis modifier toutes les macros associées au bouton comme ceci (juste l'exemple de la 1° macro)

                              Private Sub CommandButton1_Click()   
                                  Me.Hide   
                                  Sheets("Pharmacie ORTHO salle 11").Visible = True   
                                  Sheets("Pharmacie ORTHO salle 11").Select   
                              End Sub   
                              


                              Voila une solution qui devrait marcher

                              A+
                              Cordialement,
                              1. Contributeur
                                Bonjour,
                                Avec tout les boutons que tu as, tu pourrais étudier cette démo çà raccourcirai ton code et ça le rendrai beaucoup plus clair.
                                Voir aussi et plus pratique encore...
                                A+
                                • 1
                                • 2