Fenetre à la fermeture du classeur
Bonjour à tous, je ne suis pas un expert en visual script, et c'est la première fois que je l'utilise en fait!! Ca à l'air super puissant à utiliser avec excel!!
Bref, voilà ce que j'aimerais faire:
Lorsqu'on quitte le classeur, je veux qu'une fenetre s'ouvre en disant: "Avez vous bien pensé à mettre à jour l'onglet "Actualisation"?
Si on répond oui, le fichier s'enregistre et on quitte le classeur, et si on répond non, alors on retourne à l'onglet "Actualisation" afin de pouvoir la mettre à jour...
Merci beaucoup pour votre temps:
voilà ce que j'avais fait pr le moment, mais bon c'est pas terrible!!
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Response = MsgBox("Avez-vous bien pensé à remplir l'onglet 'Actualisation?'", vbYesNo + vbCritical + vbDefaultButton2)
If Response = vbNo Then
Exit Sub
ElseIf Response = vbYes Then
Dim Fs As String
Fs = Application.GetSaveAsFilename(fileFilter:="Microsoft Excel File (*.xls), *.xls")
If Fs = "False" Then
Exit Sub
End If
ThisWorkbook.SaveAs Fs
ActiveWorkbook.Close
End If
End Sub
N'ayant pas de réponse, j'ai continué à chercher un peu partout sur le net...
J'ai réussi à bricoler ceci:
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Rep = MsgBox("Avez-vous completé l'onglet 'Actualisation' ?", vbQuestion + vbYesNo, "ATTENTION")
If Rep = vbYes Then
MsgBox "PARFAIT!"
ActiveWorkbook.Save
ElseIf Rep = vbNo Then
MsgBox "FAITES-LE!"
Sheets("Actualisation").Select
Cancel = True
End If
End Sub
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Rep = MsgBox("Avez-vous completé l'onglet 'Actualisation' ?", vbQuestion + vbYesNo, "ATTENTION")
If Rep = vbYes Then
MsgBox "PARFAIT!"
ElseIf Rep = vbNo Then
MsgBox "FAITES-LE!"
Sheets("Actualisation").Select
Cancel = True
End If
End Sub
Par contre le problème, c'est que qd je ferme le classeur (BeforeClose), il me pose une première fois la question, puis si je l'ai fermé suite à des modifications, alors il me repose la question une deuxième fois (BeforeSave) avant de sauvegarder!! Comment ne pas avoir cette répétition?
merci à tous
C'est peut être pas la meilleur solution, mais tu pourrais ajouter un boolean (public) dans ta procédure BeforeSave (appelon le bool), defini sur "False" par défaut. Lorsque tu utilise BeforeSave, tu fais bool = true. Ensuite, il n'y a pus qu'à conditionner ta fonction BeforeClose en fonction de la valeur de bool (tu l'exectute si bool = false) .
J'espère avoir répondu à ta question (et avoir été clair...)
A plus
Tibaldus
C'est très gentil de m'avoir répondu, mais cependant, je ne comprends exactement ce que je devrais faire!! C'est un peu compliqué pour moi!! Je mets ton code où dans le code que j'i écris au dessus?
merci en tout cas
Au début de ton code (avant le début de ta première procédure), tu défini ta variable boolean :
dim bool as boolean
bool = FalseEnsuite, tu ajoute une ligne dans le code de ta procédure BeforeSave pour définir bool sur "true" lorsque tu l'utilise :
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Rep = MsgBox("Avez-vous completé l'onglet 'Actualisation' ?", vbQuestion + vbYesNo, "ATTENTION")
If Rep = vbYes Then
MsgBox "PARFAIT!"
bool = True 'Ligne a ajouter
ElseIf Rep = vbNo Then
MsgBox "FAITES-LE!"
Sheets("Actualisation").Select
Cancel = True
End If
End SubEnsuite, pour eviter que le message s'affiche 2 fois, tu fais en sorte que la fonction BeforeClose ne s'execute que si bool = False (si bool = True ça veux dire que tu as déjà eu le message avec la fonction BeforeSave) :
Private Sub Workbook_BeforeClose(Cancel As Boolean)
If bool = False Then ' Ligne a ajouter
Rep = MsgBox("Avez-vous completé l'onglet 'Actualisation' ?", vbQuestion + vbYesNo, "ATTENTION")
If Rep = vbYes Then
MsgBox "PARFAIT!"
ActiveWorkbook.Save
ElseIf Rep = vbNo Then
MsgBox "FAITES-LE!"
Sheets("Actualisation").Select
Cancel = True
End If
End if ' Ligne a ajouter
End SubNormalement ça devrait marcher...
A plus
Tibaldus[/b][/code]
Merci beaucoup!!!
A partir de ce que tu m'as dit voilà ce que j'ai fais:
Dim bool As Boolean
Private Sub Workbook_BeforeClose(Cancel As Boolean)
If bool = False Then
Rep = MsgBox("Avez-vous completé l'onglet 'Actualisation' ?", vbQuestion + vbYesNo, "ATTENTION")
If Rep = vbYes Then
MsgBox "PARFAIT!"
bool = True
ActiveWorkbook.Save
ElseIf Rep = vbNo Then
MsgBox "FAITES-LE!"
Sheets("Actualisation").Select
Cancel = True
bool = False
End If
End If
End Sub
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
If bool = False Then
Rep = MsgBox("Avez-vous completé l'onglet 'Actualisation' ?", vbQuestion + vbYesNo, "ATTENTION")
If Rep = vbYes Then
MsgBox "PARFAIT!"
bool = True
ElseIf Rep = vbNo Then
MsgBox "FAITES-LE!"
Sheets("Actualisation").Select
Cancel = True
bool = False
End If
End If
End Sub
Comme ça au cas où la personne répod non, ca remet bool sur False..
Encore merci