VBA - Workbook_BeforeClose / plusieurs requêtes

red-69

XLDnaute Nouveau
Bonjour à tous,

Je vous soumets un petit problème sur lequel je bloque pour le moment.

J'essaye de mettre en place un formulaire pour mon association pour laquelle il est nécessaire que les utilisateurs acceptent les macros.
J'ai trouvé sur les forums et en me dépatouillant tout seul le code qui me faut pour forcer l'acceptation des macros.

Cependant j'ai également une autre requête qui est l'obligation d'inscrire dans la cellule B33 de la feuille formulaire, une date inférieure ou égale à J+ 1an.

Le problème c'est que lorsque j'effectue cette manipulation, j'ai bien mes fenêtres d'alertes qui apparaissent mais je retombe immédiatement sur l'onglet Info. Du coup, il n'est plus possible de renseigner la feuille formulaire.

Auriez-vous des infos qui pourraient m'aider ?

Ci-dessous le code que j'utilise, et en pièce jointe le formulaire en question.

Par avance, merci.


Code:
Private Sub Workbook_Open()
Sheets("Formulaire").Visible = True
Sheets("Info").Visible = False
End Sub

Private Sub Workbook_BeforeClose(Cancel As Boolean)

Application.ScreenUpdating = False
Sheets("Info").Visible = True
Sheets("Formulaire").Select
ActiveWindow.SelectedSheets.Visible = False


    If Sheets("Formulaire").Range("B33").Value > Now() + 366 Then
        MsgBox "Impossible ! Maximum d'un an dépassée."
        Cancel = True
    End If
    
    If Sheets("Formulaire").Range("B33").Value = "" Then
        MsgBox "Saisie incomplète !"
        Cancel = True
    End If

ActiveWorkbook.Save
End Sub
 

Pièces jointes

  • Formulaire.xlsm
    17.8 KB · Affichages: 50
  • Formulaire.xlsm
    17.8 KB · Affichages: 46
  • Formulaire.xlsm
    17.8 KB · Affichages: 48

PMO2

XLDnaute Accro
Re : VBA - Workbook_BeforeClose / plusieurs requêtes

Bonjour,

Une piste avec votre code modifié
Code:
Private Sub Workbook_BeforeClose(Cancel As Boolean)
    If Sheets("Formulaire").Range("B33").Value > Now() + 366 Then
        MsgBox "Impossible ! Maximum d'un an dépassée."
        Cancel = True
    End If
    
    If Sheets("Formulaire").Range("B33").Value = "" Then
        MsgBox "Saisie incomplète !"
        Cancel = True
    End If
If Cancel Then
  [b33].Select
  Exit Sub
End If

Application.ScreenUpdating = False
Sheets("Info").Visible = True
Sheets("Formulaire").Select
ActiveWindow.SelectedSheets.Visible = False

ActiveWorkbook.Save
End Sub
 

red-69

XLDnaute Nouveau
Re : VBA - Workbook_BeforeClose / plusieurs requêtes

Bonjour PMO2,

Merci d'avoir jeté un oeil.

Effectivement le code que vous fournissez correspond à ce que je souhaitais.
Pourriez-vous m'expliquer l'utilisation du :

Code:
If Cancel Then
  [b33].Select
  Exit Sub
End If

Merci
 

PMO2

XLDnaute Accro
Re : VBA - Workbook_BeforeClose / plusieurs requêtes

Bonjour,

Quelques éclaircissements
Code:
Private Sub Workbook_BeforeClose(Cancel As Boolean)

'--- Comme vous avez dû le remarquer, j'ai déplacé les
'--- instructions de conditions d'annulation en tête de
'--- la procédure puisqu'elles régissent la suite ou la
'--- non suite du programme
    If Sheets("Formulaire").Range("B33").Value > Now() + 366 Then
        MsgBox "Impossible ! Maximum d'un an dépassée."
        Cancel = True
    End If
    
    If Sheets("Formulaire").Range("B33").Value = "" Then
        MsgBox "Saisie incomplète !"
        Cancel = True
    End If
    
'--- Si Cancel = True (annulation de la procédure)
If Cancel Then
  '---quant à faire, autant sélectionner la cellule B33 pour une meilleure signalisation à l'utilisateur
  [b33].Select
  '--- puis on annule la suite de la procédure en provoquant une sortie immédiate par l'instruction Exit Sub qui suit
  Exit Sub
End If

'--- Les instructions suivantes ne seront pas réalisées si Cancel = True et que le programme passe par Exit Sub
Application.ScreenUpdating = False
Sheets("Info").Visible = True
Sheets("Formulaire").Select
ActiveWindow.SelectedSheets.Visible = False

ActiveWorkbook.Save
End Sub
 

Discussions similaires

Réponses
2
Affichages
185

Statistiques des forums

Discussions
312 098
Messages
2 085 265
Membres
102 844
dernier inscrit
atori2