Message Conditionnel BeforeClose

Bonjour à l'Equipe,

Je désire terminer mon programme avec un message dépendant d'une variable acquise dans un module.

Comment faire reconnaître cette variable dans l'événement Private Sub Workbook_BeforeClose (cancel As Boolean)

Je l'ai déclarée "Publique" au début du module et ensuite au début de ThisWorkBook mais ca marche pas !?

La variable ne passe pas dans la routine "BeforeClose" …

Où dois-je déclarer cette Variable pour qu'elle "passe" dans l'événement final ?

Mon code:

Sub Info_message()

Message = "OUI"

'ActiveWorkbook.Save

ActiveWorkbook.Close

End Sub

-->ThisWorkBook: Public Message As String

Private Sub Workbook_Beforeclose(cancel As Boolean)

MsgBox "Etat du Message=> " & Message 'Debug info

Select Case Message

Case Message = "OUI"

MsgBox "Fin de programme AVEC Message"

Case Message = "NON"

MsgBox "Pas de Message ..."

Case Else

MsgBox "Variable INDETERMINEE !!!!!!!!!!"

End Select

End Sub

Merci d'avance.

Bonjour,

Merci pour la réponse.

Tout résidait donc dans la déclaration de l'Option Explicit.

Pour l'avenir, j'ai donc forcé Excel à toujours déclarer les Variables avec l'option Explicit:

Ouvrir l'Editeur VBA --> Outils --> Editeur --> Cocher: Déclaration des variables obligatoires.

Bonne Journée.

HELP

Jean-Eric,

Voici pourtant un programme où la variable ne passe toujours pas dans l’Evénement BeforeClose malgré une définition Publique et Option Explicite.

Il s’agit d’un programme qui sauve et ferme automatiquement un fichier ouvert en réseau, pour le libérer, si l’utilisateur ne confirme pas qu’il y travaille encore.

La variable EtatMSg (string) est définie à « Initial » dans l’événement Workbook_Open.

Elle passe à « AUTO » lorsque l’utilisateur ne répond pas au message généré dans le Module5.

( -->Attendre 10 secondes l’arrivée du message et ne pas y répondre pour activer la fermeture du fichier)

Une msgbox de Debug dans ce module confirme d’ailleurs que la variable est bien devenue « AUTO » mais elle n’est pas exportée dans Before_Close où elle reste égale à « Initial » !??

Une idée du pourquoi ?

Merci.

15test-explicit.xlsm (196.62 Ko)

UP

Bonjour,

Pas de solution à cette variable qui ne passe pas (dans le deuxième fichier annexé) ?

Merci.

Bonsoir,

Il y a une confusion : la variable EtatMsg est déclarée à 2 endroits différents.

Il s'agit de 2 variables différentes :

Dans ThisWorkBook :

- valeur initiale à l'ouverture du classeur : EtatMsg = "Initial"

Cette valeur n'est jamais modifiée

- à la fermeture du classeur, elle est donc toujours à "Initial"

Dans Module5 :

- la variable modifiée est celle de Module5

Il faut donc supprimer la déclaration "Public EtatMsg As String" dans "ThisWorkBook"

On aura alors une seule variable, accessible depuis l'ensemble des modules, feuilles, et cela ne devrait plus poser de problème.

C'est presque étonnant que VBA compile !

Bonne soirée

Bouben

Bonjour Bouben,

En effet, c'était bien là le problème: une même variable publique déclarée deux fois à des endroits différents !

J'ai donc supprimé la déclaration dans ThisWorkBook.

Dans mon esprit, cette variable étant déclarée publique elle était donc unique et reconnue sous ce nom unique dans les divers modules !

Très bizarre donc, en effet, que le compilateur n'y vois pas une erreur !? ?

Merci pour cette clairvoyance

Rechercher des sujets similaires à "message conditionnel beforeclose"