"End" sur UF

Résolu
touroul Messages postés 526 Date d'inscription   Statut Membre Dernière intervention   -  
touroul Messages postés 526 Date d'inscription   Statut Membre Dernière intervention   -
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. cs_Le Pivert Messages postés 8437 Statut Contributeur 730
     
    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. touroul Messages postés 526 Date d'inscription   Statut Membre Dernière intervention   17
     
    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
  3. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
     
    Bonjour

    A voir selon ton contexte

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

    Michel
    0
    1. cs_Le Pivert Messages postés 8437 Statut Contributeur 730
       
      bonjour michel_m,

      Sur le site indiqué, tout est expliqué!
      0
      1. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320 > cs_Le Pivert Messages postés 8437 Statut Contributeur
         
        Excuse moi d'^tre inntervenu dans TA discussion.
        0
      2. cs_Le Pivert Messages postés 8437 Statut Contributeur 730 > michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention  
         
        Il 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
  4. cs_Le Pivert Messages postés 8437 Statut Contributeur 730
     
    Tu n'as pas tout lu:

    https://silkyroad.developpez.com/VBA/UserForm/#LIII-B

    Form principale UserForm1
    Autre Form UserForm2

    a mettre dans UserForm2:

    Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
      UserForm2.Hide
     Unload UserForm1
    End Sub
    

    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. touroul Messages postés 526 Date d'inscription   Statut Membre Dernière intervention   17
     
    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
  7. touroul Messages postés 526 Date d'inscription   Statut Membre Dernière intervention   17
     
    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. touroul Messages postés 526 Date d'inscription   Statut Membre Dernière intervention   17
       
      Un p'tit up
      Please !
      Mes UF se ferment en appuyant sur suivant !
      Merci !
      0
  8. cs_Le Pivert Messages postés 8437 Statut Contributeur 730
     
    Dans ton cas, il ne faut pas utiliser End. Je t'ai donné un exemple à utiliser.
    Avec End tu stoppes tout!
    0
  9. touroul Messages postés 526 Date d'inscription   Statut Membre Dernière intervention   17
     
    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
  10. cs_Le Pivert Messages postés 8437 Statut Contributeur 730
     
    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. cs_Le Pivert Messages postés 8437 Statut Contributeur 730
       
      J'ai oublié de corriger la macro Import:

      Sub Import()
      Call MacroSuppr
      UserForm1.Show
      End Sub
      
      0
  11. touroul Messages postés 526 Date d'inscription   Statut Membre Dernière intervention   17
     
    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
  12. cs_Le Pivert Messages postés 8437 Statut Contributeur 730
     
    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. touroul Messages postés 526 Date d'inscription   Statut Membre Dernière intervention   17
       
      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
  13. touroul Messages postés 526 Date d'inscription   Statut Membre Dernière intervention   17
     
    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
  14. cs_Le Pivert Messages postés 8437 Statut Contributeur 730
     
    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
  15. touroul Messages postés 526 Date d'inscription   Statut Membre Dernière intervention   17
     
    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