"End" sur UF

Résolu
Bonsoir le forum

J'ai fait une macro "Import" comprenant plusieurs UF et plusieurs Call faisant appel à d'autres procédures.

Connaissez-vous un truc pour qu'en cliquant sur la croix rouge des UF, on quitte la macro principale, ou encore mieux, qu'on lance une autre macro "Reaffiche".

Exemple :

Sub Import()

Call Etape1
UFSelect1.Show
UFSelect2.Show
Call Etape1

End sub

Sub Reaffiche()
Sheets("Total").Select
Range("6:46").Select
Selection.RowHeight = 12.75
End Sub


Par avance merci pour votre aide précieuse.
Bonne soirée

14 réponses

  1. Contributeur
    Bonjour,

    Comme ceci:

    Private Sub test()
    MsgBox "Terminé"
    End Sub
    
    Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
    test
    End Sub
    

    0
  2. Bonjour Le Pivert

    Merci pour l'aide.

    J'ai essayé d'adapter mais j'ai quelques soucis :

    En m'inspirant de ton code et de ce que j'ai vu sur ton site, j'ai ajouté à tous mes UF le code :
    Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
    If CloseMode = 0 Then Cancel = True
    MsgBox "Opération abandonnée", vbInformation, ""
    End
    End Sub


    Dans ce cas, l'UF se ferme bien mais la macro principale ("Import") continue.

    Serait-il possible de placer un code dans "Import" qui arrêterait l'exécution de cette macro principale (Call et UF compris), lorsqu'on clique sur la croix rouge d'un des UF ?

    Pardon mais je veux vraiment comprendre !
    D'avance merci
    0
    1. Contributeur
      Bonjour

      A voir selon ton contexte

      "End" rend la main au systeme pour Toutes les macros> en cours

      Michel
      0
      1. Contributeur
        bonjour michel_m,

        Sur le site indiqué, tout est expliqué!
        0
      2. Contributeur
        @cs_Le PivertExcuse moi d'^tre inntervenu dans TA discussion.
        0
      3. Contributeur
        @michel_mIl n'y a pas de mal, mais je pense que le site est très bien fait et se suffit à lui même. Il faut juste lire les différents paragraphes.

        Cordialement
        0
    2. Merci d'avoir pris ce problème à coeur c'est sympa.

      C'est réglé, je n'avais pas mis le End au bon endroit :

      Voici mon code à mettre dans chaque UF (si ça peut servir) :
      Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
      MsgBox "Opération abandonnée", vbInformation, ""
      Call Reaffiche
      End
      End Sub


      Bonne journée à vous et encore merci
      0
      1. Oups, j'ai fermé un peu vite.

        Je ne sais trop pourquoi, mais depuis ce code, lorsque je clique sur Suivant pour passer au reste de la macro principale, il me remet tout de suite sur le MsgBox "Opération abandonnée" et la macro s'arrête.
        Un peu comme si le UserForm_QueryClose était prioritaire sur le CommandButton1_Click.

        Voici le code des UF :

        Private Sub CommandButton1_Click()
        Unload UFSelect1
        End Sub

        Private Sub UserForm_Click()

        End Sub

        Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
        MsgBox "Opération abandonnée", vbInformation, ""
        Call Reaffiche
        End
        End Sub


        Merci d'avance, on va y arriver
        0
        1. Un p'tit up
          Please !
          Mes UF se ferment en appuyant sur suivant !
          Merci !
          0
      2. Contributeur
        Dans ton cas, il ne faut pas utiliser End. Je t'ai donné un exemple à utiliser.
        Avec End tu stoppes tout!
        0
        1. Bonjour Le Pivert

          J'avais essayé le code proposé plus haut, mais il n'agissait que sur le UF rattaché et non sur l'ensemble de la macro.

          Je me permets d'envoyer un fichier exemple :
          Lorsque je clique sur Suivant, l'UF se ferme.
          Par contre, lorsque je clique sur la croix, tout s'arrête, et ça c'est correct !

          Ça sera peut-être plus compréhensible ainsi :

          http://www.cjoint.com/c/EIrmfZtsxYw

          A plus, merci !
          0
          1. Contributeur
            Je n'ai pas très bien compris ce que tu voulais faire. Voici une correction pour que tes macros se déclenchent. J'ai mis des MsgBox pour confirmer:

            http://www.cjoint.com/c/EIrm0u41SUQ
            0
            1. Contributeur
              J'ai oublié de corriger la macro Import:

              Sub Import()
              Call MacroSuppr
              UserForm1.Show
              End Sub
              
              0
          2. Merci bien Le Pivert

            Ça fonctionne mieux mais pas encore top.
            J'ai compris que tu lançais l'UF2 par appel du bouton Suivant dans l'UF1, ça c'est malin, je n' y avais pas pensé.

            Par contre, le bouton Suivant de l'UF2 abandonne la procédure, donc tu rencontres le même problème que moi.

            @ plus
            0
            1. Contributeur
              Par contre, le bouton Suivant de l'UF2 abandonne la procédure, donc tu rencontres le même problème que moi.


              le problème est que je ne sais pas ce que tu veux faire avec ce bouton suivant dans l'UserForm2.
              Où veux-tu aller?
              0
              1. Bonjour Le Pivert

                Ne crois pas que j'ai lâché l'affaire ! Je continue mes essais, je posterai quand j'y serai parvenu dans ma macro qui fait 3 pages, je dois tout tester.
                @plus
                0
            2. Je reviens là-dessus malgré le délai pour comprendre.

              Je résume déjà l'objectif : dans ma macro principale "Import", il y a différentes étapes et quelques UF à ouvrir dans cet ordre :

              Sub Import()
              Call Etape1
              UserForm1.Show
              Call Etape2
              UserForm2.Show
              End sub


              Dans chaque UF, je cherche comment utiliser le UserForm_QueryClose pour lancer une macro "Reaffiche" en abandonnant la macro "Import" (par fermeture à la croix rouge).

              Dans ta proposition, tu mets les Call dans chaque UF, ce qui me pose problème.

              Comment enchaîner les étapes ? Dans l'exemple ci-dessous, le bouton Suivant de l'UF1 abandonne l'opération :
              https://www.cjoint.com/c/EIsld1LReh2

              Ça doit être assez basique mais ça me dépasse.

              D'avance merci pour le suivi :)
              0
              1. Contributeur
                Dans l'UserForm1:

                Private Sub CommandButton1_Click()
                UserForm2.Show 'à remettre en macro Import si possible
                Unload UserForm1
                End Sub
                Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
                MsgBox "Opération abandonnée", vbInformation, ""
                Call Reaffiche
                End
                End Sub
                


                Dans l'UserForm2:

                Private Sub CommandButton1_Click()
                Unload UserForm2
                End Sub
                Private Sub UserForm_Initialize()
                Etape2
                End Sub
                Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
                MsgBox "Opération abandonnée", vbInformation, ""
                Call Reaffiche
                End
                End Sub
                


                0
                1. Aaaaaaah ... ça y est enfin après quelques palabres et ton aide.

                  Dans le module principal "Import" j'ai mis le début :
                  Sub Import()
                  UFSelect1.Show
                  End Sub


                  Dans l'UF1 j'ai mis :
                  Private Sub CommandButton1_Click()
                  Call Macro1
                  UserForm1.Hide
                  UserForm2.Show
                  End Sub

                  Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
                  If CloseMode = 0 Then MsgBox "Opération abandonnée", vbInformation, ""
                  Call Reaffiche
                  End
                  End Sub


                  Dans l'UF2 j'ai mis :
                  Private Sub CommandButton1_Click()
                  Call Macro2
                  Userform2.Hide
                  Userform3.Show
                  End Sub

                  Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
                  If CloseMode = 0 Then MsgBox "Opération abandonnée", vbInformation, ""
                  Call Reaffiche
                  End
                  End Sub


                  Dans le dernier UF j'ai mis :
                  Private Sub CommandButton1_Click()
                  Unload Useform3
                  End Sub

                  Private Sub UserForm_Click()

                  End Sub


                  Et tout réagit comme souhaité.
                  Pas facile la subtile différence entre UF.Hide et Unload UF !

                  Je ferme pour de bon.
                  Merci bien Le Pivert !
                  0