Fermer un fichier Excel sans demander l'enregistrement avec VBA

Bonjour à tous,

J'ai un fichier qui est utilisé pour la consultation et la modification de données issues d'un autre classeur. Ce fichier est exclusivement composé de formules et de macro qui doivent rester les mêmes tout le temps. Je souhaite donc que les utilisateur ne puissent pas enregistrer dans le cas où des modifications inopportunes devaient intervenir.

J'ai mis en place une protection avec mdp sur toutes les feuilles, ce qui est déjà bien.

Je pourrais paramétrer le fichier en lecture seule mais c'est semble-t-il une manip' qui s'annule quand le fichier est ouvert depuis un PC tiers (ce qui peut arriver).

Soit dit en passant, demander via VBA qu'un fichier s'ouvre systématiquement en lecture seule m'est apparue impossible. Mais si quelqu'un a une idée...

Mais ma question sur ce post ci est la suivante : je souhaite que ce fichier ne soit pas enregistrable et pour cela j'ai écrit ces lignes dans ThisWorbook :

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)Cancel = True 'Annule les demandes d'enregistrementEnd Sub

Ca, ça marche.

Puis à la fermeture, après confirmation de l'utilisateur, le fichier se ferme et ne s'enregistre pas et pour cela j'ai écrit, toujours dans ThisWorkbook :

Private Sub Workbook_BeforeClose(Cancel As Boolean)Dim wb As Workbook

If MsgBox("Souhaitez-vous fermer le Debrief ?", vbYesNo, "Demande de confirmation de fermeture") = vbYes Then

For Each wb In Workbooks If wb.Name = "DEBRIEF_BASE_NE_PAS_TOUCHER.xlsx" Then 'il s'agit du fichier qui contient les données et qui s'ouvre en arrière plan wb.Close savechanges:=TrueExit For End If Next wb If wb Is Nothing Then End If

'Informe Excel que le fichier a déjà été enregistré (cela évite d'avoir une demande d'enregistrement à la fermeture)Application.ThisWorkbook.Saved = True

'si l'utilisateur ne veut finalement pas fermer :

ElseExit SubEnd If

End Sub

Ce bout de code fonctionne très bien si l'utilisateur dit "oui" pour fermer le fichier.

Mais s'il dit non : le fichier demande à l'utilisateur veut enregistrer... si l'utilisateur clique "oui", ça boucle. S'il clique "non" le fichier se ferme (alors que l'utilisateur avait dit qu'il ne voulait pas fermer... )

Une idée ?

Je reposte car je m'aperçois que mon choix de mise en forme n'était pas pertinent :

Bonjour à tous (donc)

J'ai un fichier qui est utilisé pour la consultation et la modification de données issues d'un autre classeur. Ce fichier est exclusivement composé de formules et de macro qui doivent rester les mêmes tout le temps. Je souhaite donc que les utilisateur ne puissent pas enregistrer dans le cas où des modifications inopportunes devaient intervenir.

J'ai mis en place une protection avec mdp sur toutes les feuilles, ce qui est déjà bien.

Je pourrais paramétrer le fichier en lecture seule mais c'est semble-t-il une manip' qui s'annule quand le fichier est ouvert depuis un PC tiers (ce qui peut arriver).

Soit dit en passant, demander via VBA qu'un fichier s'ouvre systématiquement en lecture seule m'est apparue impossible. Mais si quelqu'un a une idée...

Mais ma question sur ce post ci est la suivante : je souhaite que ce fichier ne soit pas enregistrable et pour cela j'ai écrit ces lignes dans ThisWorbook :


Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Cancel = True 'Annule les demandes d'enregistrement
End Sub

Ca, ça marche.

Puis à la fermeture, après confirmation de l'utilisateur, le fichier se ferme et ne s'enregistre pas et pour cela j'ai écrit, toujours dans ThisWorkbook

Private Sub Workbook_BeforeClose(Cancel As Boolean)

Dim wb As Workbook


Select Case MsgBox("Souhaitez-vous fermer le Debrief ?", vbOKCancel, "Demande de confirmation de fermeture")
Case vbOK
For Each wb In Workbooks
If wb.Name = "DEBRIEF_BASE_NE_PAS_TOUCHER.xlsx" Then
wb.Close savechanges:=True

Exit For
End If
Next wb
If wb Is Nothing Then

End If

'Informe Excel que le fichier a déjà été enregistré (cela évite d'avoir une demande d'enregistrement à la fermeture)
Application.ThisWorkbook.Saved = True

Case vbCancel
Exit Sub

End Select

End Sub

Ce bout de code fonctionne très bien si l'utilisateur dit "oui" pour fermer le fichier.

Mais s'il dit non : le fichier demande à l'utilisateur veut enregistrer... si l'utilisateur clique "oui", ça boucle. S'il clique "non" le fichier se ferme (alors que l'utilisateur avait dit qu'il ne voulait pas fermer... )

Une idée ?

j'ai trouvé ma réponse.

Il faut utiliser cancel=true plutôt que Exit Sub

Donc sur la toute fin du code :

Case vbCancel
Cancel=true

End Select

End Sub

Voila voila

Bonjour

Je pensais que vous alliez reposter car votre mise en forme n'était pas pertinente

La balise à utiliser pour du code VBA : </>

@ bientôt

LouReeD

Rechercher des sujets similaires à "fermer fichier demander enregistrement vba"