Sortir d'une macro imbriquée dans un userform
Bonjour à tous,
Malgré les différents sujets traitant de ce problème, j'ai toujours un os dans la gestion de mon userform
Depuis un userform j’exécute une "macro fille" pour gérer les choix de mes "Options butons" , de combobox, et textbox
Si j'utilise Exit sub je sort de la macro mais la macro " mère" du userform continue. ( ce qui la plante un peu plus loin car les données seront manquante)
Si j'utilise End je quitte le userform,
Or j'aimerai juste arrêter l’exécution des macro en cours sur le userform sans le quiter.
Voici un extrait de ma macro mère qui lance les macros filles
Private Sub CommandOk_Click()
Dim nomClone$, rep$, Sect$
Dim Wb As Workbook
Application.ScreenUpdating = False
Set Wb = ActiveWorkbook
rep = Wb.Path
ChoiFWE
WrtSelec '<---------------------------------
EcrirAg
EcrireForm
EcrirePost
WrtDat
MFCTot
inserlist
Application.DisplayAlerts = False
nomClone = "Calendrier Annuel " & WsPrm.Range("Sect") & " " & Cmbdate & ".xlsm"
Wb.SaveCopyAs rep & "\" & nomClone
' End If
Unload Me
'On Error Resume Next
Wb.Close False
End SubEt voici l'une des macros filles qui me pose problème dont j'aimerai dans certain cas quelles arrêtent la macro mere sans sortir du userform ( histoire que l'utilisateur n'est pas tous à ressaisir)
Sub WrtSelec()
WsPrm.Range("An") = Cmbdate
WsPrm.Range("Sect") = CmbSect
If CmbSect.ListIndex = -1 Then End '<-----------------------------------------------End et Exit Sub ne fonctionne pas !
If CmbSect.ListIndex >= 0 Then
CmbSect.Value = CmbSect.ListIndex + 1
End If
WsPrm.Range("NomPost") = "Post" & CmbSect
WsPrm.Range("Abs") = "Ablist" & CmbSect
WsPrm.Range("NomAg") = "Alist" & CmbSect
End SubSi vous avez des idées je suis preneur
Bonjour edlede,
Les macros "filles" sont en fait des fonctions que tu dois déclarer en "function" et non "sub" ça te permettra de leur donner des valeurs.
Voici les modifications pour ta procédure :
Private Sub CommandOk_Click()
Dim nomClone$, rep$, Sect$
Dim Wb As Workbook
Application.ScreenUpdating = False
Set Wb = ActiveWorkbook
rep = Wb.Path
ChoiFWE
If WrtSelec Then Exit Sub ' Si ta fonction renvoie true alors on arrête la procédure
EcrirAg
EcrireForm
EcrirePost
WrtDat
MFCTot
inserlist
Application.DisplayAlerts = False
nomClone = "Calendrier Annuel " & WsPrm.Range("Sect") & " " & Cmbdate & ".xlsm"
Wb.SaveCopyAs rep & "\" & nomClone
' End If
Unload Me
'On Error Resume Next
Wb.Close False
End SubEt pour la fonction :
Function WrtSelec()
WsPrm.Range("An") = Cmbdate
WsPrm.Range("Sect") = CmbSect
If CmbSect.ListIndex = -1 Then
WrtSelec=TRUE 'On passe la valeur renvoyée par la fonction à TRUE
Exit Function 'On quitte la fonction
End If
If CmbSect.ListIndex >= 0 Then
CmbSect.Value = CmbSect.ListIndex + 1
End If
WsPrm.Range("NomPost") = "Post" & CmbSect
WsPrm.Range("Abs") = "Ablist" & CmbSect
WsPrm.Range("NomAg") = "Alist" & CmbSect
End FunctionMerci vinceska,
C est parfait et efficace je valide,
Bonne soirée