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+
    2
    1. 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
      1. Bonjour,
        Si vous voulez que votre form s'affiche a l'ouverture du classeur, vous pouvez ecrire ce code dans un module. A l'ouverture de votre classeur ce code sera execute automatiquement.

        Sub Auto_Open()
        Nomdevotreform.Show
        End Sub

        C'est du Microsoft pas une bidouille (Voir aide Excel)

        Bonne suite
        0
        1. Bonjour et merci à vous PILA 31 c'est bon ça marche

          Mon deuxième soucis quand je suis sur user form1 je clic sur un de mes boutons pour faire apparaitre l'une de mes feuilles avec la macro suivante:

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

          ça marche par contre j'aimerai que les onglets des differentes autres feuilles n'appaissent pas en bas de ma feuille
          merci d'avance
          0
          1. Contributeur
            Il suffit d'insérer les instructions suivantes par exemple:
            Sheets("Feuil2").Visible = False 
            Sheets("Feuil3").Visible = False 
            


            et pour les rendre à nouveau visbles :
            Sheets("Feuil2").Visible = True 
            Sheets("Feuil3").Visible = True 
            

            A+
            0
          2. OK je dois l'inserer sur chaque ligne?
            ci-joint toute ma macro

            Private Sub CommandButton1_Click()
            Me.Hide
            Sheets("Pharmacie ORTHO salle 11").Select
            End Sub
            Private Sub CommandButton2_Click()
            Me.Hide
            Sheets("Pharmacie ORTHO salle 12").Select
            End Sub
            Private Sub CommandButton6_Click()
            Me.Hide
            Sheets("Pharmacie ORTHO salle 14").Select
            End Sub

            Private Sub CommandButton3_Click()
            Me.Hide
            Sheets("Pharmacie ORTHO salle 15").Select
            End Sub
            Private Sub CommandButton18_Click()
            Me.Hide
            Sheets("Matério ORTHO 11 12 14 15").Select
            End Sub
            Private Sub CommandButton14_Click()
            Me.Hide
            Sheets("Pharmacie URG salle 16").Select
            End Sub
            Private Sub CommandButton15_Click()
            Me.Hide
            Sheets("Pharmacie URG salle 17").Select
            End Sub
            Private Sub CommandButton19_Click()
            Me.Hide
            Sheets("Matériovigilance URG 16 17").Select
            End Sub
            Private Sub CommandButton17_Click()
            Me.Hide
            Sheets("Pharmacie PLASTIE salle 19").Select
            End Sub
            Private Sub CommandButton16_Click()
            Me.Hide
            Sheets("Pharmacie PLASTIE salle 20").Select
            End Sub
            Private Sub CommandButton20_Click()
            Me.Hide
            Sheets("Matériovigilance PLAST 19 20").Select
            End Sub
            Private Sub CommandButton8_Click()
            Me.Hide
            Sheets("Pharmacie VASCULAIRE").Select
            End Sub
            Private Sub CommandButton22_Click()
            Me.Hide
            Sheets("Matériovigilance VASC").Select
            End Sub
            Private Sub CommandButton5_Click()
            Me.Hide
            Sheets("Pharmacie LASER").Select
            End Sub
            Private Sub CommandButton23_Click()
            Me.Hide
            Sheets("Matériovigilance LASER").Select
            End Sub
            Private Sub CommandButton7_Click()
            Me.Hide
            Sheets("Pharmacie SCANNER sensation").Select
            End Sub
            Private Sub CommandButton10_Click()
            Me.Hide
            Sheets("Pharmacie SCANNER Définition").Select
            End Sub
            Private Sub CommandButton24_Click()
            Me.Hide
            Sheets("Matério sensation Définition").Select
            End Sub
            Private Sub CommandButton11_Click()
            Me.Hide
            Sheets("Pharmacie RADIO salle 1").Select
            End Sub
            Private Sub CommandButton12_Click()
            Me.Hide
            Sheets("Pharmacie RADIO salle 2").Select
            End Sub
            Private Sub CommandButton13_Click()
            Me.Hide
            Sheets("Pharmacie RADIO salle 3").Select
            End Sub
            Private Sub CommandButton26_Click()
            Me.Hide
            Sheets("Pharmacie RADIO salle 6").Select
            End Sub
            Private Sub CommandButton25_Click()
            Me.Hide
            Sheets("Matério RADIO salle 1 2 3 6").Select
            End Sub
            Private Sub CommandButton4_Click()
            Me.Hide
            Sheets("Pharmacie BOX 15").Select
            End Sub
            Private Sub CommandButton21_Click()
            Me.Hide
            Sheets("Matériovigilance BOX 15").Select
            End Sub
            Private Sub CommandButton28_Click()
            Me.Hide
            Sheets("Pharmacie neurochir salle 2").Select
            End Sub
            Private Sub CommandButton29_Click()
            Me.Hide
            Sheets("Pharmacie neurochir salle 3").Select
            End Sub
            Private Sub CommandButton32_Click()
            Me.Hide
            Sheets("Pharmacie neurochir salle 1").Select
            End Sub
            Private Sub CommandButton53_Click()
            Me.Hide
            Sheets("Pharmacie neurochir salle 4").Select
            End Sub
            Private Sub CommandButton52_Click()
            Me.Hide
            Sheets("Matério neurochir salle 1 2 3 4").Select
            End Sub

            Private Sub TextBox1_Change()

            End Sub

            Private Sub UserForm_Activate()
            With UserForm1
            .StartUpPosition = 3
            .Width = Application.Width
            .Height = Application.Height
            End With

            End Sub

            Private Sub CommandButton9_Click()
            ' Set Classeur = Workbooks.Item(1)
            'MsgBox "The name of the active workbook is " & ActiveWorkbook.Name
            Workbooks(ActiveWorkbook.Name).Close SaveChanges:=True
            'ActiveWorkbook.Save
            'ActiveWorkbook.Quit
            'Application.Quit
            End Sub

            Private Sub Image1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
            Load UserForm2
            UserForm2.Show

            End Sub

            Merci
            0
        2. 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+
          0
          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
            0
          2. 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
            0
            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
              0
              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,
                0
                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
                  0
                  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
                    0
                    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,
                      0
                      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!!!!
                        0
                        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
                          0
                          1. 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,
                            0
                            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
                              0
                              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
                                0
                            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+
                              0
                              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
                                0
                                1. Contributeur
                                  Merci, je regarde dés que possible et je reviens ...

                                  A+
                                  0
                              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+
                                0
                                • 1
                                • 2